Copy disabled (too large)
Download .txt
Showing preview only (27,032K chars total). Download the full file to get everything.
Repository: kubernetes-sigs/bootkube
Branch: master
Commit: 56216d7d14b1
Files: 1777
Total size: 25.4 MB
Directory structure:
gitextract_n2_dffvn/
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── Documentation/
│ ├── alpha-features.md
│ ├── design-principles.md
│ ├── development.md
│ ├── disaster-recovery.md
│ ├── network-requirements.md
│ ├── root-requirements.md
│ ├── upgrading.md
│ └── users-integrations.md
├── LICENSE
├── Makefile
├── NOTICE
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── RELEASING.md
├── ROADMAP.md
├── SECURITY_CONTACTS
├── bill-of-materials.json
├── build/
│ ├── README.md
│ ├── build-image.sh
│ ├── build-release.sh
│ └── git-version.sh
├── cmd/
│ ├── bootkube/
│ │ ├── main.go
│ │ ├── recover.go
│ │ ├── render.go
│ │ └── start.go
│ ├── checkpoint/
│ │ ├── README.md
│ │ └── main.go
│ └── render/
│ └── plugin/
│ └── default/
│ ├── asset/
│ │ ├── asset.go
│ │ ├── asset_test.go
│ │ ├── images.go
│ │ ├── internal/
│ │ │ └── templates.go
│ │ ├── k8s.go
│ │ └── tls.go
│ ├── main.go
│ └── render_test.go
├── code-of-conduct.md
├── e2e/
│ ├── README.md
│ ├── checkpointer_test.go
│ ├── deleteapi_test.go
│ ├── internal/
│ │ └── e2eutil/
│ │ ├── testworkload/
│ │ │ └── nginx_workload.go
│ │ └── utils/
│ │ └── utils.go
│ ├── main_test.go
│ ├── network_test.go
│ ├── node_test.go
│ ├── reboot_test.go
│ ├── required_imports.go
│ ├── smoke_test.go
│ └── ssh_client_test.go
├── go.mod
├── go.sum
├── hack/
│ ├── jenkins/
│ │ ├── README.md
│ │ ├── images/
│ │ │ └── bootkube-e2e/
│ │ │ └── Dockerfile
│ │ ├── jobs/
│ │ │ ├── bootkube_conformance_cncf.groovy
│ │ │ └── bootkube_e2e.groovy
│ │ ├── pipelines/
│ │ │ ├── bootkube-conformance/
│ │ │ │ └── Jenkinsfile
│ │ │ └── bootkube-e2e/
│ │ │ └── Jenkinsfile
│ │ └── scripts/
│ │ ├── conformance.sh
│ │ ├── e2e.sh
│ │ ├── gather-logs.sh
│ │ ├── tqs-down.sh
│ │ └── tqs-up.sh
│ ├── multi-node/
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── bootkube-test-recovery
│ │ ├── bootkube-up
│ │ ├── conformance-test.sh
│ │ ├── etcd-cloud-config.yaml
│ │ └── user-data.sample
│ ├── quickstart/
│ │ ├── .gitignore
│ │ ├── copylogs.sh
│ │ ├── init-master.sh
│ │ ├── init-node.sh
│ │ ├── kubelet.service
│ │ ├── quickstart-aws.md
│ │ ├── quickstart-gce.md
│ │ └── test.sh
│ ├── scripts/
│ │ └── gatherlogs
│ ├── single-node/
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── bootkube-up
│ │ ├── conformance-test.sh
│ │ ├── user-data-etcd.sample
│ │ └── user-data.sample
│ ├── terraform-quickstart/
│ │ ├── README.md
│ │ ├── copylogs.sh
│ │ ├── environment_default.txt
│ │ ├── environment_e2e.txt
│ │ ├── genlogs.sh
│ │ ├── iam.tf
│ │ ├── main.tf
│ │ ├── network.tf
│ │ ├── outputs.tf
│ │ ├── run-conformance.sh
│ │ ├── start-cluster.sh
│ │ ├── terraform.tfvars.example
│ │ └── variables.tf
│ └── tests/
│ ├── conformance-gce.sh
│ └── conformance-test.sh
├── image/
│ ├── bootkube/
│ │ ├── Dockerfile
│ │ └── build-image.sh
│ └── checkpoint/
│ ├── Dockerfile
│ └── build-image.sh
├── pkg/
│ ├── bootkube/
│ │ ├── bootkube.go
│ │ ├── bootstrap.go
│ │ ├── bootstrap_test.go
│ │ ├── create.go
│ │ ├── create_test.go
│ │ └── status.go
│ ├── checkpoint/
│ │ ├── apiserver.go
│ │ ├── checkpoint.go
│ │ ├── config_map.go
│ │ ├── cri/
│ │ │ ├── README.md
│ │ │ ├── v1alpha1/
│ │ │ │ ├── api.pb.go
│ │ │ │ └── constants.go
│ │ │ └── v1alpha2/
│ │ │ ├── api.pb.go
│ │ │ └── constants.go
│ │ ├── internal/
│ │ │ ├── README.md
│ │ │ ├── util.go
│ │ │ └── util_unix.go
│ │ ├── kubelet.go
│ │ ├── manifest.go
│ │ ├── pod.go
│ │ ├── pod_test.go
│ │ ├── process.go
│ │ ├── process_test.go
│ │ ├── runtime_service.go
│ │ ├── secret.go
│ │ ├── state.go
│ │ └── state_test.go
│ ├── plugin/
│ │ └── plugin.go
│ ├── recovery/
│ │ ├── apiserver.go
│ │ ├── etcd.go
│ │ ├── etcd_template.go
│ │ ├── recover.go
│ │ ├── recover_test.go
│ │ └── util.go
│ ├── tlsutil/
│ │ └── tlsutil.go
│ ├── util/
│ │ └── log.go
│ └── version/
│ └── version.go
└── vendor/
├── github.com/
│ ├── coreos/
│ │ └── etcd/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── auth/
│ │ │ └── authpb/
│ │ │ ├── auth.pb.go
│ │ │ └── auth.proto
│ │ ├── clientv3/
│ │ │ ├── README.md
│ │ │ ├── auth.go
│ │ │ ├── client.go
│ │ │ ├── cluster.go
│ │ │ ├── compact_op.go
│ │ │ ├── compare.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── health_balancer.go
│ │ │ ├── kv.go
│ │ │ ├── lease.go
│ │ │ ├── logger.go
│ │ │ ├── maintenance.go
│ │ │ ├── op.go
│ │ │ ├── options.go
│ │ │ ├── ready_wait.go
│ │ │ ├── retry.go
│ │ │ ├── sort.go
│ │ │ ├── txn.go
│ │ │ └── watch.go
│ │ ├── etcdserver/
│ │ │ ├── api/
│ │ │ │ └── v3rpc/
│ │ │ │ └── rpctypes/
│ │ │ │ ├── doc.go
│ │ │ │ ├── error.go
│ │ │ │ └── md.go
│ │ │ └── etcdserverpb/
│ │ │ ├── etcdserver.pb.go
│ │ │ ├── etcdserver.proto
│ │ │ ├── raft_internal.pb.go
│ │ │ ├── raft_internal.proto
│ │ │ ├── raft_internal_stringer.go
│ │ │ ├── rpc.pb.go
│ │ │ └── rpc.proto
│ │ ├── mvcc/
│ │ │ └── mvccpb/
│ │ │ ├── kv.pb.go
│ │ │ └── kv.proto
│ │ └── pkg/
│ │ └── types/
│ │ ├── doc.go
│ │ ├── id.go
│ │ ├── set.go
│ │ ├── slice.go
│ │ ├── urls.go
│ │ └── urlsmap.go
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── LICENSE
│ │ └── spew/
│ │ ├── bypass.go
│ │ ├── bypasssafe.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── doc.go
│ │ ├── dump.go
│ │ ├── format.go
│ │ └── spew.go
│ ├── ghodss/
│ │ └── yaml/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── fields.go
│ │ └── yaml.go
│ ├── gogo/
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── gogoproto/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── gogo.pb.go
│ │ │ ├── gogo.pb.golden
│ │ │ ├── gogo.proto
│ │ │ └── helper.go
│ │ ├── proto/
│ │ │ ├── Makefile
│ │ │ ├── clone.go
│ │ │ ├── custom_gogo.go
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── duration.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gogo.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── extensions_gogo.go
│ │ │ ├── lib.go
│ │ │ ├── lib_gogo.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_reflect_gogo.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_gogo.go
│ │ │ ├── properties.go
│ │ │ ├── properties_gogo.go
│ │ │ ├── skip_gogo.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_marshal_gogo.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── table_unmarshal_gogo.go
│ │ │ ├── text.go
│ │ │ ├── text_gogo.go
│ │ │ ├── text_parser.go
│ │ │ ├── timestamp.go
│ │ │ ├── timestamp_gogo.go
│ │ │ ├── wrappers.go
│ │ │ └── wrappers_gogo.go
│ │ ├── protoc-gen-gogo/
│ │ │ └── descriptor/
│ │ │ ├── Makefile
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor.pb.go
│ │ │ ├── descriptor_gostring.gen.go
│ │ │ └── helper.go
│ │ └── sortkeys/
│ │ └── sortkeys.go
│ ├── golang/
│ │ ├── glog/
│ │ │ ├── LICENSE
│ │ │ ├── README
│ │ │ ├── glog.go
│ │ │ └── glog_file.go
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── proto/
│ │ │ ├── clone.go
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── encode.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── lib.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── properties.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── text.go
│ │ │ └── text_parser.go
│ │ └── ptypes/
│ │ ├── any/
│ │ │ ├── any.pb.go
│ │ │ └── any.proto
│ │ ├── any.go
│ │ ├── doc.go
│ │ ├── duration/
│ │ │ ├── duration.pb.go
│ │ │ └── duration.proto
│ │ ├── duration.go
│ │ ├── timestamp/
│ │ │ ├── timestamp.pb.go
│ │ │ └── timestamp.proto
│ │ └── timestamp.go
│ ├── google/
│ │ ├── btree/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── btree.go
│ │ └── gofuzz/
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── fuzz.go
│ │ └── go.mod
│ ├── googleapis/
│ │ └── gnostic/
│ │ ├── LICENSE
│ │ ├── OpenAPIv2/
│ │ │ ├── OpenAPIv2.go
│ │ │ ├── OpenAPIv2.pb.go
│ │ │ ├── OpenAPIv2.proto
│ │ │ ├── README.md
│ │ │ └── openapi-2.0.json
│ │ ├── compiler/
│ │ │ ├── README.md
│ │ │ ├── context.go
│ │ │ ├── error.go
│ │ │ ├── extension-handler.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ └── reader.go
│ │ └── extensions/
│ │ ├── COMPILE-EXTENSION.sh
│ │ ├── README.md
│ │ ├── extension.pb.go
│ │ ├── extension.proto
│ │ └── extensions.go
│ ├── gregjones/
│ │ └── httpcache/
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── diskcache/
│ │ │ └── diskcache.go
│ │ └── httpcache.go
│ ├── hashicorp/
│ │ └── golang-lru/
│ │ ├── .gitignore
│ │ ├── 2q.go
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── arc.go
│ │ ├── lru.go
│ │ └── simplelru/
│ │ └── lru.go
│ ├── imdario/
│ │ └── mergo/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ └── mergo.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── modern-go/
│ │ └── concurrent/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── executor.go
│ │ ├── go_above_19.go
│ │ ├── go_below_19.go
│ │ ├── log.go
│ │ ├── test.sh
│ │ └── unbounded_executor.go
│ ├── pborman/
│ │ └── uuid/
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── json.go
│ │ ├── node.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ └── version4.go
│ ├── peterbourgon/
│ │ └── diskv/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── compression.go
│ │ ├── diskv.go
│ │ └── index.go
│ └── spf13/
│ ├── cobra/
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── bash_completions.go
│ │ ├── bash_completions.md
│ │ ├── cobra.go
│ │ ├── command.go
│ │ ├── command_notwin.go
│ │ └── command_win.go
│ └── pflag/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE
│ ├── README.md
│ ├── bool.go
│ ├── bool_slice.go
│ ├── count.go
│ ├── duration.go
│ ├── flag.go
│ ├── float32.go
│ ├── float64.go
│ ├── golangflag.go
│ ├── int.go
│ ├── int32.go
│ ├── int64.go
│ ├── int8.go
│ ├── int_slice.go
│ ├── ip.go
│ ├── ip_slice.go
│ ├── ipmask.go
│ ├── ipnet.go
│ ├── string.go
│ ├── string_array.go
│ ├── string_slice.go
│ ├── uint.go
│ ├── uint16.go
│ ├── uint32.go
│ ├── uint64.go
│ ├── uint8.go
│ └── uint_slice.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── curve25519/
│ │ │ ├── const_amd64.h
│ │ │ ├── const_amd64.s
│ │ │ ├── cswap_amd64.s
│ │ │ ├── curve25519.go
│ │ │ ├── doc.go
│ │ │ ├── freeze_amd64.s
│ │ │ ├── ladderstep_amd64.s
│ │ │ ├── mont25519_amd64.go
│ │ │ ├── mul_amd64.s
│ │ │ └── square_amd64.s
│ │ ├── ed25519/
│ │ │ ├── ed25519.go
│ │ │ └── internal/
│ │ │ └── edwards25519/
│ │ │ ├── const.go
│ │ │ └── edwards25519.go
│ │ ├── internal/
│ │ │ ├── chacha20/
│ │ │ │ ├── asm_arm64.s
│ │ │ │ ├── chacha_arm64.go
│ │ │ │ ├── chacha_generic.go
│ │ │ │ ├── chacha_noasm.go
│ │ │ │ ├── chacha_s390x.go
│ │ │ │ ├── chacha_s390x.s
│ │ │ │ └── xor.go
│ │ │ └── subtle/
│ │ │ ├── aliasing.go
│ │ │ └── aliasing_appengine.go
│ │ ├── poly1305/
│ │ │ ├── mac_noasm.go
│ │ │ ├── poly1305.go
│ │ │ ├── sum_amd64.go
│ │ │ ├── sum_amd64.s
│ │ │ ├── sum_arm.go
│ │ │ ├── sum_arm.s
│ │ │ ├── sum_generic.go
│ │ │ ├── sum_noasm.go
│ │ │ ├── sum_s390x.go
│ │ │ ├── sum_s390x.s
│ │ │ └── sum_vmsl_s390x.s
│ │ └── ssh/
│ │ ├── agent/
│ │ │ ├── client.go
│ │ │ ├── forward.go
│ │ │ ├── keyring.go
│ │ │ └── server.go
│ │ ├── buffer.go
│ │ ├── certs.go
│ │ ├── channel.go
│ │ ├── cipher.go
│ │ ├── client.go
│ │ ├── client_auth.go
│ │ ├── common.go
│ │ ├── connection.go
│ │ ├── doc.go
│ │ ├── handshake.go
│ │ ├── kex.go
│ │ ├── keys.go
│ │ ├── mac.go
│ │ ├── messages.go
│ │ ├── mux.go
│ │ ├── server.go
│ │ ├── session.go
│ │ ├── streamlocal.go
│ │ ├── tcpip.go
│ │ ├── terminal/
│ │ │ ├── terminal.go
│ │ │ ├── util.go
│ │ │ ├── util_aix.go
│ │ │ ├── util_bsd.go
│ │ │ ├── util_linux.go
│ │ │ ├── util_plan9.go
│ │ │ ├── util_solaris.go
│ │ │ └── util_windows.go
│ │ └── transport.go
│ ├── net/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── context/
│ │ │ ├── context.go
│ │ │ ├── ctxhttp/
│ │ │ │ └── ctxhttp.go
│ │ │ ├── go17.go
│ │ │ ├── go19.go
│ │ │ ├── pre_go17.go
│ │ │ └── pre_go19.go
│ │ ├── http/
│ │ │ └── httpguts/
│ │ │ ├── guts.go
│ │ │ └── httplex.go
│ │ ├── http2/
│ │ │ ├── .gitignore
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── go111.go
│ │ │ ├── gotrack.go
│ │ │ ├── headermap.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── not_go111.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── transport.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority.go
│ │ │ └── writesched_random.go
│ │ ├── idna/
│ │ │ ├── idna10.0.0.go
│ │ │ ├── idna9.0.0.go
│ │ │ ├── punycode.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── trie.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ └── trace/
│ │ ├── events.go
│ │ ├── histogram.go
│ │ └── trace.go
│ ├── oauth2/
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── internal/
│ │ │ ├── client_appengine.go
│ │ │ ├── doc.go
│ │ │ ├── oauth2.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── oauth2.go
│ │ ├── token.go
│ │ └── transport.go
│ ├── sys/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── cpu/
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── byteorder.go
│ │ │ ├── cpu.go
│ │ │ ├── cpu_aix_ppc64.go
│ │ │ ├── cpu_arm.go
│ │ │ ├── cpu_gc_s390x.go
│ │ │ ├── cpu_gc_x86.go
│ │ │ ├── cpu_gccgo.c
│ │ │ ├── cpu_gccgo.go
│ │ │ ├── cpu_gccgo_s390x.go
│ │ │ ├── cpu_linux.go
│ │ │ ├── cpu_linux_arm64.go
│ │ │ ├── cpu_linux_ppc64x.go
│ │ │ ├── cpu_linux_s390x.go
│ │ │ ├── cpu_mips64x.go
│ │ │ ├── cpu_mipsx.go
│ │ │ ├── cpu_other_arm64.go
│ │ │ ├── cpu_s390x.s
│ │ │ ├── cpu_wasm.go
│ │ │ ├── cpu_x86.go
│ │ │ ├── cpu_x86.s
│ │ │ └── syscall_aix_ppc64_gc.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_darwin_386.s
│ │ │ ├── asm_darwin_amd64.s
│ │ │ ├── asm_darwin_arm.s
│ │ │ ├── asm_darwin_arm64.s
│ │ │ ├── asm_dragonfly_amd64.s
│ │ │ ├── asm_freebsd_386.s
│ │ │ ├── asm_freebsd_amd64.s
│ │ │ ├── asm_freebsd_arm.s
│ │ │ ├── asm_freebsd_arm64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_netbsd_386.s
│ │ │ ├── asm_netbsd_amd64.s
│ │ │ ├── asm_netbsd_arm.s
│ │ │ ├── asm_netbsd_arm64.s
│ │ │ ├── asm_openbsd_386.s
│ │ │ ├── asm_openbsd_amd64.s
│ │ │ ├── asm_openbsd_arm.s
│ │ │ ├── asm_openbsd_arm64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── errors_freebsd_386.go
│ │ │ ├── errors_freebsd_amd64.go
│ │ │ ├── errors_freebsd_arm.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ioctl.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_386.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_386.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zptrace386_linux.go
│ │ │ ├── zptracearm_linux.go
│ │ │ ├── zptracemips_linux.go
│ │ │ ├── zptracemipsle_linux.go
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_386.1_11.go
│ │ │ ├── zsyscall_darwin_386.go
│ │ │ ├── zsyscall_darwin_386.s
│ │ │ ├── zsyscall_darwin_amd64.1_11.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm.1_11.go
│ │ │ ├── zsyscall_darwin_arm.go
│ │ │ ├── zsyscall_darwin_arm.s
│ │ │ ├── zsyscall_darwin_arm64.1_11.go
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysnum_darwin_386.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_386.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ └── ztypes_solaris_amd64.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── asm_windows_386.s
│ │ ├── asm_windows_amd64.s
│ │ ├── asm_windows_arm.s
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── text/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ ├── bidirule.go
│ │ │ ├── bidirule10.0.0.go
│ │ │ └── bidirule9.0.0.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ └── norm/
│ │ ├── composition.go
│ │ ├── forminfo.go
│ │ ├── input.go
│ │ ├── iter.go
│ │ ├── normalize.go
│ │ ├── readwriter.go
│ │ ├── tables10.0.0.go
│ │ ├── tables9.0.0.go
│ │ ├── transform.go
│ │ └── trie.go
│ └── time/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ └── rate/
│ ├── rate.go
│ ├── rate_go16.go
│ └── rate_go17.go
├── google.golang.org/
│ ├── appengine/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ ├── api.go
│ │ │ ├── api_classic.go
│ │ │ ├── api_common.go
│ │ │ ├── app_id.go
│ │ │ ├── base/
│ │ │ │ ├── api_base.pb.go
│ │ │ │ └── api_base.proto
│ │ │ ├── datastore/
│ │ │ │ ├── datastore_v3.pb.go
│ │ │ │ └── datastore_v3.proto
│ │ │ ├── identity.go
│ │ │ ├── identity_classic.go
│ │ │ ├── identity_flex.go
│ │ │ ├── identity_vm.go
│ │ │ ├── internal.go
│ │ │ ├── log/
│ │ │ │ ├── log_service.pb.go
│ │ │ │ └── log_service.proto
│ │ │ ├── main.go
│ │ │ ├── main_common.go
│ │ │ ├── main_vm.go
│ │ │ ├── metadata.go
│ │ │ ├── net.go
│ │ │ ├── regen.sh
│ │ │ ├── remote_api/
│ │ │ │ ├── remote_api.pb.go
│ │ │ │ └── remote_api.proto
│ │ │ ├── transaction.go
│ │ │ └── urlfetch/
│ │ │ ├── urlfetch_service.pb.go
│ │ │ └── urlfetch_service.proto
│ │ └── urlfetch/
│ │ └── urlfetch.go
│ ├── genproto/
│ │ ├── LICENSE
│ │ └── googleapis/
│ │ └── rpc/
│ │ └── status/
│ │ └── status.pb.go
│ └── grpc/
│ ├── .travis.yml
│ ├── AUTHORS
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── backoff.go
│ ├── balancer/
│ │ ├── balancer.go
│ │ ├── base/
│ │ │ ├── balancer.go
│ │ │ └── base.go
│ │ └── roundrobin/
│ │ └── roundrobin.go
│ ├── balancer.go
│ ├── balancer_conn_wrappers.go
│ ├── balancer_v1_wrapper.go
│ ├── binarylog/
│ │ └── grpc_binarylog_v1/
│ │ └── binarylog.pb.go
│ ├── call.go
│ ├── clientconn.go
│ ├── codec.go
│ ├── codegen.sh
│ ├── codes/
│ │ ├── code_string.go
│ │ └── codes.go
│ ├── connectivity/
│ │ └── connectivity.go
│ ├── credentials/
│ │ ├── credentials.go
│ │ ├── internal/
│ │ │ ├── syscallconn.go
│ │ │ └── syscallconn_appengine.go
│ │ └── tls13.go
│ ├── dialoptions.go
│ ├── doc.go
│ ├── encoding/
│ │ ├── encoding.go
│ │ └── proto/
│ │ └── proto.go
│ ├── go.mod
│ ├── go.sum
│ ├── grpclog/
│ │ ├── grpclog.go
│ │ ├── logger.go
│ │ └── loggerv2.go
│ ├── health/
│ │ └── grpc_health_v1/
│ │ └── health.pb.go
│ ├── install_gae.sh
│ ├── interceptor.go
│ ├── internal/
│ │ ├── backoff/
│ │ │ └── backoff.go
│ │ ├── binarylog/
│ │ │ ├── binarylog.go
│ │ │ ├── binarylog_testutil.go
│ │ │ ├── env_config.go
│ │ │ ├── method_logger.go
│ │ │ ├── regenerate.sh
│ │ │ ├── sink.go
│ │ │ └── util.go
│ │ ├── channelz/
│ │ │ ├── funcs.go
│ │ │ ├── types.go
│ │ │ ├── types_linux.go
│ │ │ ├── types_nonlinux.go
│ │ │ ├── util_linux.go
│ │ │ └── util_nonlinux.go
│ │ ├── envconfig/
│ │ │ └── envconfig.go
│ │ ├── grpcrand/
│ │ │ └── grpcrand.go
│ │ ├── grpcsync/
│ │ │ └── event.go
│ │ ├── internal.go
│ │ ├── syscall/
│ │ │ ├── syscall_linux.go
│ │ │ └── syscall_nonlinux.go
│ │ └── transport/
│ │ ├── bdp_estimator.go
│ │ ├── controlbuf.go
│ │ ├── defaults.go
│ │ ├── flowcontrol.go
│ │ ├── handler_server.go
│ │ ├── http2_client.go
│ │ ├── http2_server.go
│ │ ├── http_util.go
│ │ ├── log.go
│ │ └── transport.go
│ ├── keepalive/
│ │ └── keepalive.go
│ ├── metadata/
│ │ └── metadata.go
│ ├── naming/
│ │ ├── dns_resolver.go
│ │ └── naming.go
│ ├── peer/
│ │ └── peer.go
│ ├── picker_wrapper.go
│ ├── pickfirst.go
│ ├── proxy.go
│ ├── resolver/
│ │ ├── dns/
│ │ │ └── dns_resolver.go
│ │ ├── passthrough/
│ │ │ └── passthrough.go
│ │ └── resolver.go
│ ├── resolver_conn_wrapper.go
│ ├── rpc_util.go
│ ├── server.go
│ ├── service_config.go
│ ├── stats/
│ │ ├── handlers.go
│ │ └── stats.go
│ ├── status/
│ │ └── status.go
│ ├── stream.go
│ ├── tap/
│ │ └── tap.go
│ ├── trace.go
│ ├── version.go
│ └── vet.sh
├── gopkg.in/
│ ├── inf.v0/
│ │ ├── LICENSE
│ │ ├── dec.go
│ │ └── rounder.go
│ └── yaml.v2/
│ ├── .travis.yml
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── go.mod
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── k8s.io/
│ ├── api/
│ │ ├── LICENSE
│ │ ├── admissionregistration/
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── apps/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta2/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── auditregistration/
│ │ │ └── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── authentication/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── authorization/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── autoscaling/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v2beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v2beta2/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── batch/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v2alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── certificates/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── coordination/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── core/
│ │ │ └── v1/
│ │ │ ├── annotation_key_constants.go
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── objectreference.go
│ │ │ ├── register.go
│ │ │ ├── resource.go
│ │ │ ├── taint.go
│ │ │ ├── toleration.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── events/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── extensions/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── networking/
│ │ │ └── v1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── policy/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── rbac/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── scheduling/
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── settings/
│ │ │ └── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── storage/
│ │ ├── v1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── v1beta1/
│ │ ├── doc.go
│ │ ├── generated.pb.go
│ │ ├── generated.proto
│ │ ├── register.go
│ │ ├── types.go
│ │ ├── types_swagger_doc_generated.go
│ │ └── zz_generated.deepcopy.go
│ ├── apiextensions-apiserver/
│ │ ├── LICENSE
│ │ └── pkg/
│ │ └── apis/
│ │ └── apiextensions/
│ │ ├── deepcopy.go
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── register.go
│ │ ├── types.go
│ │ ├── types_jsonschema.go
│ │ ├── v1beta1/
│ │ │ ├── conversion.go
│ │ │ ├── deepcopy.go
│ │ │ ├── defaults.go
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── marshal.go
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_jsonschema.go
│ │ │ ├── zz_generated.conversion.go
│ │ │ ├── zz_generated.deepcopy.go
│ │ │ └── zz_generated.defaults.go
│ │ └── zz_generated.deepcopy.go
│ ├── apimachinery/
│ │ ├── LICENSE
│ │ ├── pkg/
│ │ │ ├── api/
│ │ │ │ ├── equality/
│ │ │ │ │ └── semantic.go
│ │ │ │ ├── errors/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── meta/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── firsthit_restmapper.go
│ │ │ │ │ ├── help.go
│ │ │ │ │ ├── interfaces.go
│ │ │ │ │ ├── lazy.go
│ │ │ │ │ ├── meta.go
│ │ │ │ │ ├── multirestmapper.go
│ │ │ │ │ ├── priority.go
│ │ │ │ │ └── restmapper.go
│ │ │ │ └── resource/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── amount.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── math.go
│ │ │ │ ├── quantity.go
│ │ │ │ ├── quantity_proto.go
│ │ │ │ ├── scale_int.go
│ │ │ │ ├── suffix.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── apis/
│ │ │ │ └── meta/
│ │ │ │ ├── internalversion/
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ ├── v1/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── controller_ref.go
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── duration.go
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ ├── group_version.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── labels.go
│ │ │ │ │ ├── meta.go
│ │ │ │ │ ├── micro_time.go
│ │ │ │ │ ├── micro_time_proto.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── time.go
│ │ │ │ │ ├── time_proto.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ │ ├── unstructured/
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ ├── unstructured.go
│ │ │ │ │ │ ├── unstructured_list.go
│ │ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ │ ├── watch.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── conversion.go
│ │ │ │ ├── deepcopy.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ └── zz_generated.defaults.go
│ │ │ ├── conversion/
│ │ │ │ ├── converter.go
│ │ │ │ ├── deep_equal.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── helper.go
│ │ │ │ └── queryparams/
│ │ │ │ ├── convert.go
│ │ │ │ └── doc.go
│ │ │ ├── fields/
│ │ │ │ ├── doc.go
│ │ │ │ ├── fields.go
│ │ │ │ ├── requirements.go
│ │ │ │ └── selector.go
│ │ │ ├── labels/
│ │ │ │ ├── doc.go
│ │ │ │ ├── labels.go
│ │ │ │ ├── selector.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── runtime/
│ │ │ │ ├── codec.go
│ │ │ │ ├── codec_check.go
│ │ │ │ ├── conversion.go
│ │ │ │ ├── converter.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── embedded.go
│ │ │ │ ├── error.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── helper.go
│ │ │ │ ├── interfaces.go
│ │ │ │ ├── register.go
│ │ │ │ ├── schema/
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ ├── group_version.go
│ │ │ │ │ └── interfaces.go
│ │ │ │ ├── scheme.go
│ │ │ │ ├── scheme_builder.go
│ │ │ │ ├── serializer/
│ │ │ │ │ ├── codec_factory.go
│ │ │ │ │ ├── json/
│ │ │ │ │ │ ├── json.go
│ │ │ │ │ │ └── meta.go
│ │ │ │ │ ├── negotiated_codec.go
│ │ │ │ │ ├── protobuf/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ └── protobuf.go
│ │ │ │ │ ├── protobuf_extension.go
│ │ │ │ │ ├── recognizer/
│ │ │ │ │ │ └── recognizer.go
│ │ │ │ │ ├── streaming/
│ │ │ │ │ │ └── streaming.go
│ │ │ │ │ └── versioning/
│ │ │ │ │ └── versioning.go
│ │ │ │ ├── swagger_doc_generator.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_proto.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── selection/
│ │ │ │ └── operator.go
│ │ │ ├── types/
│ │ │ │ ├── doc.go
│ │ │ │ ├── namespacedname.go
│ │ │ │ ├── nodename.go
│ │ │ │ ├── patch.go
│ │ │ │ └── uid.go
│ │ │ ├── util/
│ │ │ │ ├── cache/
│ │ │ │ │ ├── cache.go
│ │ │ │ │ └── lruexpirecache.go
│ │ │ │ ├── clock/
│ │ │ │ │ └── clock.go
│ │ │ │ ├── diff/
│ │ │ │ │ └── diff.go
│ │ │ │ ├── errors/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── framer/
│ │ │ │ │ └── framer.go
│ │ │ │ ├── intstr/
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ └── intstr.go
│ │ │ │ ├── json/
│ │ │ │ │ └── json.go
│ │ │ │ ├── naming/
│ │ │ │ │ └── from_stack.go
│ │ │ │ ├── net/
│ │ │ │ │ ├── http.go
│ │ │ │ │ ├── interface.go
│ │ │ │ │ ├── port_range.go
│ │ │ │ │ ├── port_split.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── rand/
│ │ │ │ │ └── rand.go
│ │ │ │ ├── runtime/
│ │ │ │ │ └── runtime.go
│ │ │ │ ├── sets/
│ │ │ │ │ ├── byte.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── empty.go
│ │ │ │ │ ├── int.go
│ │ │ │ │ ├── int64.go
│ │ │ │ │ └── string.go
│ │ │ │ ├── validation/
│ │ │ │ │ ├── field/
│ │ │ │ │ │ ├── errors.go
│ │ │ │ │ │ └── path.go
│ │ │ │ │ └── validation.go
│ │ │ │ ├── wait/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── wait.go
│ │ │ │ └── yaml/
│ │ │ │ └── decoder.go
│ │ │ ├── version/
│ │ │ │ ├── doc.go
│ │ │ │ ├── helpers.go
│ │ │ │ └── types.go
│ │ │ └── watch/
│ │ │ ├── doc.go
│ │ │ ├── filter.go
│ │ │ ├── mux.go
│ │ │ ├── streamwatcher.go
│ │ │ ├── watch.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── third_party/
│ │ └── forked/
│ │ └── golang/
│ │ └── reflect/
│ │ └── deep_equal.go
│ ├── client-go/
│ │ ├── LICENSE
│ │ ├── discovery/
│ │ │ ├── cached_discovery.go
│ │ │ ├── discovery_client.go
│ │ │ ├── doc.go
│ │ │ ├── helper.go
│ │ │ └── round_tripper.go
│ │ ├── kubernetes/
│ │ │ ├── clientset.go
│ │ │ ├── doc.go
│ │ │ ├── import.go
│ │ │ ├── scheme/
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ └── typed/
│ │ │ ├── admissionregistration/
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── admissionregistration_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── initializerconfiguration.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── admissionregistration_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── mutatingwebhookconfiguration.go
│ │ │ │ └── validatingwebhookconfiguration.go
│ │ │ ├── apps/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── apps_client.go
│ │ │ │ │ ├── controllerrevision.go
│ │ │ │ │ ├── daemonset.go
│ │ │ │ │ ├── deployment.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── replicaset.go
│ │ │ │ │ └── statefulset.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── apps_client.go
│ │ │ │ │ ├── controllerrevision.go
│ │ │ │ │ ├── deployment.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── statefulset.go
│ │ │ │ └── v1beta2/
│ │ │ │ ├── apps_client.go
│ │ │ │ ├── controllerrevision.go
│ │ │ │ ├── daemonset.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── replicaset.go
│ │ │ │ └── statefulset.go
│ │ │ ├── auditregistration/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── auditregistration_client.go
│ │ │ │ ├── auditsink.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── authentication/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── authentication_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── tokenreview.go
│ │ │ │ │ └── tokenreview_expansion.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── authentication_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── tokenreview.go
│ │ │ │ └── tokenreview_expansion.go
│ │ │ ├── authorization/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── authorization_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── localsubjectaccessreview.go
│ │ │ │ │ ├── localsubjectaccessreview_expansion.go
│ │ │ │ │ ├── selfsubjectaccessreview.go
│ │ │ │ │ ├── selfsubjectaccessreview_expansion.go
│ │ │ │ │ ├── selfsubjectrulesreview.go
│ │ │ │ │ ├── selfsubjectrulesreview_expansion.go
│ │ │ │ │ ├── subjectaccessreview.go
│ │ │ │ │ └── subjectaccessreview_expansion.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── authorization_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── localsubjectaccessreview.go
│ │ │ │ ├── localsubjectaccessreview_expansion.go
│ │ │ │ ├── selfsubjectaccessreview.go
│ │ │ │ ├── selfsubjectaccessreview_expansion.go
│ │ │ │ ├── selfsubjectrulesreview.go
│ │ │ │ ├── selfsubjectrulesreview_expansion.go
│ │ │ │ ├── subjectaccessreview.go
│ │ │ │ └── subjectaccessreview_expansion.go
│ │ │ ├── autoscaling/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── autoscaling_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── horizontalpodautoscaler.go
│ │ │ │ ├── v2beta1/
│ │ │ │ │ ├── autoscaling_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── horizontalpodautoscaler.go
│ │ │ │ └── v2beta2/
│ │ │ │ ├── autoscaling_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ └── horizontalpodautoscaler.go
│ │ │ ├── batch/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── batch_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── job.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── batch_client.go
│ │ │ │ │ ├── cronjob.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── generated_expansion.go
│ │ │ │ └── v2alpha1/
│ │ │ │ ├── batch_client.go
│ │ │ │ ├── cronjob.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── certificates/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── certificates_client.go
│ │ │ │ ├── certificatesigningrequest.go
│ │ │ │ ├── certificatesigningrequest_expansion.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── coordination/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── coordination_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ └── lease.go
│ │ │ ├── core/
│ │ │ │ └── v1/
│ │ │ │ ├── componentstatus.go
│ │ │ │ ├── configmap.go
│ │ │ │ ├── core_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── endpoints.go
│ │ │ │ ├── event.go
│ │ │ │ ├── event_expansion.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── limitrange.go
│ │ │ │ ├── namespace.go
│ │ │ │ ├── namespace_expansion.go
│ │ │ │ ├── node.go
│ │ │ │ ├── node_expansion.go
│ │ │ │ ├── persistentvolume.go
│ │ │ │ ├── persistentvolumeclaim.go
│ │ │ │ ├── pod.go
│ │ │ │ ├── pod_expansion.go
│ │ │ │ ├── podtemplate.go
│ │ │ │ ├── replicationcontroller.go
│ │ │ │ ├── resourcequota.go
│ │ │ │ ├── secret.go
│ │ │ │ ├── service.go
│ │ │ │ ├── service_expansion.go
│ │ │ │ ├── serviceaccount.go
│ │ │ │ └── serviceaccount_expansion.go
│ │ │ ├── events/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── events_client.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── extensions/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── daemonset.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── deployment_expansion.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── extensions_client.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── ingress.go
│ │ │ │ ├── podsecuritypolicy.go
│ │ │ │ └── replicaset.go
│ │ │ ├── networking/
│ │ │ │ └── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── networking_client.go
│ │ │ │ └── networkpolicy.go
│ │ │ ├── policy/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── eviction.go
│ │ │ │ ├── eviction_expansion.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── poddisruptionbudget.go
│ │ │ │ ├── podsecuritypolicy.go
│ │ │ │ └── policy_client.go
│ │ │ ├── rbac/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── clusterrole.go
│ │ │ │ │ ├── clusterrolebinding.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── rbac_client.go
│ │ │ │ │ ├── role.go
│ │ │ │ │ └── rolebinding.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── clusterrole.go
│ │ │ │ │ ├── clusterrolebinding.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── rbac_client.go
│ │ │ │ │ ├── role.go
│ │ │ │ │ └── rolebinding.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── clusterrole.go
│ │ │ │ ├── clusterrolebinding.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── rbac_client.go
│ │ │ │ ├── role.go
│ │ │ │ └── rolebinding.go
│ │ │ ├── scheduling/
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── priorityclass.go
│ │ │ │ │ └── scheduling_client.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── priorityclass.go
│ │ │ │ └── scheduling_client.go
│ │ │ ├── settings/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── podpreset.go
│ │ │ │ └── settings_client.go
│ │ │ └── storage/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── storage_client.go
│ │ │ │ ├── storageclass.go
│ │ │ │ └── volumeattachment.go
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── storage_client.go
│ │ │ │ └── volumeattachment.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated_expansion.go
│ │ │ ├── storage_client.go
│ │ │ ├── storageclass.go
│ │ │ └── volumeattachment.go
│ │ ├── pkg/
│ │ │ ├── apis/
│ │ │ │ └── clientauthentication/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── doc.go
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── version/
│ │ │ ├── .gitattributes
│ │ │ ├── base.go
│ │ │ ├── def.bzl
│ │ │ ├── doc.go
│ │ │ └── version.go
│ │ ├── plugin/
│ │ │ └── pkg/
│ │ │ └── client/
│ │ │ └── auth/
│ │ │ └── exec/
│ │ │ └── exec.go
│ │ ├── rest/
│ │ │ ├── OWNERS
│ │ │ ├── client.go
│ │ │ ├── config.go
│ │ │ ├── plugin.go
│ │ │ ├── request.go
│ │ │ ├── transport.go
│ │ │ ├── url_utils.go
│ │ │ ├── urlbackoff.go
│ │ │ ├── watch/
│ │ │ │ ├── decoder.go
│ │ │ │ └── encoder.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── tools/
│ │ │ ├── auth/
│ │ │ │ ├── OWNERS
│ │ │ │ └── clientauth.go
│ │ │ ├── cache/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── controller.go
│ │ │ │ ├── delta_fifo.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── expiration_cache.go
│ │ │ │ ├── expiration_cache_fakes.go
│ │ │ │ ├── fake_custom_store.go
│ │ │ │ ├── fifo.go
│ │ │ │ ├── heap.go
│ │ │ │ ├── index.go
│ │ │ │ ├── listers.go
│ │ │ │ ├── listwatch.go
│ │ │ │ ├── mutation_cache.go
│ │ │ │ ├── mutation_detector.go
│ │ │ │ ├── reflector.go
│ │ │ │ ├── reflector_metrics.go
│ │ │ │ ├── shared_informer.go
│ │ │ │ ├── store.go
│ │ │ │ ├── thread_safe_store.go
│ │ │ │ └── undelta_store.go
│ │ │ ├── clientcmd/
│ │ │ │ ├── api/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── latest/
│ │ │ │ │ │ └── latest.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── v1/
│ │ │ │ │ │ ├── conversion.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── register.go
│ │ │ │ │ │ ├── types.go
│ │ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ ├── auth_loaders.go
│ │ │ │ ├── client_config.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── flag.go
│ │ │ │ ├── helpers.go
│ │ │ │ ├── loader.go
│ │ │ │ ├── merged_client_builder.go
│ │ │ │ ├── overrides.go
│ │ │ │ └── validation.go
│ │ │ ├── metrics/
│ │ │ │ ├── OWNERS
│ │ │ │ └── metrics.go
│ │ │ ├── pager/
│ │ │ │ └── pager.go
│ │ │ └── reference/
│ │ │ └── ref.go
│ │ ├── transport/
│ │ │ ├── OWNERS
│ │ │ ├── cache.go
│ │ │ ├── config.go
│ │ │ ├── round_trippers.go
│ │ │ ├── token_source.go
│ │ │ └── transport.go
│ │ └── util/
│ │ ├── buffer/
│ │ │ └── ring_growing.go
│ │ ├── cert/
│ │ │ ├── OWNERS
│ │ │ ├── cert.go
│ │ │ ├── csr.go
│ │ │ ├── io.go
│ │ │ └── pem.go
│ │ ├── connrotation/
│ │ │ └── connrotation.go
│ │ ├── flowcontrol/
│ │ │ ├── backoff.go
│ │ │ └── throttle.go
│ │ ├── homedir/
│ │ │ └── homedir.go
│ │ ├── integer/
│ │ │ └── integer.go
│ │ └── retry/
│ │ ├── OWNERS
│ │ └── util.go
│ └── klog/
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── OWNERS
│ ├── README.md
│ ├── RELEASE.md
│ ├── SECURITY_CONTACTS
│ ├── code-of-conduct.md
│ ├── klog.go
│ └── klog_file.go
├── modules.txt
└── sigs.k8s.io/
└── yaml/
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── OWNERS
├── README.md
├── RELEASE.md
├── SECURITY_CONTACTS
├── code-of-conduct.md
├── fields.go
├── yaml.go
└── yaml_go110.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
cmd/bootkube/bootkube
*.so
_output
_pluton_temp
vendor-v[0-9].[0-9].[0-9]/
hack/*/.vagrant/
hack/*/cluster/
hack/*/ssh_config
hack/*/.terraform*
hack/*/terraform.tfstate*
hack/*/terraform.tfvars
# e2e tests touch these
hack/terraform-quickstart/terraform
hack/terraform*tar.gz
e2e/logs
================================================
FILE: .travis.yml
================================================
language: go
before_script:
- wget https://releases.hashicorp.com/terraform/0.11.3/terraform_0.11.3_linux_amd64.zip
- unzip terraform_0.11.3_linux_amd64.zip
- export PATH=$PWD:$PATH
go:
- 1.13.x
script:
- make release
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing guidelines
## How to become a contributor and submit your own code
### Contributor License Agreements
We'd love to accept your patches! Before we can take them, we have to jump a couple of legal hurdles.
Please fill out either the individual or corporate Contributor License Agreement (CLA).
* If you are an individual writing original source code and you're sure you own the intellectual property, then you'll need to sign an [individual CLA](https://identity.linuxfoundation.org/node/285/node/285/individual-signup).
* If you work for a company that wants to allow you to contribute your work, then you'll need to sign a [corporate CLA](https://identity.linuxfoundation.org/node/285/organization-signup).
Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. Once we receive it, we'll be able to accept your pull requests.
### Contributing A Patch
1. Submit an issue describing your proposed change to the repo in question.
1. The [repo owners](OWNERS) will respond to your issue promptly.
1. If your proposed change is accepted, and you haven't already done so, sign a Contributor License Agreement (see details above).
1. Fork the desired repo, develop and test your code changes.
1. Submit a pull request.
### Adding dependencies
If your patch depends on new packages, add that package with [`godep`](https://github.com/tools/godep). Follow the [instructions to add a dependency](https://github.com/kubernetes/kubernetes/blob/master/docs/devel/development.md#godep-and-dependency-management).
================================================
FILE: Documentation/alpha-features.md
================================================
# Alpha Features
Tracking document for alpha features that bootkube installed clusters may make use of.
We track these alpha features as their behavior may change or be deprecated between Kubernetes versions.
Therefore clusters that use these features need to keep track of any potential changes in upstream releases.
See the upstream [api versioning documentation](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions) for more information.
### TolerateUnreadyEndpointsAnnotation
Used by the etcd service object when self-hosted etcd cluster is enabled.
This alpha annotation will retain the endpoints even if the etcd pod isn't ready.
This feature is always enabled in endpoint controller in k8s even it is alpha.
References:
- https://github.com/kubernetes-sigs/bootkube/issues/599
- https://github.com/kubernetes-sigs/bootkube/pull/626#issuecomment-313187659
================================================
FILE: Documentation/design-principles.md
================================================
# Design Principles
There are exceptions to these principles, but these are general guidelines the project strives to adhere to.
## General
- Bootkube should be a single-use tool, which only runs on the first node in a cluster.
- An exception is the `recover` subcommand, discussed below.
- Bootkube should not be required to add new nodes to an existing cluster.
- For example, adding nodes should not require a `bootkube join` command.
- Ideally all that should be required to add a node is starting the kubelet and providing a valid kubeconfig.
- Configuration beyond the initial kubeconfig should be sourced from API objects. For example, the pod network is configured via CNI daemonset.
- Should not require flag or configuration coordination between the `render` and `start` steps.
- Required flag coordination means certain `render` assets will only work with certain `start` flags, and this is something we should avoid.
- For example, `bootkube render --self-hosted-etcd` requires no changes when ultimately running `bootkube start`.
- Avoid adding feature flags as much as possible. This makes testing & stability very difficult to maintain.
- Users customize their cluster by modifying the output of `bootkube render` to fit their configuration. Users can generate their own assets for use with `bootkube start`, subject to following a small number of conventions.
- Complex rendering needs can be handled by custom rendering tools.
- For example, the [CoreOS Tectonic Installer](https://github.com/coreos/tectonic-installer) performs its own rendering step, but utilizes `bootkube start` to launch the cluster.
- Launching compute resources is out of scope. Bootkube merely provides quickstart examples, but should not be prescriptive.
## Bootkube Render
- Bootkube is not meant to be a fully-featured rendering engine. There are much better tools for this - we shouldn't write yet another.
- Bootkube render should be considered a useful starting point, which generates assets utilizing latest versions and best-practices.
- Should render assets for the most recent upstream release. If another version is desired, this can be left to the user to modify in their rendered templates.
- Should avoid using upstream alpha features, and instead allow a user to enable these on a case-by-case basis.
- Adding new configuration flags should be avoided. Instead users can customize the output and/or use an external rendering tool.
## Bootkube Start
- Should be able to launch a cluster by only specifying an `--asset-dir`.
- Should be agnostic to the version of kubernetes cluster that is being launched.
- Should strive toward idempotent bootstrap operation.
- Although, this is not currently the case when bootstrapping with self-hosted etcd.
## Bootkube Recovery
- When running recovery, only a valid `kubeconfig` should be required (and in some cases may not be needed).
- The latest version of the recovery tool should strive to be able to recover all previously installed versions (no coupling between recovery process, and time of installation).
## Hack Directory
- Provides simple options for local development on bootkube
- Provide simple / non-production examples for some cloud providers.
- Should not be prescriptive of how production compute should be launched or managed (e.g. Adding nodes, firewall rules, etc.)
================================================
FILE: Documentation/development.md
================================================
# Bootkube Development
## Requirements
* Go 1.10+
## Building
First, clone the repo into the proper location in your [`GOPATH`][GOPATH]:
```
go get -u github.com/kubernetes-sigs/bootkube
cd $(go env GOPATH | cut -d: -f1)/src/github.com/kubernetes-sigs/bootkube
```
Then build:
```
make clean
make all
```
## Local Development Environments
To easily launch local, single-node vagrant development clusters:
```
make clean-vm-single
make run-single
```
You can also launch a multi-node cluster:
```
make clean-vm-multi
make run-multi
```
Each of these commands will recompile bootkube, then render new assets and provision a new cluster.
Additionally, if you wish to run upstream Kubernetes conformance tests against these local clusters:
```
make conformance-single
```
```
make conformance-multi
```
## Running PR Tests
The basic test suite should run automatically on PRs, but can also be triggered manually.
Jobs prefixed with `tku-` are running on the new Jenkins instance.
Commenting on the PR:
- `ok to test`: whitelists an external contributor's PR as safe to test.
- `coreosbot run [job_name]`: re-runs the named job. The job name is always the same as the build context reported to GitHub. So if there is a failed build for `tku-bootkube-e2e-calico`, you can re-trigger it by commenting, `coreosbot run tku-bootkube-e2e-calico`.
## Running PR Tests (legacy Jenkins)
The basic test suite should run automatically on PRs, but can also be triggered manually.
Commenting on the PR:
* `ok to test`: whitelists an external contributor's PR as safe to test.
* `coreosbot run e2e`: re-runs the end-to-end test suite.
* `coreosbot run e2e calico`: re-runs the Calico end-to-end test suite.
* `coreosbot run e2e checkpointer`: can be used to specifically test new checkpointer code.
* This will build a new checkpointer image from the PR, and includes that image as part of the checkpointer daemonset.
* `coreosbot run conformance`: run upstream Kubernetes conformance tests
[GOPATH]: https://golang.org/cmd/go/#hdr-GOPATH_environment_variable
================================================
FILE: Documentation/disaster-recovery.md
================================================
# Disaster Recovery
Self-hosted Kubernetes clusters are vulnerable to the following catastrophic
failure scenarios:
- Loss of all api-servers
- Loss of all schedulers
- Loss of all controller-managers
- Loss of all self-hosted etcd nodes
To minimize the likelihood of any of the these scenarios, production
self-hosted clusters should always run in a high-availability configuration
(**TODO:** [add documentation for running high-availability self-hosted
clusters](https://github.com/kubernetes-sigs/bootkube/issues/311)).
Nevertheless, in the event of a control plane loss the bootkube project
provides limited disaster avoidance and recovery support through the
`pod-checkpointer` program and the `bootkube recover` subcommand.
## Pod Checkpointer
The Pod Checkpointer is a program that ensures that existing local pod state
can be recovered in the absence of an api-server.
This is accomplished by managing "checkpoints" of local pod state as static pod
manifests:
- When the checkpointer sees that a "parent pod" (a pod which should be
checkpointed), is successfully running, the checkpointer will save a local
copy of the manifest.
- If the parent pod is detected as no longer running, the checkpointer will
"activate" the checkpoint manifest. It will allow the checkpoint to continue
running until the parent-pod is restarted on the local node, or it is able to
contact an api-server to determine that the parent pod is no longer scheduled
to this node.
A Pod Checkpointer DaemonSet is deployed by default when using `bootkube
render` to create cluster manifests. Using the Pod Checkpointer is highly
recommended for all self-hosted clusters to ensure node reboot resiliency.
For more information, see the [Pod Checkpointer
README](https://github.com/kubernetes-sigs/bootkube/blob/master/cmd/checkpoint/README.md).
## Bootkube Recover
In the event of partial or total self-hosted control plane loss, `bootkube
recover` may be able to assist in re-bootstrapping the self-hosted control
plane.
The `bootkube recover` subcommand does not recover a cluster directly. The
recovery is a two step process: `bootkube recover` then `bootkube start`. The
recovery command extracts the control plane configuration from an available
source and renders manifests to the local filesystem. These resulting manifests
can be passed to `bootkube start`.
There are two available sources to choose from in `recover`: etcd or API server.
### What does bootkube recover do?
`bootkube recover`attempts to read the configuration from an existing backend etcd or
API server. On success, `bootkube recover` writes manifests for a modified
bootstrap control plane to a directory. The second phase of the recover can be
initiated by an administrator by running `bootkube start` on these manifests.
`bootkube recover` modifies bootstrap pod specs in the following ways:
* Ensure the pod runs as root
* Ensure the container runs as root
* Change Secret volume mounts to point to file mounts
* Change ConfigMaps volume mounts to point to file mounts
* Ensures the commandline of the containers contains --kubeconfig=/kubeconfig/kubeconfig
* Add a mount for the kubeconfig
Assets include:
* Bootstrap Daemonsets
* Bootstrap Deployments
* Required ConfigMaps
* Required Secrets
By running `bootkube start` to recover the cluster, `bootkube start` will
automatically tear down the recovery control plane.
### bootkube recover usage
For best results always use the most recently tagged Bootkube release when using `recover`,
regardless of which release was used to create the cluster. To see the available releases,
checkout [the tagged binary releases on GitHub](https://github.com/kubernetes-sigs/bootkube/releases)
or [the tagged Docker images on Quay.io](https://quay.io/repository/coreos/bootkube).
To see available options, run:
```
bootkube recover --help
```
To recover a cluster, first invoke `bootkube recover` with flags corresponding
to the current state of the cluster (supported states listed below). Then,
invoke `bootkube start` to reboot the cluster. For example:
```
scp bootkube user@master-node:
ssh user@master-node
./bootkube recover --recovery-dir=recovered [scenario-specific options]
sudo ./bootkube start --asset-dir=recovered
```
Note: the `bootkube start` invocation will print the following warning message:
```
WARNING: recovered/manifests does not exist, not creating any self-hosted assets.
```
This message can be safely ignored. It is printed because recovery does not
attempt to recreate self-hosted assets; it only runs a temporary control plane
to allow the self-hosted control plane to recover itself.
For complete recovery examples see the
[hack/multi-node/bootkube-test-recovery](https://github.com/kubernetes-sigs/bootkube/blob/master/hack/multi-node/bootkube-test-recovery)
and
[](https://asciinema.org/a/dsp43ziuuzwcztni94y8l25s5)
### If an api-server is still running
If an api-server is still running but other control plane components are down,
preventing cluster functionality (i.e. the scheduler pods are all down), the
control plane can be extracted directly from the api-server:
```
bootkube recover --recovery-dir=recovered --kubeconfig=/etc/kubernetes/kubeconfig
```
### If an external etcd cluster is still running
If using an external etcd cluster, the control plane can be
extracted directly from etcd:
```
bootkube recover --recovery-dir=recovered --etcd-servers=http://127.0.0.1:2379 --kubeconfig=/etc/kubernetes/kubeconfig
```
### If an etcd backup is available (non-self-hosted etcd)
First, recover the external etcd cluster from the backup. Then use the method
described in the previous section to recover the control plane manifests.
================================================
FILE: Documentation/network-requirements.md
================================================
# Requirements
## Ports
The information below describes a minimum set of port allocations used by Kubernetes components.
### Master node(s) ingress
| Protocol | Port Range | Source | Purpose |
-----------|------------|-------------------------------------------|------------------------|
| TCP | 443 | Worker Nodes, API Requests, and End-Users | Kubernetes API server. |
| UDP | 4789 | Master & Worker Nodes | flannel overlay network - *vxlan backend* |
### etcd node(s) ingress
| Protocol | Port Range | Source | Purpose |
-----------|------------|-----------------------|--------------------------------------------------|
| TCP | 2379-2380 | Master & Worker Nodes | etcd server client API |
### Worker node(s) ingress
| Protocol | Port Range | Source | Purpose |
-----------|-------------|--------------------------------|------------------------------------------------------------------------|
| TCP | 4194 | Master & Worker Nodes | The port of the localhost cAdvisor endpoint |
| UDP | 4789 | Master & Worker Nodes | flannel overlay network - *vxlan backend* |
| TCP | 10250 | Master Nodes | Worker node Kubelet API for exec and logs. |
| TCP | 10255 | Master & Worker Nodes | Worker node read-only Kubelet API (Heapster). |
| TCP | 30000-32767 | External Application Consumers | Default port range for [external service][https://kubernetes.io/docs/concepts/services-networking/service] ports. Typically, these ports would need to be exposed to external load-balancers, or other external consumers of the application itself. |
================================================
FILE: Documentation/root-requirements.md
================================================
# Information about services running as root
Running services as a non-root user is typically better for security, since
permissions can be controlled.
Some Kubernetes services can be run as a non-root user, but most require root
privileges in some manner. This document will try out outline why certain
Kubernetes services require root privileges.
## Services that do *not* run as root
* Scheduler
* Controller Manager
## Services requiring root
### Flannel
Flannel is a layer 3 network fabric. Flannel needs access to low level
networking interfaces to be able to dynamically configure them.
### Proxy
kube-proxy is a network proxy found on every Kubernetes node. Kube-proxy often
needs to open and manage privileged ports (< 1024) in addition to managing iptables.
### DNS
DNS needs to bind to privileged port 53 for UDP and TCP.
### Checkpointer
Checkpointer is a service to recover a cluster after a reboot or loss of a node.
This service writes to `/etc/kubernetes/manifests`.
================================================
FILE: Documentation/upgrading.md
================================================
# Upgrading self-hosted Kubernetes
"Self-hosted" Kubernetes clusters run the apiserver, scheduler, controller-manager, kube-dns, kube-proxy, and flannel or calico as pods, like ordinary applications. This allows upgrades to be performed in-place using (mostly) `kubectl`, as an alternative to re-provisioning.
Let's upgrade a Kubernetes v1.6.6 cluster to v1.6.7 as an example.
## Status
The process of in-place upgrading a self-hosted Kubernetes cluster can be straight-forward, but there may be complex underlying changes that affect your cluster. In most cases, patch version upgrades (e.g. v1.6.6 to v1.6.7) are safe.
Before beginning an upgrade, it is recommended you evaluate if an in-place upgrade is appropriate for your Kubernetes cluster and risk tolerance. You may wish to test the in-place upgrade on a development cluster, failover important workloads to another cluster, or be prepared to handle unforseen issues.
## Prepare
Find the diff between bootkube assets generated for the existing cluster version and the desired version. This depends on the tool used to generate assets:
* Github [compare](https://github.com/kubernetes-sigs/bootkube/compare/v0.5.0...v0.5.1) changes between the existing and desired versions and infer the appropriate cluster changes.
* [bootkube render](https://github.com/kubernetes-sigs/bootkube) - Install the `bootkube` binaries for the existing and desired versions. Render assets to different locations with each binary and diff the assets.
* [External Tools](users-integrations.md) - Check the docs for the external tool and compare assets generated for each version.
In simple cases, you may only need to bump the version of a few images. In more complex cases, there may be entirely new components, configuration, or flags.
## Inspect
Check the current Kubernetes version.
```sh
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.2", GitCommit:"477efc3cbe6a7effca06bd1452fa356e2201e1ee", GitTreeState:"clean", BuildDate:"2017-04-19T20:33:11Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.6", GitCommit:"42a5c8b99c994a51d9ceaed5d0254f177e97d419", GitTreeState:"clean", BuildDate:"2017-06-21T01:10:07Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}
```
```sh
$ kubectl get nodes
NAME STATUS AGE VERSION
node1.example.com Ready 21d v1.6.6
node2.example.com Ready 21d v1.6.6
node3.example.com Ready 21d v1.6.6
node4.example.com Ready 21d v1.6.6
```
## Control Plane
Show the control plane DaemonSets and Deployments that will need to be updated.
```sh
$ kubectl get daemonsets -n=kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGE
kube-apiserver 1 1 1 1 1 node-role.kubernetes.io/master= 21d
kube-flannel 4 4 4 4 4 <none> 21d
kube-proxy 4 4 4 4 4 <none> 21d
pod-checkpointer 1 1 1 1 1 node-role.kubernetes.io/master= 21d
$ kubectl get deployments -n=kube-system
kube-controller-manager 2 2 2 2 21d
kube-dns 1 1 1 1 21d
kube-scheduler 2 2 2 2 21d
```
### kube-apiserver
If only the container image version has changed, update the image with a single command.
```
kubectl set image daemonset -n kube-system kube-apiserver kube-apiserver=k8s.gcr.io/hyperkube:v1.6.7
```
You can edit the daemonset directly if other changes are needed.
```sh
$ kubectl edit daemonset kube-apiserver -n=kube-system
```
With only one apiserver, the cluster may be momentarily unavailable.
### kube-scheduler
Again, if only the container image version has changed, update the image with a single command.
```
kubectl set image deployment -n kube-system kube-scheduler kube-scheduler=k8s.gcr.io/hyperkube:v1.6.7
```
You can edit the deployment directly if other changes are needed.
```sh
$ kubectl edit deployments kube-scheduler -n=kube-system
```
### kube-controller-manager
Again, if only the container image version has changed, update the image with a single command.
```
kubectl set image deployment -n kube-system kube-controller-manager kube-controller-manager=k8s.gcr.io/hyperkube:v1.6.7
```
You can edit the deployment directly if other changes are needed.
```sh
$ kubectl edit deployments -n kube-system kube-controller-manager -n=kube-system
```
### kube-proxy
Again, if only the container image version has changed, update the image with a single command.
```
kubectl set image daemonset -n kube-system kube-proxy kube-proxy=k8s.gcr.io/hyperkube:v1.6.7
```
You can edit the deployment directly if other changes are needed.
```sh
$ kubectl edit daemonset kube-proxy -n=kube-system
```
### Others
Update any other components which have changes between the existing version and desired version manifests. Update the `kube-dns` deployment, `kube-flannel` daemonset, or `pod-checkpointer` daemonset.
### Verify
Verify the control plane components updated.
```sh
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.2", GitCommit:"477efc3cbe6a7effca06bd1452fa356e2201e1ee", GitTreeState:"clean", BuildDate:"2017-04-19T20:33:11Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.7", GitCommit:"c8c505ee26ac3ab4d1dff506c46bc5538bc66733", GitTreeState:"clean", BuildDate:"2017-07-06T17:38:33Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}
```
Also, consider running `kubectl -n kube-system get pods` to verify all upgraded pods are running correctly.
## kubelet
SSH to each node and update the `KUBELET_IMAGE_TAG` in `kubelet.service` or `/etc/kubernetes/kubelet.env`, depending on the provisioning tool used. Restart the `kubelet.service`.
```sh
ssh core@node1.example.com
# NOTE: KUBELET_IMAGE_TAG may not be used in both files, this is expected
sudo vim /etc/systemd/system/kubelet.service
sudo vim /etc/kubernetes/kubelet.env
sudo systemctl restart kubelet
```
### Verify
Verify the kubelet and kube-proxy of each node updated.
```sh
$ kubectl get nodes -o yaml | grep 'kubeletVersion\|kubeProxyVersion'
kubeProxyVersion: v1.6.7
kubeletVersion: v1.6.7
kubeProxyVersion: v1.6.7
kubeletVersion: v1.6.7
kubeProxyVersion: v1.6.7
kubeletVersion: v1.6.7
kubeProxyVersion: v1.6.7
kubeletVersion: v1.6.7
```
```sh
$ kubectl get nodes
NAME STATUS AGE VERSION
node1.example.com Ready 21d v1.6.7
node2.example.com Ready 21d v1.6.7
node3.example.com Ready 21d v1.6.7
node4.example.com Ready 21d v1.6.7
```
Kubernetes control plane components have been successfully updated!
================================================
FILE: Documentation/users-integrations.md
================================================
# Users and Integrations
This document tracks projects, integrations, and use cases for bootkube. [Join the community](../README.md), and help us keep the list up-to-date.
* [Lokomotive](https://github.com/kinvolk/lokomotive) - Open source Kubernetes distribution that ships pure upstream Kubernetes. It focuses on being minimal, easy to use, and secure by default.
* [kubermesh](https://github.com/kubermesh/kubermesh) - Bare metal, self-hosted, self-healing/provisioning, mesh network kubernetes cluster. See the [blog post](http://ocadotechnology.com/blog/creating-a-distributed-data-centre-architecture-using-kubernetes-and-containers/) for more details.
* [Archon](https://github.com/kubeup/archon) - Kubernetes management and automation tool based on the [operator pattern](https://coreos.com/blog/introducing-operators.html)
* [kube-linode](https://github.com/kahkhang/kube-linode) - Provision a CoreOS/Kubernetes cluster on Linode
================================================
FILE: LICENSE
================================================
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.
================================================
FILE: Makefile
================================================
export CGO_ENABLED:=0
export GOARCH:=amd64
export PATH:=$(PATH):$(PWD)
LOCAL_OS:=$(shell uname | tr A-Z a-z)
GOFILES:=$(shell find . -name '*.go' ! -path './vendor/*')
VENDOR_GOFILES ?= $(shell find vendor -name '*.go')
LDFLAGS=-X github.com/kubernetes-sigs/bootkube/pkg/version.Version=$(shell $(CURDIR)/build/git-version.sh)
TERRAFORM:=$(shell command -v terraform 2> /dev/null)
all: \
_output/bin/$(LOCAL_OS)/bootkube \
_output/bin/linux/bootkube \
_output/bin/linux/checkpoint
cross: \
_output/bin/linux/bootkube \
_output/bin/darwin/bootkube \
_output/bin/linux/checkpoint \
_output/bin/linux/amd64/checkpoint \
_output/bin/linux/arm/checkpoint \
_output/bin/linux/arm64/checkpoint \
_output/bin/linux/ppc64le/checkpoint \
_output/bin/linux/s390x/checkpoint
release: \
check \
_output/release/bootkube.tar.gz \
check: gofmt
ifdef TERRAFORM
$(TERRAFORM) fmt -check ; if [ ! $$? -eq 0 ]; then exit 1; fi
else
@echo -e "\e[91mSkipping terraform lint. terraform binary not available.\e[0m"
endif
@go vet $(shell go list ./... | grep -v '/vendor/')
@go test -v $(shell go list ./... | grep -v '/vendor/\|/e2e')
gofmt:
gofmt -s -w $(GOFILES)
install:
go install -ldflags "$(LDFLAGS)" ./cmd/bootkube
_output/bin/%: GOOS=$(word 1, $(subst /, ,$*))
_output/bin/%: GOARCH=$(word 2, $(subst /, ,$*))
_output/bin/%: GOARCH:=amd64 # default to amd64 to support release scripts
_output/bin/%: $(GOFILES) $(VENDOR_GOFILES)
mkdir -p $(dir $@)
GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $@ github.com/kubernetes-sigs/bootkube/cmd/$(notdir $@)
_output/release/bootkube.tar.gz: _output/bin/linux/bootkube _output/bin/darwin/bootkube _output/bin/linux/checkpoint
mkdir -p $(dir $@)
tar czf $@ -C _output bin/linux/bootkube bin/darwin/bootkube bin/linux/checkpoint
run-%: GOFLAGS = -i
run-%: _output/bin/linux/bootkube _output/bin/$(LOCAL_OS)/bootkube
@cd hack/$*-node && ./bootkube-up
@echo "Bootkube ready"
clean-vm-single:
clean-vm-%:
@echo "Cleaning VM..."
@(cd hack/$*-node && \
vagrant destroy -f && \
rm -rf cluster )
#TODO(aaron): Prompt because this is destructive
conformance-%: all
@cd hack/$*-node && vagrant destroy -f
@cd hack/$*-node && rm -rf cluster
@cd hack/$*-node && ./bootkube-up
@sleep 30 # Give addons a little time to start
@cd hack/$*-node && ./conformance-test.sh
#TODO: curl/sed "vendored" libs is gross - come up with something better
vendor:
@go mod vendor
@curl https://raw.githubusercontent.com/kubernetes/kubernetes/v1.16.2/pkg/kubelet/util/util.go | sed 's/^package util$$/package internal/' > pkg/checkpoint/internal/util.go
@curl https://raw.githubusercontent.com/kubernetes/kubernetes/v1.16.2/pkg/kubelet/util/util_unix.go | sed 's/^package util$$/package internal/' > pkg/checkpoint/internal/util_unix.go
@CGO_ENABLED=1 go build -o _output/bin/license-bill-of-materials ./vendor/github.com/coreos/license-bill-of-materials
@./_output/bin/license-bill-of-materials ./cmd/bootkube ./cmd/checkpoint > bill-of-materials.json
clean:
rm -rf _output
.PHONY: all check clean gofmt install release vendor
================================================
FILE: NOTICE
================================================
CoreOS Project
Copyright 2015 CoreOS, Inc
This product includes software developed at CoreOS, Inc.
(http://www.coreos.com/).
================================================
FILE: OWNERS
================================================
# See the OWNERS file documentation:
# https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md
approvers:
- aaronlevy
- rphillips
- rmenn
- andrewrynhard
================================================
FILE: OWNERS_ALIASES
================================================
# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
aliases:
sig-cluster-lifecycle-leads:
- luxas
- justinsb
- timothysc
================================================
FILE: README.md
================================================
# Bootkube
[](https://travis-ci.org/kubernetes-incubator/bootkube)
[](https://godoc.org/github.com/kubernetes-sigs/bootkube)
[](https://goreportcard.com/report/github.com/kubernetes-sigs/bootkube)
Bootkube is a tool for launching self-hosted Kubernetes clusters.
When launched, bootkube will deploy a temporary Kubernetes control-plane (api-server, scheduler, controller-manager), which operates long enough to bootstrap a replacement self-hosted control-plane.
Additionally, bootkube can be used to generate all of the necessary assets for use in bootstrapping a new cluster. These assets can then be modified to support any additional configuration options.
## Details of self-hosting
- [KubeCon self-hosted presentation video](https://www.youtube.com/watch?v=EbNxGK9MwN4)
- [Kubernetes self-hosted design document](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/cluster-lifecycle/self-hosted-kubernetes.md)
## Guides
- [GCE Quickstart](hack/quickstart/quickstart-gce.md)
- [AWS Quickstart](hack/quickstart/quickstart-aws.md)
- [Vagrant Single-Node](hack/single-node/README.md)
- [Vagrant Multi-Node](hack/multi-node/README.md)
## Usage
Bootkube has two main commands: `render` and `start`.
There is a third, experimental command `recover` which can help reboot a downed cluster (see below).
### Render assets
Bootkube can be used to render all of the assets necessary for bootstrapping a self-hosted Kubernetes cluster. This includes generation of TLS assets, Kubernetes object manifests, and a kubeconfig to connect to the bootstrapped cluster.
To see available options, run:
```
bootkube render --help
```
Example:
```
bootkube render --asset-dir=my-cluster
```
The resulting assets can be inspected / modified in the generated asset-dir.
### Start bootkube
To start bootkube use the `start` subcommand.
To see available options, run:
```
bootkube start --help
```
Example:
```
bootkube start --asset-dir=my-cluster
```
When `bootkube start` is creating Kubernetes resources from manifests, the following order is used:
1. Any `Namespace` objects are created, in lexicographical order.
1. Any `CustomResourceDefinition` objects are created, in lexicographical order.
1. Any remaining resources are created, in lexicographical order.
### Recover a downed cluster
In the case of a partial or total control plane outage (i.e. due to lost master nodes) an experimental `recover` command can extract and write manifests from a backup location. These manifests can then be used by the `start` command to reboot the cluster. Currently recovery from a running apiserver, an external running etcd cluster, or an etcd backup taken from the self hosted etcd cluster are the methods.
For more details and examples see [disaster recovery documentation](Documentation/disaster-recovery.md).
## Development
See [Documentation/development.md](Documentation/development.md) for more information.
## Getting Involved
Want to contribute to bootkube? Have Questions? We are looking for active participation from the community
You can find us at the `#bootkube` channel on [Kubernetes slack][slack].
## Related Links
- [Users and Integrations](Documentation/users-integrations.md)
## License
bootkube is under the Apache 2.0 license. See the [LICENSE](LICENSE) file for details.
[slack]: https://github.com/kubernetes/community/tree/master/communication#social-media
================================================
FILE: RELEASING.md
================================================
# Preparing a bootkube release
## Versioning Notes
### Bootkube Versioning
Historically, we bump the minor version when we start supporting a new kubernetes minor version. This means:
```
v0.1.0 -> Kubernetes v1.3.x
v0.2.0 -> Kubernetes v1.4.x
v0.3.0 -> Kubernetes v1.5.x
v0.4.0 -> Kubernetes v1.6.x
```
However, as the tool has stabilized in functionality, and we head toward a v1.0, we should also begin bumping minor versions on breaking changes.
A breaking change is considered an incompability between `bootkube render` assets of one version not being able to be used with a newer `bootkube start`.
In those situations we should also begin bumping the minor version to communicate that new assets might need to be generated, or that existing assets need to be updated.
### Checkpointer Versioning
The checkpointer is developed in the same repo, but can be thought of as an independent project.
Because of this we do not use tags for the checkpointer releases, as they would intermix with bootkube releases (which do not coincide).
Instead, checkpointers are released using the last git-hash of the changes added to the checkpointer subtree.
Available releases can be seen on the Quay repository: https://quay.io/repository/coreos/pod-checkpointer.
If there were no changes made to the checkpointer subtree, a new release is not necessary.
Eventually we might want to consider moving the checkpointer to its own repo. This would allow for independent development / release cycle, which would also benefit other projects that might want to use the pod-checkpointer.
However, this should also be balanced against the longer-term goal, which would be that checkpointing is natively supported in the kubelet.
For some past discussions related to these topics, see:
- https://github.com/kubernetes/kubeadm/issues/131
- https://github.com/kubernetes/kubernetes/issues/489
- https://github.com/kubernetes-sigs/bootkube/issues/424
## Updating Kubernetes Version
### Updating Kubernetes vendor code
Vendoring relies on go modules.
- Run `go get -u` the desired `k8s.io/client-go` version
- Run `make vendor`
### Updating hyperkube image / Kubernetes version
- Update hyperkube image for manifests in templates:
- `pkg/asset/internal/templates.go`
- Update conformance test version: (`CONFORMANCE_VERSION`)
- `hack/tests/conformance-test.sh`
- Update on-host kubelet versions (`KUBELET_IMAGE_TAG`)
- `hack/multi-node/user-data.sample`
- `hack/single-node/user-data.sample`
- `hack/quickstart/kubelet.master`
- `hack/quickstart/kubelet.worker`
## Run conformance test
Easiest is to use internal jenkins job: [bootkube-development](https://jenkins-kube-lifecycle.prod.coreos.systems/view/bootkube/job/bootkube-dev/)
Or, manually:
```
# GCE
./hack/tests/conformance-gce.sh
```
```
# Vagrant
make conformance-multi
```
```
# Other
./hack/tests/conformance-test.sh
```
### Tag a release
```
git tag -s vX.Y.Z
git push origin vX.Y.Z
```
### Cut a release image
Easiest is to use internal jenkins job: [bootkube-release](https://jenkins-kube-lifecycle.prod.coreos.systems/view/bootkube/job/bootkube-release/).
This job will push the image to the quay.io/coreos/bootkube repo, and archive a tarball of binary releases (manually upload to github release)
Or, manually:
```
git checkout vX.Y.Z
make release
PUSH_IMAGE=true ./build/build-image.sh
```
# Updating checkpointer
This only needs to happen when changes have been made to the checkpointer code / container.
### Build a new checkpointer image
Easiest is to use internal jenkin job: [checkpointer-release](https://jenkins-kube-lifecycle.prod.coreos.systems/view/bootkube/job/checkpointer-release/)
Or, manually:
```
git checkout master # Checkpointer releases should only be built from commits reachable by master
make release
BUILD_IMAGE=checkpoint PUSH_IMAGE=true ./build/build-image.sh
```
### Update checkpointer manifest
In `pkg/asset/images.go` change:
`PodCheckpointer` in `DefaultImages` to use the image built in previous step.
================================================
FILE: ROADMAP.md
================================================
# Bootkube Roadmap
## v1.0.0 targets
- [ ] Recovery from etcd-backup part of e2e testing (https://github.com/kubernetes-sigs/bootkube/issues/596)
- [ ] Publicly published upstream conformance tests
- [ ] How-it-works documentation for bootkube
- [ ] Documentation for running HA clusters (https://github.com/kubernetes-sigs/bootkube/issues/311)
- [ ] Versioned configuration objects replace flags (https://github.com/kubernetes-sigs/bootkube/issues/565)
## Upstream Features (as available)
- [ ] Kubelet TLS bootstrap/rotation for client/server certificates (https://github.com/kubernetes/features/issues/43 & https://github.com/kubernetes/features/issues/266)
- [ ] componentConfig/configMap for all core components
- [ ] Cluster configuration object (https://github.com/kubernetes/kubernetes/issues/19831)
- [ ] Adoption of kubelet checkpointing / deprecation of pod-checkpointer (https://github.com/kubernetes/kubernetes/issues/489)
================================================
FILE: SECURITY_CONTACTS
================================================
# Defined below are the security contacts for this repo.
#
# They are the contact point for the Product Security Team to reach out
# to for triaging and handling of incoming issues.
#
# The below names agree to abide by the
# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy)
# and will be removed and replaced if they violate that agreement.
#
# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
# INSTRUCTIONS AT https://kubernetes.io/security/
aaronlevy
================================================
FILE: bill-of-materials.json
================================================
[
{
"project": "github.com/coreos/etcd",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/davecgh/go-spew/spew",
"licenses": [
{
"type": "ISC License",
"confidence": 1
}
]
},
{
"project": "github.com/ghodss/yaml",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.8357142857142857
}
]
},
{
"project": "github.com/gogo/protobuf",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9090909090909091
}
]
},
{
"project": "github.com/golang/glog",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 0.9966703662597114
}
]
},
{
"project": "github.com/golang/protobuf",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.92
}
]
},
{
"project": "github.com/google/btree",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/google/gofuzz",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/googleapis/gnostic",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/gregjones/httpcache",
"licenses": [
{
"type": "MIT License",
"confidence": 0.9891304347826086
}
]
},
{
"project": "github.com/hashicorp/golang-lru",
"licenses": [
{
"type": "Mozilla Public License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/imdario/mergo",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "github.com/json-iterator/go",
"licenses": [
{
"type": "MIT License",
"confidence": 1
}
]
},
{
"project": "github.com/kubernetes-sigs/bootkube",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/modern-go/concurrent",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/modern-go/reflect2",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "github.com/pborman/uuid",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "github.com/peterbourgon/diskv",
"licenses": [
{
"type": "MIT License",
"confidence": 0.9891304347826086
}
]
},
{
"project": "github.com/spf13/cobra",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 0.9573241061130334
}
]
},
{
"project": "github.com/spf13/pflag",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/crypto/ssh/terminal",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/net",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/oauth2",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/sys/unix",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/text",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "golang.org/x/time/rate",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9663865546218487
}
]
},
{
"project": "google.golang.org/genproto/googleapis/rpc/status",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "google.golang.org/grpc",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "gopkg.in/inf.v0",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.9752066115702479
}
]
},
{
"project": "gopkg.in/yaml.v2",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
},
{
"type": "MIT License",
"confidence": 0.8975609756097561
}
]
},
{
"project": "k8s.io/api",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "k8s.io/apimachinery",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "k8s.io/client-go",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 1
}
]
},
{
"project": "k8s.io/klog",
"licenses": [
{
"type": "Apache License 2.0",
"confidence": 0.9966703662597114
}
]
},
{
"project": "sigs.k8s.io/yaml",
"licenses": [
{
"type": "BSD 3-clause \"New\" or \"Revised\" License",
"confidence": 0.8357142857142857
}
]
}
]
================================================
FILE: build/README.md
================================================
## Build Release Images
Build release binaries + images
```
BUILD_IMAGE=bootkube PUSH_IMAGE=true ./build/build-image.sh
BUILD_IMAGE=checkpoint PUSH_IMAGE=true ./build/build-image.sh
```
## Updating checkpoint container
The hyperkube release will use a specific git hash for the checkpoint pod.
This requires a two step process to update the checkpoint container.
First update & commit changes to checkpoint code and build an image:
```
BUILD_IMAGE=checkpoint PUSH_IMAGE=true ./build/build-image.sh
```
Now that we have a checkpoint image released, we can reference that git hash in the api-server manifest:
```
# Edit api-server manifest
vi pkg/asset/internal/templates.go
# commmit / push changes
# Now build bootkube image with the updated manifest
BUILD_IMAGE=bootkube PUSH_IMAGE=true ./build/build-image.sh
```
================================================
FILE: build/build-image.sh
================================================
#!/usr/bin/env bash
set -euo pipefail
BUILD_IMAGE=${BUILD_IMAGE:-}
PUSH_IMAGE=${PUSH_IMAGE:-false}
if [ -z "${BUILD_IMAGE}" ]; then
echo "BUILD_IMAGE env var must be set"
exit 1
fi
BOOTKUBE_ROOT=$(git rev-parse --show-toplevel)
source "${BOOTKUBE_ROOT}/build/build-release.sh"
source "${BOOTKUBE_ROOT}/image/${BUILD_IMAGE}/build-image.sh"
image::build
if [[ ${PUSH_IMAGE} == "true" ]]; then
docker push $(image::name)
fi
================================================
FILE: build/build-release.sh
================================================
#!/usr/bin/env bash
set -euo pipefail
BOOTKUBE_ROOT=$(git rev-parse --show-toplevel)
GOLANG_IMAGE=${GOLANG_IMAGE:-golang:1.13.11}
SRCDIR="/usr/src/bootkube"
docker run -v ${BOOTKUBE_ROOT}:${SRCDIR} ${GOLANG_IMAGE} make -C ${SRCDIR} release
================================================
FILE: build/git-version.sh
================================================
#!/bin/sh
DESCRIPTION=$(git describe --abbrev=100 --dirty) &&
echo "${DESCRIPTION##*-g}"
================================================
FILE: cmd/bootkube/main.go
================================================
package main
import (
"flag"
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/kubernetes-sigs/bootkube/pkg/util"
"github.com/kubernetes-sigs/bootkube/pkg/version"
)
var (
cmdRoot = &cobra.Command{
Use: "bootkube",
Short: "Bootkube!",
SilenceErrors: true, // suppress cobra errors so we can handle them (also applies to subcommands)
Long: "",
}
cmdVersion = &cobra.Command{
Use: "version",
Short: "Output version information",
Long: "",
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Printf("Version: %s\n", version.Version)
return nil
},
}
)
func main() {
flag.Parse()
util.InitLogs()
defer util.FlushLogs()
cmdRoot.AddCommand(cmdVersion)
if err := cmdRoot.Execute(); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
}
================================================
FILE: cmd/bootkube/recover.go
================================================
package main
import (
"context"
"crypto/tls"
"crypto/x509"
"errors"
"fmt"
"io/ioutil"
"path/filepath"
"strings"
"time"
"github.com/kubernetes-sigs/bootkube/pkg/bootkube"
"github.com/kubernetes-sigs/bootkube/pkg/recovery"
"github.com/spf13/cobra"
"go.etcd.io/etcd/clientv3"
)
var (
cmdRecover = &cobra.Command{
Use: "recover",
Short: "Recover a self-hosted control plane",
Long: "This command reads control plane manifests from a running apiserver or etcd and writes them to recovery-dir. Users can then use `bootkube start` pointed at this recovery-dir to re-the a self-hosted cluster. Please see the project README for more details and examples.",
PreRunE: validateRecoverOpts,
RunE: runCmdRecover,
SilenceUsage: true,
}
recoverOpts struct {
recoveryDir string
etcdCAPath string
etcdCertificatePath string
etcdPrivateKeyPath string
etcdServers string
etcdPrefix string
kubeConfigPath string
podManifestPath string
}
)
func init() {
cmdRoot.AddCommand(cmdRecover)
cmdRecover.Flags().StringVar(&recoverOpts.recoveryDir, "recovery-dir", "", "Output path for writing recovered cluster assets.")
cmdRecover.Flags().StringVar(&recoverOpts.etcdCAPath, "etcd-ca-path", "", "Path to an existing PEM encoded CA that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-certificate-path and --etcd-private-key-path, and must have etcd configured to use TLS with matching secrets.")
cmdRecover.Flags().StringVar(&recoverOpts.etcdCertificatePath, "etcd-certificate-path", "", "Path to an existing certificate that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-ca-path and --etcd-private-key-path, and must have etcd configured to use TLS with matching secrets.")
cmdRecover.Flags().StringVar(&recoverOpts.etcdPrivateKeyPath, "etcd-private-key-path", "", "Path to an existing private key that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-ca-path and --etcd-certificate-path, and must have etcd configured to use TLS with matching secrets.")
cmdRecover.Flags().StringVar(&recoverOpts.etcdServers, "etcd-servers", "", "List of etcd server URLs including host:port, comma separated.")
cmdRecover.Flags().StringVar(&recoverOpts.etcdPrefix, "etcd-prefix", "/registry", "Path prefix to Kubernetes cluster data in etcd.")
cmdRecover.Flags().StringVar(&recoverOpts.kubeConfigPath, "kubeconfig", "", "Path to kubeconfig for communicating with the cluster.")
cmdRecover.Flags().StringVar(&recoverOpts.podManifestPath, "pod-manifest-path", "/etc/kubernetes/manifests", "The location where the kubelet is configured to look for static pod manifests. (Only need to be set when recovering from a etcd backup file)")
}
func runCmdRecover(cmd *cobra.Command, args []string) error {
var err error
recoverOpts.kubeConfigPath, err = filepath.Abs(recoverOpts.kubeConfigPath)
if err != nil {
return err
}
var backend recovery.Backend
switch {
case recoverOpts.etcdServers != "":
bootkube.UserOutput("Attempting recovery using etcd cluster at %q...\n", recoverOpts.etcdServers)
etcdClient, err := createEtcdClient()
if err != nil {
return err
}
backend = recovery.NewEtcdBackend(etcdClient, recoverOpts.etcdPrefix)
default:
bootkube.UserOutput("Attempting recovery using apiserver at %q...\n", recoverOpts.kubeConfigPath)
backend, err = recovery.NewAPIServerBackend(recoverOpts.kubeConfigPath)
if err != nil {
return err
}
}
as, err := recovery.Recover(context.Background(), backend, recoverOpts.kubeConfigPath)
if err != nil {
return err
}
return as.WriteFiles(recoverOpts.recoveryDir)
}
func validateRecoverOpts(cmd *cobra.Command, args []string) error {
if recoverOpts.recoveryDir == "" {
return errors.New("missing required flag: --recovery-dir")
}
if (recoverOpts.etcdCertificatePath != "" || recoverOpts.etcdPrivateKeyPath != "") && (recoverOpts.etcdCertificatePath == "" || recoverOpts.etcdPrivateKeyPath == "") {
return errors.New("you must specify both --etcd-certificate-path, and --etcd-private-key-path")
}
if recoverOpts.etcdPrefix == "" {
return errors.New("missing required flag: --etcd-prefix")
}
if recoverOpts.kubeConfigPath == "" {
return errors.New("missing required flag: --kubeconfig")
}
return nil
}
func createEtcdClient() (*clientv3.Client, error) {
cfg := clientv3.Config{
Endpoints: strings.Split(recoverOpts.etcdServers, ","),
DialTimeout: 5 * time.Second,
}
var roots *x509.CertPool
if recoverOpts.etcdCAPath != "" {
roots = x509.NewCertPool()
etcdCA, err := ioutil.ReadFile(recoverOpts.etcdCAPath)
if err != nil {
return nil, err
}
if ok := roots.AppendCertsFromPEM(etcdCA); !ok {
return nil, fmt.Errorf("error processing --etcd-ca-file %s", recoverOpts.etcdCAPath)
}
}
var certs []tls.Certificate
if recoverOpts.etcdCertificatePath != "" && recoverOpts.etcdPrivateKeyPath != "" {
clientCert, err := tls.LoadX509KeyPair(recoverOpts.etcdCertificatePath, recoverOpts.etcdPrivateKeyPath)
if err != nil {
return nil, err
}
certs = []tls.Certificate{clientCert}
}
if roots != nil || len(certs) > 0 {
cfg.TLS = &tls.Config{
RootCAs: roots,
Certificates: certs,
}
}
return clientv3.New(cfg)
}
================================================
FILE: cmd/bootkube/render.go
================================================
package main
import (
"fmt"
"os"
"plugin"
bootkubeplugin "github.com/kubernetes-sigs/bootkube/pkg/plugin"
"github.com/spf13/cobra"
)
var (
cmdRender = &cobra.Command{
Use: "render",
Short: "Render cluster manifests using the specified plugin",
RunE: runCmdRender,
SilenceUsage: true,
}
renderOpts struct {
assetDir string
plugin string
pluginFlags []string
}
pluginOpts bootkubeplugin.Options
)
func init() {
cmdRoot.AddCommand(cmdRender)
cmdRender.Flags().StringVar(&pluginOpts.AssetDir, "asset-dir", "", "Output path for rendered assets")
cmdRender.Flags().StringVar(&renderOpts.plugin, "plugin", "", "Path to the render plugin")
cmdRender.Flags().StringSliceVar(&renderOpts.pluginFlags, "plugin-flag", []string{}, "The flags to pass to the render plugin")
cobra.MarkFlagRequired(cmdRender.Flags(), "asset-dir")
cobra.MarkFlagRequired(cmdRender.Flags(), "plugin")
}
func runCmdRender(cmd *cobra.Command, args []string) error {
plug, err := plugin.Open(renderOpts.plugin)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
symbol, err := plug.Lookup("Renderer")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
var renderer bootkubeplugin.Renderer
renderer, ok := symbol.(bootkubeplugin.Renderer)
if !ok {
fmt.Println("unexpected type from plugin")
os.Exit(1)
}
return renderer.Render(&pluginOpts, renderOpts.pluginFlags)
}
================================================
FILE: cmd/bootkube/start.go
================================================
package main
import (
"errors"
"fmt"
"strings"
"github.com/spf13/cobra"
"github.com/kubernetes-sigs/bootkube/pkg/bootkube"
)
var (
cmdStart = &cobra.Command{
Use: "start",
Short: "Start the bootkube service",
Long: "",
PreRunE: validateStartOpts,
RunE: runCmdStart,
SilenceUsage: true,
}
startOpts struct {
assetDir string
podManifestPath string
strict bool
requiredPods []string
}
)
var defaultRequiredPods = []string{
"kube-system/pod-checkpointer",
"kube-system/kube-apiserver",
"kube-system/kube-scheduler",
"kube-system/kube-controller-manager",
}
func init() {
cmdRoot.AddCommand(cmdStart)
cmdStart.Flags().StringVar(&startOpts.assetDir, "asset-dir", "", "Path to the cluster asset directory. Expected layout generated by the `bootkube render` command.")
cmdStart.Flags().StringVar(&startOpts.podManifestPath, "pod-manifest-path", "/etc/kubernetes/manifests", "The location where the kubelet is configured to look for static pod manifests.")
cmdStart.Flags().BoolVar(&startOpts.strict, "strict", false, "Strict mode will cause bootkube to exit early if any manifests in the asset directory cannot be created.")
cmdStart.Flags().StringSliceVar(&startOpts.requiredPods, "required-pods", defaultRequiredPods, "List of pods with their namespace (written as <namespace>/<pod-name>) that are required to be running before the start command does the pivot.")
}
func runCmdStart(cmd *cobra.Command, args []string) error {
bk, err := bootkube.NewBootkube(bootkube.Config{
AssetDir: startOpts.assetDir,
PodManifestPath: startOpts.podManifestPath,
Strict: startOpts.strict,
RequiredPods: startOpts.requiredPods,
})
if err != nil {
return err
}
err = bk.Run()
if err != nil {
// Always report errors.
bootkube.UserOutput("Error: %v\n", err)
}
return err
}
func validateStartOpts(cmd *cobra.Command, args []string) error {
if startOpts.podManifestPath == "" {
return errors.New("missing required flag: --pod-manifest-path")
}
if startOpts.assetDir == "" {
return errors.New("missing required flag: --asset-dir")
}
for _, nsPod := range startOpts.requiredPods {
if len(strings.Split(nsPod, "/")) != 2 {
return fmt.Errorf("invalid required pod: expected %q to be of shape <namespace>/<pod-name>", nsPod)
}
}
return nil
}
================================================
FILE: cmd/checkpoint/README.md
================================================
# Checkpoint
## Description
`checkpoint` is a utility application which will manage "checkpoints" of pods scheduled to the local node.
The purpose of a pod checkpoint is to ensure that existing local pod state can be recovered in the absence of an api-server.
The kubelet will already attempt to ensure that local pods will continue to run in the absence of an API server (based on restartPolicy). However, if all local runtime state has been lost (for example after a reboot), the checkpoint utility will ensure the local state can be recovered until an api-server is contacted.
This is accomplished by managing checkpoints as static pod manifests:
- When the checkpointer sees that a "parent pod" (a pod which should be checkpointed), is successfully running, the checkpointer will save a local copy of the manifest.
- If the parent pod is detected as no longer running, the checkpointer will "activate" the checkpoint manifest. It will allow the checkpoint to continue running until the parent-pod is restarted on the local node, or it is able to contact an api-server to determine that the parent pod is no longer scheduled to this node.
## Use
Any pod which contains the `checkpointer.alpha.coreos.com/checkpoint=true` annotation will be considered a viable "parent pod" which should be checkpointed.
The parent pod cannot itself be a static pod, and is not a checkpoint itself. Affinity is not supported for a pod, and any pod labelled with the checkpoint annotation will be checkpointed.
Checkpoints are denoted by the `checkpointer.alpha.coreos.com/checkpoint-of` annotation. This annotation will point to the parent of this checkpoint by pod name.
For example the pod:
```
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
annotations:
checkpointer.alpha.coreos.com/checkpoint=true
```
Will generate a checkpointed pod as:
```
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
annotations:
checkpointer.alpha.coreos.com/checkpoint-of=kube-apiserver
```
## Implementation Notes:
### Asset Locations
- Inactive checkpoint manifests: /etc/kubernetes/inactive-manifests
- Active checkpoint manifests: /etc/kubernetes/manifests
- Checkpointed secrets: /etc/kubernetes/checkpoint-secrets
- Config Maps: /etc/kubernetes/checkpoint-configmaps
### Pod Manifest Sanitization
Parts of the pod manifest will be scrubbed prior to being saved as checkpoints. This is to ensure that the pod does not interfere with the parent object, and is managed in isolation.
- All labels and non-checkpoint related annotations will be removed
- Service account details are removed
- Secrets are downloaded from the apiserver and converted to hostMounts
- ConfigMaps are downloaded from the apiserver and converted to hostMounts
- Pod status is cleared
### Secret Storage
Secrets are stored using a path of:
```
/etc/kubernetes/checkpoint-secrets/<namespace>/<pod-name>/<secret-name>
```
### ConfigMap Storage
ConfigMaps are stored using a path of:
```
/etc/kubernetes/checkpoint-configmaps/<namespace>/<pod-name>/<configmap-name>
```
### Self Checkpointing
The pod checkpoint will also checkpoint itself to the disk to handle the absence of the API server.
After a node reboot, the on-disk pod-checkpointer will take over the responsibility.
If the pod checkpointer reaches the API server and finds out that it's no longer being scheduled,
it will remove all on-disk checkpoints before cleaning itself up.
### RBAC Requirements
By default, the pod checkpoint runs with service account credentials, checkpointing its own
service account secret for reboots. That service account must be bound to a Role that lets the
pod checkpoint watch for Pods with the checkpoint annotation, then save ConfigMaps and Secrets
referenced by those Pods.
```yaml
kind: Role
metadata:
name: pod-checkpointer
namespace: kube-system
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
- apiGroups: [""] # "" indicates the core API group
resources: ["secrets", "configmaps"]
verbs: ["get"]
```
================================================
FILE: cmd/checkpoint/main.go
================================================
package main
import (
"flag"
"fmt"
"os"
"syscall"
"time"
"github.com/golang/glog"
"k8s.io/client-go/tools/clientcmd"
"github.com/kubernetes-sigs/bootkube/pkg/checkpoint"
)
const (
nodeNameEnv = "NODE_NAME"
podNameEnv = "POD_NAME"
podNamespaceEnv = "POD_NAMESPACE"
defaultRuntimeEndpoint = "unix:///var/run/dockershim.sock"
defaultRuntimeRequestTimeout = 2 * time.Minute
defaultCheckpointGracePeriod = 1 * time.Minute
)
var (
lockfilePath string
kubeconfigPath string
remoteRuntimeEndpoint string
runtimeRequestTimeout time.Duration
checkpointGracePeriod time.Duration
)
func init() {
flag.StringVar(&lockfilePath, "lock-file", "/var/run/lock/pod-checkpointer.lock", "The path to lock file for checkpointer to use")
flag.StringVar(&kubeconfigPath, "kubeconfig", "/etc/kubernetes/kubeconfig", "Path to a kubeconfig file containing credentials used to talk to the kubelet.")
flag.Set("logtostderr", "true")
flag.StringVar(&remoteRuntimeEndpoint, "container-runtime-endpoint", defaultRuntimeEndpoint, "[Experimental] The endpoint of remote runtime service. Currently unix socket is supported on Linux, and tcp is supported on windows. Examples:'unix:///var/run/dockershim.sock', 'tcp://localhost:3735'")
flag.DurationVar(&runtimeRequestTimeout, "runtime-request-timeout", defaultRuntimeRequestTimeout, "Timeout of all runtime requests except long running request - pull, logs, exec and attach. When timeout exceeded, kubelet will cancel the request, throw out an error and retry later.")
flag.DurationVar(&checkpointGracePeriod, "checkpoint-grace-period", defaultCheckpointGracePeriod, "Grace period for cleaning up checkpoints when the parent pod is deleted. Non-zero values are helpful for accommodating control plane eventual consistency.")
}
func main() {
flag.Parse()
defer glog.Flush()
glog.Info("Determining environment from downward API")
nodeName, podName, podNamespace, err := readDownwardAPI()
if err != nil {
glog.Fatalf("Error reading downward API: %v", err)
}
glog.Infof("Trying to acquire the flock at %q", lockfilePath)
if err := flock(lockfilePath); err != nil {
glog.Fatalf("Error when acquiring the flock: %v", err)
}
glog.Infof("Starting checkpointer for node: %s", nodeName)
// This is run as a static pod, so we can't use InClusterConfig because
// KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT won't be set in
// the pod.
kubeConfig, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}, &clientcmd.ConfigOverrides{}).ClientConfig()
if err != nil {
glog.Fatalf("Failed to load kubeconfig: %v", err)
}
if err := checkpoint.Run(checkpoint.Options{
CheckpointerPod: checkpoint.CheckpointerPod{
NodeName: nodeName,
PodName: podName,
PodNamespace: podNamespace,
},
KubeConfig: kubeConfig,
RemoteRuntimeEndpoint: remoteRuntimeEndpoint,
RuntimeRequestTimeout: runtimeRequestTimeout,
CheckpointGracePeriod: checkpointGracePeriod,
}); err != nil {
glog.Fatalf("Error starting checkpointer: %v", err)
}
}
// flock tries to grab a flock on the given path.
// If the lock is already acquired by other process, the function will block.
// TODO(yifan): Maybe replace this with kubernetes/pkg/util/flock.Acquire() once
// https://github.com/kubernetes/kubernetes/issues/42929 is solved, or maybe not.
func flock(path string) error {
fd, err := syscall.Open(path, syscall.O_CREAT|syscall.O_RDWR, 0600)
if err != nil {
return err
}
// We don't need to close the fd since we should hold
// it until the process exits.
return syscall.Flock(fd, syscall.LOCK_EX)
}
// readDownwardAPI fills the node name, pod name, and pod namespace.
func readDownwardAPI() (nodeName, podName, podNamespace string, err error) {
nodeName = os.Getenv(nodeNameEnv)
if nodeName == "" {
return "", "", "", fmt.Errorf("missing required environment variable: %s", nodeNameEnv)
}
podName = os.Getenv(podNameEnv)
if podName == "" {
return "", "", "", fmt.Errorf("missing required environment variable: %s", podNameEnv)
}
podNamespace = os.Getenv(podNamespaceEnv)
if podNamespace == "" {
return "", "", "", fmt.Errorf("missing required environment variable: %s", podNamespaceEnv)
}
return nodeName, podName, podNamespace, nil
}
================================================
FILE: cmd/render/plugin/default/asset/asset.go
================================================
package asset
import (
"crypto/rsa"
"crypto/x509"
"errors"
"fmt"
"io/ioutil"
"net"
"net/url"
"os"
"path"
"path/filepath"
"reflect"
"strings"
"github.com/kubernetes-sigs/bootkube/pkg/tlsutil"
)
const (
AssetPathSecrets = "tls"
AssetPathCAKey = "tls/ca.key"
AssetPathCACert = "tls/ca.crt"
AssetPathAPIServerKey = "tls/apiserver.key"
AssetPathAPIServerCert = "tls/apiserver.crt"
AssetPathEtcdClientCA = "tls/etcd-client-ca.crt"
AssetPathEtcdClientCert = "tls/etcd-client.crt"
AssetPathEtcdClientKey = "tls/etcd-client.key"
AssetPathEtcdServerCA = "tls/etcd/server-ca.crt"
AssetPathEtcdServerCert = "tls/etcd/server.crt"
AssetPathEtcdServerKey = "tls/etcd/server.key"
AssetPathEtcdPeerCA = "tls/etcd/peer-ca.crt"
AssetPathEtcdPeerCert = "tls/etcd/peer.crt"
AssetPathEtcdPeerKey = "tls/etcd/peer.key"
AssetPathAggregatorCA = "tls/front-proxy-ca.crt"
AssetPathFrontProxyClientCert = "tls/front-proxy-client.crt"
AssetPathFrontProxyClientKey = "tls/front-proxy-client.key"
AssetPathServiceAccountPrivKey = "tls/service-account.key"
AssetPathServiceAccountPubKey = "tls/service-account.pub"
AssetPathKubeletClientCert = "tls/apiserver-kubelet-client.crt"
AssetPathKubeletClientKey = "tls/apiserver-kubelet-client.key"
AssetPathAdminKey = "tls/admin.key"
AssetPathAdminCert = "tls/admin.crt"
AssetPathAdminKubeConfig = "auth/kubeconfig"
AssetPathKubeletKubeConfig = "auth/kubeconfig-kubelet"
AssetPathManifests = "manifests"
AssetPathKubeConfigInCluster = "manifests/kubeconfig-in-cluster.yaml"
AssetPathKubeletBootstrapToken = "manifests/kubelet-bootstrap-token.yaml"
AssetPathProxy = "manifests/kube-proxy.yaml"
AssetPathProxySA = "manifests/kube-proxy-sa.yaml"
AssetPathProxyRoleBinding = "manifests/kube-proxy-role-binding.yaml"
AssetPathFlannel = "manifests/flannel.yaml"
AssetPathFlannelCfg = "manifests/flannel-cfg.yaml"
AssetPathFlannelClusterRole = "manifests/flannel-cluster-role.yaml"
AssetPathFlannelClusterRoleBinding = "manifests/flannel-cluster-role-binding.yaml"
AssetPathFlannelSA = "manifests/flannel-sa.yaml"
AssetPathCalico = "manifests/calico.yaml"
AssetPathCalicoPolicyOnly = "manifests/calico-policy-only.yaml"
AssetPathCalicoCfg = "manifests/calico-config.yaml"
AssetPathCalicoSA = "manifests/calico-service-account.yaml"
AssetPathCalicoRole = "manifests/calico-role.yaml"
AssetPathCalicoRoleBinding = "manifests/calico-role-binding.yaml"
AssetPathCalicoBGPConfigurationsCRD = "manifests/calico-bgp-configurations-crd.yaml"
AssetPathCalicoBGPPeersCRD = "manifests/calico-bgp-peers-crd.yaml"
AssetPathCalicoFelixConfigurationsCRD = "manifests/calico-felix-configurations-crd.yaml"
AssetPathCalicoGlobalNetworkPoliciesCRD = "manifests/calico-global-network-policies-crd.yaml"
AssetPathCalicoNetworkPoliciesCRD = "manifests/calico-network-policies-crd.yaml"
AssetPathCalicoGlobalNetworkSetsCRD = "manifests/calico-global-network-sets-crd.yaml"
AssetPathCalicoIPPoolsCRD = "manifests/calico-ip-pools-crd.yaml"
AssetPathCalicoClusterInformationsCRD = "manifests/calico-cluster-informations-crd.yaml"
AssetPathAPIServerSecret = "manifests/kube-apiserver-secret.yaml"
AssetPathAPIServer = "manifests/kube-apiserver.yaml"
AssetPathControllerManager = "manifests/kube-controller-manager.yaml"
AssetPathControllerManagerSA = "manifests/kube-controller-manager-service-account.yaml"
AssetPathControllerManagerRB = "manifests/kube-controller-manager-role-binding.yaml"
AssetPathControllerManagerSecret = "manifests/kube-controller-manager-secret.yaml"
AssetPathControllerManagerDisruption = "manifests/kube-controller-manager-disruption.yaml"
AssetPathScheduler = "manifests/kube-scheduler.yaml"
AssetPathSchedulerDisruption = "manifests/kube-scheduler-disruption.yaml"
AssetPathCoreDNSClusterRoleBinding = "manifests/coredns-cluster-role-binding.yaml"
AssetPathCoreDNSClusterRole = "manifests/coredns-cluster-role.yaml"
AssetPathCoreDNSConfig = "manifests/coredns-config.yaml"
AssetPathCoreDNSDeployment = "manifests/coredns-deployment.yaml"
AssetPathCoreDNSSA = "manifests/coredns-service-account.yaml"
AssetPathCoreDNSSvc = "manifests/coredns-service.yaml"
AssetPathSystemNamespace = "manifests/kube-system-ns.yaml"
AssetPathCheckpointer = "manifests/pod-checkpointer.yaml"
AssetPathCheckpointerSA = "manifests/pod-checkpointer-sa.yaml"
AssetPathCheckpointerRole = "manifests/pod-checkpointer-role.yaml"
AssetPathCheckpointerRoleBinding = "manifests/pod-checkpointer-role-binding.yaml"
AssetPathCheckpointerClusterRole = "manifests/pod-checkpointer-cluster-role.yaml"
AssetPathCheckpointerClusterRoleBinding = "manifests/pod-checkpointer-cluster-role-binding.yaml"
AssetPathEtcdClientSecret = "manifests/etcd-client-tls.yaml"
AssetPathEtcdPeerSecret = "manifests/etcd-peer-tls.yaml"
AssetPathEtcdServerSecret = "manifests/etcd-server-tls.yaml"
AssetPathCSRBootstrapRoleBinding = "manifests/csr-bootstrap-role-binding.yaml"
AssetPathCSRApproverRoleBinding = "manifests/csr-approver-role-binding.yaml"
AssetPathCSRRenewalRoleBinding = "manifests/csr-renewal-role-binding.yaml"
AssetPathKubeSystemSARoleBinding = "manifests/kube-system-rbac-role-binding.yaml"
AssetPathBootstrapManifests = "bootstrap-manifests"
AssetPathBootstrapAPIServer = "bootstrap-manifests/bootstrap-apiserver.yaml"
AssetPathBootstrapControllerManager = "bootstrap-manifests/bootstrap-controller-manager.yaml"
AssetPathBootstrapScheduler = "bootstrap-manifests/bootstrap-scheduler.yaml"
)
var BootstrapSecretsDir = "/etc/kubernetes/bootstrap-secrets" // Overridden for testing.
// AssetConfig holds all configuration needed when generating
// the default set of assets.
type Config struct {
ClusterName string
EtcdCACert *x509.Certificate
EtcdClientCert *x509.Certificate
EtcdClientKey *rsa.PrivateKey
EtcdServers []*url.URL
EtcdUseTLS bool
APIServers []*url.URL
CACert *x509.Certificate
CAPrivKey *rsa.PrivateKey
AltNames *tlsutil.AltNames
PodCIDRs []*net.IPNet
ServiceCIDRs []*net.IPNet
APIServiceIPs []net.IP
DNSServiceIPs []net.IP
CloudProvider string
NetworkProvider string
BootstrapSecretsSubdir string
Images ImageVersions
// PodCIDR describes the networking subnet to be used for inter-pod networking.
//
// Deprecated: PodCIDR exists only for compatibility with older external
// systems. Please use PodCIDRs instead, which allows for dual-stack
// configurations.
PodCIDR *net.IPNet
// ServiceCIDR describes the networking subnet to be used to expose services.
//
// Deprecated: ServiceCIDR exists only for compatibility with older external
// systems. Please use ServiceCIDRs instead, which allows for dual-stack
// configurations. If both are specified, only ServiceCIDRs will be used.
ServiceCIDR *net.IPNet
// APIServiceIP describes the in-cluster IP address by which the API Servers may be reached.
//
// Deprecated: APIServiceIP exists only for compatibility with older
// external systems. Please use APIServiceIPs instead, which allows for
// dual-stack configurations. If both are specified, only APIServiceIPs
// will be used.
APIServiceIP net.IP
// DNSServiceIP describes the in-cluster IP address by which the cluster DNS servers may be reached.
//
// Deprecated: DNSServiceIP exists only for compatibility with older
// external systems. Please use DNSServiceIPs instead, which allows for
// dual-stack configurations. If both are specified, only DNSServiceIPs
// will be used.
DNSServiceIP net.IP
}
// BindAllAddress indicates the address to use when binding all IPs. If this
// is an IPv6 or dual-stack system, `::` will be returned. Otherwise
// `0.0.0.0`.
func (c Config) BindAllAddress() string {
if containsNonLocalIPv6(c.APIServiceIPs) {
return "::"
}
return "0.0.0.0"
}
// ServiceCIDRsString returns a "," concatenated string for the ServiceCIDRs
func (c Config) ServiceCIDRsString() string {
return joinStringsFromSliceOrSingle(stringerSlice(c.ServiceCIDRs), c.ServiceCIDR)
}
// PodCIDRsString returns a "," concatenated string for the PodCIDRs
func (c Config) PodCIDRsString() string {
return joinStringsFromSliceOrSingle(stringerSlice(c.PodCIDRs), c.PodCIDR)
}
// APIServiceIPsString returns a "," concatenated string for the APIServiceIPs
func (c Config) APIServiceIPsString() string {
return joinStringsFromSliceOrSingle(stringerSlice(c.APIServiceIPs), c.APIServiceIP)
}
// DNSServiceIPsString returns a "," concatenated string for the DNSServiceIPs
func (c Config) DNSServiceIPsString() string {
return joinStringsFromSliceOrSingle(stringerSlice(c.DNSServiceIPs), c.DNSServiceIP)
}
func stringerSlice(in interface{}) []string {
var ok bool
type Stringer interface {
String() string
}
var stringer Stringer
if in == nil {
return nil
}
r := reflect.ValueOf(in)
if r.Len() == 0 {
return nil
}
rval := make([]string, r.Len())
for i := 0; i < r.Len(); i++ {
stringer, ok = r.Index(i).Interface().(fmt.Stringer)
if !ok {
rval[i] = ""
continue
}
rval[i] = stringer.String()
}
return rval
}
func joinStringsFromSliceOrSingle(inSlice []string, inSingle fmt.Stringer) string {
if len(inSlice) > 0 {
return strings.Join(inSlice, ",")
}
if inSingle == nil {
return ""
}
return inSingle.String()
}
func containsNonLocalIPv6(in []net.IP) bool {
for _, ip := range in {
if ip == nil || ip.IsLoopback() || ip.IsUnspecified() {
continue
}
if ip.To4() == nil && ip.To16() != nil {
return true
}
}
return false
}
// ImageVersions holds all the images (and their versions) that are rendered into the templates.
type ImageVersions struct {
Etcd string
Flannel string
FlannelCNI string
Calico string
CalicoCNI string
CoreDNS string
Hyperkube string
Kenc string
PodCheckpointer string
}
// NewDefaultAssets returns a list of default assets, optionally
// configured via a user provided AssetConfig. Default assets include
// TLS assets (certs, keys and secrets), and k8s component manifests.
func NewDefaultAssets(conf Config) (Assets, error) {
conf.BootstrapSecretsSubdir = path.Base(BootstrapSecretsDir)
as := newStaticAssets(conf.Images)
as = append(as, newDynamicAssets(conf)...)
// Add kube-apiserver service IP
if len(conf.APIServiceIPs) > 0 {
conf.AltNames.IPs = append(conf.AltNames.IPs, conf.APIServiceIPs...)
} else {
conf.AltNames.IPs = append(conf.AltNames.IPs, conf.APIServiceIP)
}
// Create a CA if none was provided.
if conf.CACert == nil {
var err error
conf.CAPrivKey, conf.CACert, err = newCACert()
if err != nil {
return Assets{}, err
}
}
// TLS assets
tlsAssets, err := newTLSAssets(conf.CACert, conf.CAPrivKey, *conf.AltNames)
if err != nil {
return Assets{}, err
}
as = append(as, tlsAssets...)
// etcd TLS assets.
if conf.EtcdUseTLS {
etcdTLSAssets, err := newEtcdTLSAssets(conf.EtcdCACert, conf.EtcdClientCert, conf.EtcdClientKey, conf.CACert, conf.CAPrivKey, conf.EtcdServers)
if err != nil {
return Assets{}, err
}
as = append(as, etcdTLSAssets...)
}
kubeConfigAssets, err := newKubeConfigAssets(as, conf)
if err != nil {
return Assets{}, err
}
as = append(as, kubeConfigAssets...)
// K8S APIServer secret
apiSecret, err := newAPIServerSecretAsset(as, conf.EtcdUseTLS)
if err != nil {
return Assets{}, err
}
as = append(as, apiSecret)
// K8S ControllerManager secret
cmSecret, err := newControllerManagerSecretAsset(as)
if err != nil {
return Assets{}, err
}
as = append(as, cmSecret)
return as, nil
}
type Asset struct {
Name string
Data []byte
}
type Assets []Asset
func (as Assets) Get(name string) (Asset, error) {
for _, asset := range as {
if asset.Name == name {
return asset, nil
}
}
return Asset{}, fmt.Errorf("asset %q does not exist", name)
}
func (as Assets) WriteFiles(path string) error {
if err := os.MkdirAll(path, 0755); err != nil {
return err
}
files, err := ioutil.ReadDir(path)
if err != nil {
return err
}
if len(files) > 0 {
return errors.New("asset directory must be empty")
}
for _, asset := range as {
if err := asset.WriteFile(path); err != nil {
return err
}
}
return nil
}
func (a Asset) WriteFile(path string) error {
f := filepath.Join(path, a.Name)
if err := os.MkdirAll(filepath.Dir(f), 0755); err != nil {
return err
}
fmt.Printf("Writing asset: %s\n", f)
return ioutil.WriteFile(f, a.Data, 0600)
}
================================================
FILE: cmd/render/plugin/default/asset/asset_test.go
================================================
package asset
import (
"net"
"strings"
"testing"
)
type f struct {
M string
}
func (f *f) String() string {
return f.M
}
func TestJoinStringsFromSliceOrSingle(t *testing.T) {
var out string
testSingle := &f{M: "hello"}
emptySingle := &f{M: ""}
testSlice := []string{"Hello", "World"}
if out = joinStringsFromSliceOrSingle(nil, testSingle); out != testSingle.String() {
t.Errorf("single-only test failed: expected '%s', got '%s'", testSingle, out)
}
if out = joinStringsFromSliceOrSingle(testSlice, emptySingle); out != strings.Join(testSlice, ",") {
t.Errorf("slice-only test failed: expected '%s', got '%s'", strings.Join(testSlice, ","), out)
}
if out = joinStringsFromSliceOrSingle(testSlice, testSingle); out != strings.Join(testSlice, ",") {
t.Errorf("single+slice test failed: expected '%s', got '%s'", strings.Join(testSlice, ","), out)
}
if out = joinStringsFromSliceOrSingle(nil, emptySingle); out != "" {
t.Errorf("empty test failed: expected '%s', got '%s'", "", out)
}
}
func TestContainsNonLocalIPv6(t *testing.T) {
ipv4Loopback := net.ParseIP("127.0.0.1")
ipv4PublicUnicast := net.ParseIP("8.8.8.8")
ipv4PrivateUnicast := net.ParseIP("192.168.1.2")
ipv4Multicast := net.ParseIP("224.10.20.30")
ipv6Loopback := net.ParseIP("::1")
ipv6Unicast := net.ParseIP("2001:db8::1")
ipv6LinkLocal := net.ParseIP("fe80::db8:2")
ipv6Multicast := net.ParseIP("ff00::db8:3")
if containsNonLocalIPv6(nil) {
t.Errorf("empty set failed")
}
if containsNonLocalIPv6([]net.IP{ipv4Loopback, ipv4PublicUnicast, ipv4PrivateUnicast, ipv4Multicast, ipv6Loopback}) {
t.Errorf("all-false set check failed")
}
if !containsNonLocalIPv6([]net.IP{ipv6Unicast}) {
t.Errorf("single-true set failed")
}
if !containsNonLocalIPv6([]net.IP{ipv6LinkLocal, ipv4Loopback}) {
t.Errorf("true+v4Loop set failed")
}
if !containsNonLocalIPv6([]net.IP{ipv6Loopback, ipv6Multicast}) {
t.Errorf("true+v6Loop set failed")
}
}
func TestStringerSlice(t *testing.T) {
var out []string
if out = stringerSlice(nil); out != nil {
t.Errorf("nil input test did not have nil output: %v", out)
}
testNilSlice := []net.IP{}
out = stringerSlice(testNilSlice)
if len(out) != len(testNilSlice) {
t.Errorf("output mismatch (%d) for testNilSlice (%d)", len(out), len(testNilSlice))
}
testNonStringerSlice := []int{1, 2, 3, 4}
out = stringerSlice(testNonStringerSlice)
for i, s := range out {
if s != "" {
t.Errorf("nonStringerSlice[%d] produced non-nil output: %s", i, s)
}
}
testNormal1 := []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("0.0.0.0")}
out = stringerSlice(testNormal1)
if len(out) != len(testNormal1) {
t.Errorf("output mismatch (%d) for testNormal1 (%d)", len(out), len(testNormal1))
}
if out[0] != testNormal1[0].String() {
t.Errorf("output index 0 mismatch (%s) on testNormal (%s)", out[0], testNormal1[0].String())
}
if out[1] != testNormal1[1].String() {
t.Errorf("output index 1 mismatch (%s) on testNormal (%s)", out[1], testNormal1[1].String())
}
}
================================================
FILE: cmd/render/plugin/default/asset/images.go
================================================
package asset
// DefaultImages are the defualt images bootkube components use.
var DefaultImages = ImageVersions{
Etcd: "quay.io/coreos/etcd:v3.3.12",
Flannel: "quay.io/coreos/flannel:v0.11.0-amd64",
FlannelCNI: "quay.io/coreos/flannel-cni:v0.3.0",
Calico: "quay.io/calico/node:v3.0.3",
CalicoCNI: "quay.io/calico/cni:v2.0.0",
CoreDNS: "k8s.gcr.io/coredns:1.6.5",
Hyperkube: "k8s.gcr.io/hyperkube:v1.16.2",
PodCheckpointer: "quay.io/coreos/pod-checkpointer:83e25e5968391b9eb342042c435d1b3eeddb2be1",
}
================================================
FILE: cmd/render/plugin/default/asset/internal/templates.go
================================================
// Package internal holds asset templates used by bootkube.
package internal
var AdminKubeConfigTemplate = []byte(`apiVersion: v1
kind: Config
clusters:
- name: {{ or .Cluster "local" }}
cluster:
server: {{ .Server }}
certificate-authority-data: {{ .CACert }}
users:
- name: admin
user:
client-certificate-data: {{ .AdminCert }}
client-key-data: {{ .AdminKey }}
contexts:
- context:
cluster: {{ or .Cluster "local" }}
user: admin
name: admin@{{ or .Cluster "local" }}
current-context: admin@{{ or .Cluster "local" }}
`)
var KubeletKubeConfigTemplate = []byte(`apiVersion: v1
kind: Config
clusters:
- name: local
cluster:
server: {{ .Server }}
certificate-authority-data: {{ .CACert }}
users:
- name: kubelet
user:
token: {{ .BootstrapTokenID }}.{{ .BootstrapTokenSecret }}
contexts:
- context:
cluster: local
user: kubelet
`)
var KubeletBootstrappingToken = []byte(`apiVersion: v1
kind: Secret
metadata:
name: bootstrap-token-{{ .BootstrapTokenID }}
namespace: kube-system
type: bootstrap.kubernetes.io/token
stringData:
token-id: "{{ .BootstrapTokenID }}"
token-secret: "{{ .BootstrapTokenSecret }}"
usage-bootstrap-authentication: "true"
`)
// CSRNodeBootstrapTemplate lets bootstrapping tokens and nodes request CSRs.
var CSRNodeBootstrapTemplate = []byte(`kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system-bootstrap-node-bootstrapper
subjects:
- kind: Group
name: system:bootstrappers
apiGroup: rbac.authorization.k8s.io
- kind: Group
name: system:nodes
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: system:node-bootstrapper
apiGroup: rbac.authorization.k8s.io
`)
// CSRApproverRoleBindingTemplate instructs the csrapprover controller to
// automatically approve CSRs made by bootstrapping tokens for client
// credentials.
//
// This binding should be removed to disable CSR auto-approval.
var CSRApproverRoleBindingTemplate = []byte(`kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system-bootstrap-approve-node-client-csr
subjects:
- kind: Group
name: system:bootstrappers
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: system:certificates.k8s.io:certificatesigningrequests:nodeclient
apiGroup: rbac.authorization.k8s.io
`)
// CSRRenewalRoleBindingTemplate instructs the csrapprover controller to
// automatically approve all CSRs made by nodes to renew their client
// certificates.
//
// This binding should be altered in the future to hold a list of node
// names instead of targeting `system:nodes` so we can revoke invidivual
// node's ability to renew its certs.
var CSRRenewalRoleBindingTemplate = []byte(`kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system-bootstrap-node-renewal
subjects:
- kind: Group
name: system:nodes
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
apiGroup: rbac.authorization.k8s.io
`)
var KubeSystemSARoleBindingTemplate = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:default-sa
subjects:
- kind: ServiceAccount
name: default
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
`)
var APIServerTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-apiserver
namespace: kube-system
labels:
tier: control-plane
k8s-app: kube-apiserver
spec:
selector:
matchLabels:
tier: control-plane
k8s-app: kube-apiserver
template:
metadata:
labels:
tier: control-plane
k8s-app: kube-apiserver
annotations:
checkpointer.alpha.coreos.com/checkpoint: "true"
spec:
containers:
- name: kube-apiserver
image: {{ .Images.Hyperkube }}
command:
- /hyperkube
- kube-apiserver
- --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeClaimResize,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,Priority,NodeRestriction
- --advertise-address=$(POD_IP)
- --allow-privileged=true
- --anonymous-auth=false
- --authorization-mode=Node,RBAC
- --bind-address={{ .BindAllAddress }}
- --client-ca-file=/etc/kubernetes/secrets/ca.crt
- --requestheader-client-ca-file=/etc/kubernetes/secrets/front-proxy-ca.crt
- --requestheader-allowed-names=front-proxy-client
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --proxy-client-cert-file=/etc/kubernetes/secrets/front-proxy-client.crt
- --proxy-client-key-file=/etc/kubernetes/secrets/front-proxy-client.key
- --cloud-provider={{ .CloudProvider }}
- --enable-bootstrap-token-auth=true
{{- if .EtcdUseTLS }}
- --etcd-cafile=/etc/kubernetes/secrets/etcd-client-ca.crt
- --etcd-certfile=/etc/kubernetes/secrets/etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/secrets/etcd-client.key
{{- end }}
- --etcd-servers={{ range $i, $e := .EtcdServers }}{{ if $i }},{{end}}{{ $e }}{{end}}
- --insecure-port=0
- --kubelet-client-certificate=/etc/kubernetes/secrets/apiserver-kubelet-client.crt
- --kubelet-client-key=/etc/kubernetes/secrets/apiserver-kubelet-client.key
- --secure-port={{ (index .APIServers 0).Port }}
- --service-account-key-file=/etc/kubernetes/secrets/service-account.pub
- --service-cluster-ip-range={{ .ServiceCIDRsString }}
- --tls-cert-file=/etc/kubernetes/secrets/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/secrets/apiserver.key
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
- mountPath: /etc/kubernetes/secrets
name: secrets
readOnly: true
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
volumes:
- name: ssl-certs-host
hostPath:
path: /usr/share/ca-certificates
- name: secrets
secret:
secretName: kube-apiserver
securityContext:
runAsNonRoot: true
runAsUser: 65534
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var BootstrapAPIServerTemplate = []byte(`apiVersion: v1
kind: Pod
metadata:
name: bootstrap-kube-apiserver
namespace: kube-system
spec:
containers:
- name: kube-apiserver
image: {{ .Images.Hyperkube }}
command:
- /hyperkube
- kube-apiserver
- --advertise-address=$(POD_IP)
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --bind-address={{ .BindAllAddress }}
- --client-ca-file=/etc/kubernetes/secrets/ca.crt
- --requestheader-client-ca-file=/etc/kubernetes/secrets/front-proxy-ca.crt
- --requestheader-allowed-names=front-proxy-client
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --proxy-client-cert-file=/etc/kubernetes/secrets/front-proxy-client.crt
- --proxy-client-key-file=/etc/kubernetes/secrets/front-proxy-client.key
- --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeClaimResize,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,Priority,NodeRestriction
- --enable-bootstrap-token-auth=true
{{- if .EtcdUseTLS }}
- --etcd-cafile=/etc/kubernetes/secrets/etcd-client-ca.crt
- --etcd-certfile=/etc/kubernetes/secrets/etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/secrets/etcd-client.key
{{- end }}
- --etcd-servers={{ range $i, $e := .EtcdServers }}{{ if $i }},{{end}}{{ $e }}{{end}}
- --kubelet-client-certificate=/etc/kubernetes/secrets/apiserver-kubelet-client.crt
- --kubelet-client-key=/etc/kubernetes/secrets/apiserver-kubelet-client.key
- --secure-port={{ (index .APIServers 0).Port }}
- --service-account-key-file=/etc/kubernetes/secrets/service-account.pub
- --service-cluster-ip-range={{ .ServiceCIDRsString }}
- --cloud-provider={{ .CloudProvider }}
- --tls-cert-file=/etc/kubernetes/secrets/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/secrets/apiserver.key
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
- mountPath: /etc/kubernetes/secrets
name: secrets
readOnly: true
hostNetwork: true
volumes:
- name: secrets
hostPath:
path: /etc/kubernetes/{{ .BootstrapSecretsSubdir }}
- name: ssl-certs-host
hostPath:
path: /usr/share/ca-certificates
`)
var CheckpointerTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: pod-checkpointer
namespace: kube-system
labels:
tier: control-plane
k8s-app: pod-checkpointer
spec:
selector:
matchLabels:
tier: control-plane
k8s-app: pod-checkpointer
template:
metadata:
labels:
tier: control-plane
k8s-app: pod-checkpointer
annotations:
checkpointer.alpha.coreos.com/checkpoint: "true"
spec:
containers:
- name: pod-checkpointer
image: {{ .Images.PodCheckpointer }}
command:
- /checkpoint
- --lock-file=/var/run/lock/pod-checkpointer.lock
- --kubeconfig=/etc/checkpointer/kubeconfig
- --checkpoint-grace-period=5m
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
imagePullPolicy: Always
volumeMounts:
- mountPath: /etc/checkpointer
name: kubeconfig
- mountPath: /etc/kubernetes
name: etc-kubernetes
- mountPath: /var/run
name: var-run
serviceAccountName: pod-checkpointer
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
restartPolicy: Always
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
volumes:
- name: kubeconfig
configMap:
name: kubeconfig-in-cluster
- name: etc-kubernetes
hostPath:
path: /etc/kubernetes
- name: var-run
hostPath:
path: /var/run
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var CheckpointerServiceAccount = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
namespace: kube-system
name: pod-checkpointer
`)
var CheckpointerRole = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-checkpointer
namespace: kube-system
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
- apiGroups: [""] # "" indicates the core API group
resources: ["secrets", "configmaps"]
verbs: ["get"]
`)
var CheckpointerRoleBinding = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pod-checkpointer
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pod-checkpointer
subjects:
- kind: ServiceAccount
name: pod-checkpointer
namespace: kube-system
`)
var CheckpointerClusterRole = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-checkpointer
rules:
- apiGroups: [""]
resources: ["nodes", "nodes/proxy"]
verbs: ["get"]
`)
var CheckpointerClusterRoleBinding = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: pod-checkpointer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: pod-checkpointer
subjects:
- kind: ServiceAccount
name: pod-checkpointer
namespace: kube-system
`)
var ControllerManagerTemplate = []byte(`apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-controller-manager
namespace: kube-system
labels:
tier: control-plane
k8s-app: kube-controller-manager
spec:
replicas: 2
selector:
matchLabels:
tier: control-plane
k8s-app: kube-controller-manager
template:
metadata:
labels:
tier: control-plane
k8s-app: kube-controller-manager
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: tier
operator: In
values:
- control-plane
- key: k8s-app
operator: In
values:
- kube-controller-manager
topologyKey: kubernetes.io/hostname
containers:
- name: kube-controller-manager
image: {{ .Images.Hyperkube }}
command:
- ./hyperkube
- kube-controller-manager
- --use-service-account-credentials
- --allocate-node-cidrs=true
- --cloud-provider={{ .CloudProvider }}
- --cluster-cidr={{ .PodCIDRsString }}
- --service-cluster-ip-range={{ .ServiceCIDRsString }}
- --cluster-signing-cert-file=/etc/kubernetes/secrets/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/secrets/ca.key
- --configure-cloud-routes=false
- --leader-elect=true
- --root-ca-file=/etc/kubernetes/secrets/ca.crt
- --service-account-private-key-file=/etc/kubernetes/secrets/service-account.key
livenessProbe:
httpGet:
path: /healthz
port: 10252 # Note: Using default port. Update if --port option is set differently.
initialDelaySeconds: 15
timeoutSeconds: 15
volumeMounts:
- name: var-run-kubernetes
mountPath: /var/run/kubernetes
- name: secrets
mountPath: /etc/kubernetes/secrets
readOnly: true
- name: ssl-host
mountPath: /etc/ssl/certs
readOnly: true
nodeSelector:
node-role.kubernetes.io/master: ""
securityContext:
runAsNonRoot: true
runAsUser: 65534
serviceAccountName: kube-controller-manager
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
volumes:
- name: var-run-kubernetes
emptyDir: {}
- name: secrets
secret:
secretName: kube-controller-manager
- name: ssl-host
hostPath:
path: /usr/share/ca-certificates
dnsPolicy: ClusterFirstWithHostNet
`)
var ControllerManagerServiceAccount = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
namespace: kube-system
name: kube-controller-manager
`)
var ControllerManagerClusterRoleBinding = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: controller-manager
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kube-controller-manager
subjects:
- kind: ServiceAccount
name: kube-controller-manager
namespace: kube-system
`)
var BootstrapControllerManagerTemplate = []byte(`apiVersion: v1
kind: Pod
metadata:
name: bootstrap-kube-controller-manager
namespace: kube-system
spec:
containers:
- name: kube-controller-manager
image: {{ .Images.Hyperkube }}
command:
- ./hyperkube
- kube-controller-manager
- --allocate-node-cidrs=true
- --cluster-cidr={{ .PodCIDRsString }}
- --service-cluster-ip-range={{ .ServiceCIDRsString }}
- --cloud-provider={{ .CloudProvider }}
- --cluster-signing-cert-file=/etc/kubernetes/secrets/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/secrets/ca.key
- --configure-cloud-routes=false
- --kubeconfig=/etc/kubernetes/secrets/kubeconfig
- --leader-elect=true
- --root-ca-file=/etc/kubernetes/secrets/ca.crt
- --service-account-private-key-file=/etc/kubernetes/secrets/service-account.key
volumeMounts:
- name: secrets
mountPath: /etc/kubernetes/secrets
readOnly: true
- name: ssl-host
mountPath: /etc/ssl/certs
readOnly: true
hostNetwork: true
volumes:
- name: secrets
hostPath:
path: /etc/kubernetes/{{ .BootstrapSecretsSubdir }}
- name: ssl-host
hostPath:
path: /usr/share/ca-certificates
`)
var ControllerManagerDisruptionTemplate = []byte(`apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: kube-controller-manager
namespace: kube-system
spec:
minAvailable: 1
selector:
matchLabels:
tier: control-plane
k8s-app: kube-controller-manager
`)
var SchedulerTemplate = []byte(`apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-scheduler
namespace: kube-system
labels:
tier: control-plane
k8s-app: kube-scheduler
spec:
replicas: 2
selector:
matchLabels:
tier: control-plane
k8s-app: kube-scheduler
template:
metadata:
labels:
tier: control-plane
k8s-app: kube-scheduler
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: tier
operator: In
values:
- control-plane
- key: k8s-app
operator: In
values:
- kube-scheduler
topologyKey: kubernetes.io/hostname
containers:
- name: kube-scheduler
image: {{ .Images.Hyperkube }}
command:
- ./hyperkube
- kube-scheduler
- --leader-elect=true
livenessProbe:
httpGet:
path: /healthz
port: 10251 # Note: Using default port. Update if --port option is set differently.
initialDelaySeconds: 15
timeoutSeconds: 15
nodeSelector:
node-role.kubernetes.io/master: ""
securityContext:
runAsNonRoot: true
runAsUser: 65534
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
`)
var BootstrapSchedulerTemplate = []byte(`apiVersion: v1
kind: Pod
metadata:
name: bootstrap-kube-scheduler
namespace: kube-system
spec:
containers:
- name: kube-scheduler
image: {{ .Images.Hyperkube }}
command:
- ./hyperkube
- kube-scheduler
- --kubeconfig=/etc/kubernetes/secrets/kubeconfig
- --leader-elect=true
volumeMounts:
- name: secrets
mountPath: /etc/kubernetes/secrets
readOnly: true
hostNetwork: true
volumes:
- name: secrets
hostPath:
path: /etc/kubernetes/{{ .BootstrapSecretsSubdir }}
`)
var SchedulerDisruptionTemplate = []byte(`apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: kube-scheduler
namespace: kube-system
spec:
minAvailable: 1
selector:
matchLabels:
tier: control-plane
k8s-app: kube-scheduler
`)
var ProxyTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-proxy
namespace: kube-system
labels:
tier: node
k8s-app: kube-proxy
spec:
selector:
matchLabels:
tier: node
k8s-app: kube-proxy
template:
metadata:
labels:
tier: node
k8s-app: kube-proxy
spec:
containers:
- name: kube-proxy
image: {{ .Images.Hyperkube }}
command:
- ./hyperkube
- kube-proxy
- --cluster-cidr={{ .PodCIDRsString }}
- --hostname-override=$(NODE_NAME)
- --kubeconfig=/etc/kubernetes/kubeconfig
- --proxy-mode=iptables
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
securityContext:
privileged: true
volumeMounts:
- mountPath: /lib/modules
name: lib-modules
readOnly: true
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
- name: kubeconfig
mountPath: /etc/kubernetes
readOnly: true
hostNetwork: true
serviceAccountName: kube-proxy
tolerations:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
- name: ssl-certs-host
hostPath:
path: /usr/share/ca-certificates
- name: kubeconfig
configMap:
name: kubeconfig-in-cluster
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var ProxyServiceAccount = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
namespace: kube-system
name: kube-proxy
`)
var ProxyClusterRoleBinding = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kube-proxy
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:node-proxier # Automatically created system role.
subjects:
- kind: ServiceAccount
name: kube-proxy
namespace: kube-system
`)
// KubeConfigInCluster instructs clients to use their service account token,
// but unlike an in-cluster client doesn't rely on the `KUBERNETES_SERVICE_PORT`
// and `KUBERNETES_PORT` to determine the API servers address.
//
// This kubeconfig is used by bootstrapping pods that might not have access to
// these env vars, such as kube-proxy, which sets up the API server endpoint
// (chicken and egg), and the checkpointer, which needs to run as a static pod
// even if the API server isn't available.
var KubeConfigInClusterTemplate = []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: kubeconfig-in-cluster
namespace: kube-system
data:
kubeconfig: |
apiVersion: v1
clusters:
- name: local
cluster:
server: {{ .Server }}
certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
users:
- name: service-account
user:
# Use service account token
tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
contexts:
- context:
cluster: local
user: service-account
`)
var CoreDNSClusterRoleBindingTemplate = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:coredns
labels:
kubernetes.io/bootstrapping: rbac-defaults
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:coredns
subjects:
- kind: ServiceAccount
name: coredns
namespace: kube-system
`)
var CoreDNSClusterRoleTemplate = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:coredns
labels:
kubernetes.io/bootstrapping: rbac-defaults
rules:
- apiGroups: [""]
resources:
- endpoints
- services
- pods
- namespaces
verbs:
- list
- watch
- apiGroups: [""]
resources:
- nodes
verbs:
- get
`)
var CoreDNSConfigTemplate = []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
log . {
class error
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
`)
var CoreDNSDeploymentTemplate = []byte(`apiVersion: apps/v1
kind: Deployment
metadata:
name: coredns
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/name: "CoreDNS"
kubernetes.io/cluster-service: "true"
spec:
replicas : 2
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
k8s-app: coredns
template:
metadata:
labels:
k8s-app: coredns
annotations:
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- coredns
topologyKey: kubernetes.io/hostname
serviceAccountName: coredns
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: coredns
image: {{ .Images.CoreDNS }}
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 170Mi
requests:
cpu: 100m
memory: 70Mi
args: [ "-conf", "/etc/coredns/Corefile" ]
volumeMounts:
- name: config-volume
mountPath: /etc/coredns
readOnly: true
ports:
- name: dns
protocol: UDP
containerPort: 53
- name: dns-tcp
protocol: TCP
containerPort: 53
- name: metrics
protocol: TCP
containerPort: 9153
livenessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
httpGet:
path: /ready
port: 8181
scheme: HTTP
securityContext:
allowPrivilegeEscalation: false
capabilities:
add:
- NET_BIND_SERVICE
drop:
- all
readOnlyRootFilesystem: true
dnsPolicy: Default
volumes:
- name: config-volume
configMap:
name: coredns
items:
- key: Corefile
path: Corefile
`)
var CoreDNSServiceAccountTemplate = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
name: coredns
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
`)
var CoreDNSSvcTemplate = []byte(`apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9153"
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "CoreDNS"
spec:
selector:
k8s-app: kube-dns
clusterIP: {{ .DNSServiceIPsString }}
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP
`)
var FlannelClusterRole = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: flannel
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes/status
verbs:
- patch
`)
var FlannelClusterRoleBinding = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flannel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-system
`)
var FlannelServiceAccount = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
namespace: kube-system
`)
var FlannelCfgTemplate = []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: kube-flannel-cfg
namespace: kube-system
labels:
tier: node
k8s-app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
net-conf.json: |
{
"Network": "{{ .PodCIDR }}",
"Backend": {
"Type": "vxlan",
"Port": 4789
}
}
`)
var FlannelTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-flannel
namespace: kube-system
labels:
tier: node
k8s-app: flannel
spec:
selector:
matchLabels:
tier: node
k8s-app: flannel
template:
metadata:
labels:
tier: node
k8s-app: flannel
spec:
serviceAccountName: flannel
containers:
- name: kube-flannel
image: {{ .Images.Flannel }}
command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=$(POD_IP)"]
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumeMounts:
- name: run
mountPath: /run
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: install-cni
image: {{ .Images.FlannelCNI }}
command: ["/install-cni.sh"]
env:
- name: CNI_NETWORK_CONFIG
valueFrom:
configMapKeyRef:
name: kube-flannel-cfg
key: cni-conf.json
volumeMounts:
- name: cni
mountPath: /host/etc/cni/net.d
- name: host-cni-bin
mountPath: /host/opt/cni/bin/
hostNetwork: true
tolerations:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/kubernetes/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
- name: host-cni-bin
hostPath:
path: /opt/cni/bin
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var CalicoCfgTemplate = []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: calico-config
namespace: kube-system
data:
# Typha is still listed as a beta feature. Hence disabling it.
typha_service_name: "none"
# The CNI network configuration to install on each node.
cni_network_config: |-
{
"name": "k8s-pod-network",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "__KUBERNETES_NODE_NAME__",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s",
"k8s_auth_token": "__SERVICEACCOUNT_TOKEN__"
},
"kubernetes": {
"k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__",
"kubeconfig": "__KUBECONFIG_FILEPATH__"
}
},
{
"type": "portmap",
"snat": true,
"capabilities": {"portMappings": true}
}
]
}
`)
var CalicoNodeTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
selector:
matchLabels:
k8s-app: calico-node
template:
metadata:
labels:
k8s-app: calico-node
spec:
hostNetwork: true
serviceAccountName: calico-node
tolerations:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
containers:
- name: calico-node
image: {{ .Images.Calico }}
env:
- name: DATASTORE_TYPE
value: "kubernetes"
- name: FELIX_LOGSEVERITYSCREEN
value: "info"
- name: CLUSTER_TYPE
value: "k8s,bgp"
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
- name: FELIX_DEFAULTENDPOINTTOHOSTACTION
value: "ACCEPT"
- name: FELIX_IPV6SUPPORT
value: "false"
- name: FELIX_IPINIPMTU
value: "1440"
- name: WAIT_FOR_DATASTORE
value: "true"
- name: CALICO_IPV4POOL_CIDR
value: "{{ .PodCIDR }}"
- name: CALICO_IPV4POOL_IPIP
value: "Always"
- name: FELIX_IPINIPENABLED
value: "true"
- name: FELIX_TYPHAK8SSERVICENAME
valueFrom:
configMapKeyRef:
name: calico-config
key: typha_service_name
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: IP
value: "autodetect"
- name: FELIX_HEALTHENABLED
value: "true"
securityContext:
privileged: true
resources:
requests:
cpu: 250m
livenessProbe:
httpGet:
path: /liveness
port: 9099
periodSeconds: 10
initialDelaySeconds: 10
failureThreshold: 6
readinessProbe:
httpGet:
path: /readiness
port: 9099
periodSeconds: 10
volumeMounts:
- mountPath: /lib/modules
name: lib-modules
readOnly: true
- mountPath: /var/run/calico
name: var-run-calico
readOnly: false
- name: install-cni
image: {{ .Images.CalicoCNI }}
command: ["/install-cni.sh"]
env:
- name: CNI_CONF_NAME
value: "10-calico.conflist"
- name: CNI_NETWORK_CONFIG
valueFrom:
configMapKeyRef:
name: calico-config
key: cni_network_config
- name: CNI_NET_DIR
value: "/etc/kubernetes/cni/net.d"
- name: KUBERNETES_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
terminationGracePeriodSeconds: 0
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
- name: var-run-calico
hostPath:
path: /var/run/calico
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/kubernetes/cni/net.d
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var CalicoPolicyOnlyTemplate = []byte(`apiVersion: apps/v1
kind: DaemonSet
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
selector:
matchLabels:
k8s-app: calico-node
template:
metadata:
labels:
k8s-app: calico-node
spec:
hostNetwork: true
serviceAccountName: calico-node
tolerations:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
containers:
- name: calico-node
image: {{ .Images.Calico }}
env:
- name: DATASTORE_TYPE
value: "kubernetes"
- name: FELIX_LOGSEVERITYSCREEN
value: "info"
- name: CALICO_NETWORKING_BACKEND
value: "none"
- name: CLUSTER_TYPE
value: "bootkube,canal"
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
- name: FELIX_DEFAULTENDPOINTTOHOSTACTION
value: "ACCEPT"
- name: FELIX_IPV6SUPPORT
value: "false"
- name: WAIT_FOR_DATASTORE
value: "true"
- name: CALICO_IPV4POOL_CIDR
value: "{{ .PodCIDR }}"
- name: CALICO_IPV4POOL_IPIP
value: "Always"
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: IP
value: ""
- name: FELIX_HEALTHENABLED
value: "true"
securityContext:
privileged: true
resources:
requests:
cpu: 250m
livenessProbe:
httpGet:
path: /liveness
port: 9099
periodSeconds: 10
initialDelaySeconds: 10
failureThreshold: 6
readinessProbe:
httpGet:
path: /readiness
port: 9099
periodSeconds: 10
volumeMounts:
- mountPath: /lib/modules
name: lib-modules
readOnly: true
- mountPath: /var/run/calico
name: var-run-calico
readOnly: false
- name: install-cni
image: {{ .Images.CalicoCNI }}
command: ["/install-cni.sh"]
env:
- name: CNI_CONF_NAME
value: "10-calico.conflist"
- name: CNI_NETWORK_CONFIG
valueFrom:
configMapKeyRef:
name: calico-config
key: cni_network_config
- name: CNI_NET_DIR
value: "/etc/kubernetes/cni/net.d"
- name: KUBERNETES_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: SKIP_CNI_BINARIES
value: bridge,cnitool,dhcp,flannel,host-local,ipvlan,loopback,macvlan,noop,portmap,ptp,tuning
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
terminationGracePeriodSeconds: 0
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
- name: var-run-calico
hostPath:
path: /var/run/calico
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/kubernetes/cni/net.d
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
`)
var CalicoGlobalNetworkPoliciesCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico Global Network Policies
kind: CustomResourceDefinition
metadata:
name: globalnetworkpolicies.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: GlobalNetworkPolicy
plural: globalnetworkpolicies
singular: globalnetworkpolicy
`)
var CalicoIPPoolsCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico IP Pools
kind: CustomResourceDefinition
metadata:
name: ippools.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: IPPool
plural: ippools
singular: ippool
`)
var CalicoBGPConfigurationsCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico BGP Configuration
kind: CustomResourceDefinition
metadata:
name: bgpconfigurations.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: BGPConfiguration
plural: bgpconfigurations
singular: bgpconfiguration
`)
var CalicoBGPPeersCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico BGP Peers
kind: CustomResourceDefinition
metadata:
name: bgppeers.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: BGPPeer
plural: bgppeers
singular: bgppeer
`)
var CalicoFelixConfigurationsCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico Felix Configuration
kind: CustomResourceDefinition
metadata:
name: felixconfigurations.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: FelixConfiguration
plural: felixconfigurations
singular: felixconfiguration
`)
var CalicoGlobalNetworkSetsCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico Global Network Sets
kind: CustomResourceDefinition
metadata:
name: globalnetworksets.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: GlobalNetworkSet
plural: globalnetworksets
singular: globalnetworkset
`)
var CalicoNetworkPoliciesCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico Network Policies
kind: CustomResourceDefinition
metadata:
name: networkpolicies.crd.projectcalico.org
spec:
scope: Namespaced
group: crd.projectcalico.org
version: v1
names:
kind: NetworkPolicy
plural: networkpolicies
singular: networkpolicy
`)
var CalicoClusterInformationsCRD = []byte(`apiVersion: apiextensions.k8s.io/v1beta1
description: Calico Cluster Information
kind: CustomResourceDefinition
metadata:
name: clusterinformations.crd.projectcalico.org
spec:
scope: Cluster
group: crd.projectcalico.org
version: v1
names:
kind: ClusterInformation
plural: clusterinformations
singular: clusterinformation
`)
var CalicoServiceAccountTemplate = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
name: calico-node
namespace: kube-system
`)
var CalicoRoleTemplate = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: calico-node
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["pods/status"]
verbs: ["update"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "patch"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "update", "watch"]
- apiGroups: ["extensions"]
resources: ["networkpolicies"]
verbs: ["get", "list", "watch"]
- apiGroups: ["crd.projectcalico.org"]
resources: ["globalfelixconfigs", "felixconfigurations", "bgppeers", "globalbgpconfigs", "bgpconfigurations", "ippools", "globalnetworkpolicies", "globalnetworksets", "networkpolicies", "clusterinformations"]
verbs: ["create", "get", "list", "update", "watch"]
`)
var CalicoRoleBindingTemplate = []byte(`apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: calico-node
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: calico-node
subjects:
- kind: ServiceAccount
name: calico-node
namespace: kube-system
`)
// vim: set expandtab:tabstop=2
================================================
FILE: cmd/render/plugin/default/asset/k8s.go
================================================
package asset
import (
"bytes"
"crypto/rand"
"encoding/base64"
"fmt"
"path/filepath"
"text/template"
"github.com/ghodss/yaml"
"github.com/kubernetes-sigs/bootkube/cmd/render/plugin/default/asset/internal"
)
const (
// The name of the k8s service that selects self-hosted etcd pods
EtcdServiceName = "etcd-service"
SecretEtcdPeer = "etcd-peer-tls"
SecretEtcdServer = "etcd-server-tls"
SecretEtcdClient = "etcd-client-tls"
NetworkFlannel = "flannel"
NetworkCalico = "experimental-calico"
NetworkCanal = "experimental-canal"
secretNamespace = "kube-system"
secretAPIServerName = "kube-apiserver"
secretCMName = "kube-controller-manager"
)
type staticConfig struct {
Images ImageVersions
}
func newStaticAssets(imageVersions ImageVersions) Assets {
conf := staticConfig{Images: imageVersions}
assets := Assets{
MustCreateAssetFromTemplate(AssetPathScheduler, internal.SchedulerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathSchedulerDisruption, internal.SchedulerDisruptionTemplate, conf),
MustCreateAssetFromTemplate(AssetPathControllerManagerDisruption, internal.ControllerManagerDisruptionTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSClusterRoleBinding, internal.CoreDNSClusterRoleBindingTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSClusterRole, internal.CoreDNSClusterRoleTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSDeployment, internal.CoreDNSDeploymentTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSSA, internal.CoreDNSServiceAccountTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointer, internal.CheckpointerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointerSA, internal.CheckpointerServiceAccount, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointerRole, internal.CheckpointerRole, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointerRoleBinding, internal.CheckpointerRoleBinding, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointerClusterRole, internal.CheckpointerClusterRole, conf),
MustCreateAssetFromTemplate(AssetPathCheckpointerClusterRoleBinding, internal.CheckpointerClusterRoleBinding, conf),
MustCreateAssetFromTemplate(AssetPathCSRApproverRoleBinding, internal.CSRApproverRoleBindingTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCSRBootstrapRoleBinding, internal.CSRNodeBootstrapTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCSRRenewalRoleBinding, internal.CSRRenewalRoleBindingTemplate, conf),
MustCreateAssetFromTemplate(AssetPathKubeSystemSARoleBinding, internal.KubeSystemSARoleBindingTemplate, conf),
}
return assets
}
func newDynamicAssets(conf Config) Assets {
assets := Assets{
MustCreateAssetFromTemplate(AssetPathControllerManager, internal.ControllerManagerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathControllerManagerSA, internal.ControllerManagerServiceAccount, conf),
MustCreateAssetFromTemplate(AssetPathControllerManagerRB, internal.ControllerManagerClusterRoleBinding, conf),
MustCreateAssetFromTemplate(AssetPathAPIServer, internal.APIServerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathProxy, internal.ProxyTemplate, conf),
MustCreateAssetFromTemplate(AssetPathProxySA, internal.ProxyServiceAccount, conf),
MustCreateAssetFromTemplate(AssetPathProxyRoleBinding, internal.ProxyClusterRoleBinding, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSConfig, internal.CoreDNSConfigTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCoreDNSSvc, internal.CoreDNSSvcTemplate, conf),
MustCreateAssetFromTemplate(AssetPathBootstrapAPIServer, internal.BootstrapAPIServerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathBootstrapControllerManager, internal.BootstrapControllerManagerTemplate, conf),
MustCreateAssetFromTemplate(AssetPathBootstrapScheduler, internal.BootstrapSchedulerTemplate, conf),
}
switch conf.NetworkProvider {
case NetworkFlannel:
assets = append(assets,
MustCreateAssetFromTemplate(AssetPathFlannel, internal.FlannelTemplate, conf),
MustCreateAssetFromTemplate(AssetPathFlannelCfg, internal.FlannelCfgTemplate, conf),
MustCreateAssetFromTemplate(AssetPathFlannelClusterRole, internal.FlannelClusterRole, conf),
MustCreateAssetFromTemplate(AssetPathFlannelClusterRoleBinding, internal.FlannelClusterRoleBinding, conf),
MustCreateAssetFromTemplate(AssetPathFlannelSA, internal.FlannelServiceAccount, conf),
)
case NetworkCalico:
assets = append(assets,
MustCreateAssetFromTemplate(AssetPathCalicoCfg, internal.CalicoCfgTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoRole, internal.CalicoRoleTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoRoleBinding, internal.CalicoRoleBindingTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoSA, internal.CalicoServiceAccountTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalico, internal.CalicoNodeTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoBGPConfigurationsCRD, internal.CalicoBGPConfigurationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoBGPPeersCRD, internal.CalicoBGPPeersCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoFelixConfigurationsCRD, internal.CalicoFelixConfigurationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoGlobalNetworkPoliciesCRD, internal.CalicoGlobalNetworkPoliciesCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoGlobalNetworkSetsCRD, internal.CalicoGlobalNetworkSetsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoNetworkPoliciesCRD, internal.CalicoNetworkPoliciesCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoClusterInformationsCRD, internal.CalicoClusterInformationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoIPPoolsCRD, internal.CalicoIPPoolsCRD, conf))
case NetworkCanal:
assets = append(assets,
MustCreateAssetFromTemplate(AssetPathCalicoCfg, internal.CalicoCfgTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoRole, internal.CalicoRoleTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoRoleBinding, internal.CalicoRoleBindingTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoSA, internal.CalicoServiceAccountTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoPolicyOnly, internal.CalicoPolicyOnlyTemplate, conf),
MustCreateAssetFromTemplate(AssetPathCalicoBGPConfigurationsCRD, internal.CalicoBGPConfigurationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoBGPPeersCRD, internal.CalicoBGPPeersCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoFelixConfigurationsCRD, internal.CalicoFelixConfigurationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoGlobalNetworkPoliciesCRD, internal.CalicoGlobalNetworkPoliciesCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoGlobalNetworkSetsCRD, internal.CalicoGlobalNetworkSetsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoGlobalNetworkPoliciesCRD, internal.CalicoGlobalNetworkPoliciesCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoNetworkPoliciesCRD, internal.CalicoNetworkPoliciesCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoClusterInformationsCRD, internal.CalicoClusterInformationsCRD, conf),
MustCreateAssetFromTemplate(AssetPathCalicoIPPoolsCRD, internal.CalicoIPPoolsCRD, conf))
}
return assets
}
const validBootstrapTokenChars = "0123456789abcdefghijklmnopqrstuvwxyz"
// newBootstrapToken constructs a bootstrap token in conformance with the following format:
// https://kubernetes.io/docs/admin/bootstrap-tokens/#token-format
func newBootstrapToken() (id string, secret string, err error) {
// Read 6 random bytes for the id and 16 random bytes for the token (see spec for details).
token := make([]byte, 6+16)
if _, err := rand.Read(token); err != nil {
return "", "", err
}
for i, b := range token {
token[i] = validBootstrapTokenChars[int(b)%len(validBootstrapTokenChars)]
}
return string(token[:6]), string(token[6:]), nil
}
func newKubeConfigAssets(assets Assets, conf Config) ([]Asset, error) {
caCert, err := assets.Get(AssetPathCACert)
if err != nil {
return nil, err
}
adminCert, err := assets.Get(AssetPathAdminCert)
if err != nil {
return nil, err
}
adminKey, err := assets.Get(AssetPathAdminKey)
if err != nil {
return nil, err
}
bootstrapTokenID, bootstrapTokenSecret, err := newBootstrapToken()
if err != nil {
return nil, err
}
cfg := struct {
Cluster string
Server string
CACert string
AdminCert string
AdminKey string
BootstrapTokenID string
BootstrapTokenSecret string
}{
Server: conf.APIServers[0].String(),
Cluster: conf.ClusterName,
CACert: base64.StdEncoding.EncodeToString(caCert.Data),
AdminCert: base64.StdEncoding.EncodeToString(adminCert.Data),
AdminKey: base64.StdEncoding.EncodeToString(adminKey.Data),
BootstrapTokenID: bootstrapTokenID,
BootstrapTokenSecret: bootstrapTokenSecret,
}
templates := []struct {
path string
tmpl []byte
}{
{AssetPathAdminKubeConfig, internal.AdminKubeConfigTemplate},
{AssetPathKubeConfigInCluster, internal.KubeConfigInClusterTemplate},
{AssetPathKubeletKubeConfig, internal.KubeletKubeConfigTemplate},
{AssetPathKubeletBootstrapToken, internal.KubeletBootstrappingToken},
}
var as []Asset
for _, t := range templates {
a, err := assetFromTemplate(t.path, t.tmpl, cfg)
if err != nil {
return nil, fmt.Errorf("rendering template %s: %v", t.path, err)
}
as = append(as, a)
}
return as, nil
}
func newAPIServerSecretAsset(assets Assets, etcdUseTLS bool) (Asset, error) {
secretAssets := []string{
AssetPathAPIServerKey,
AssetPathAPIServerCert,
AssetPathServiceAccountPubKey,
AssetPathAggregatorCA,
AssetPathFrontProxyClientCert,
AssetPathFrontProxyClientKey,
AssetPathKubeletClientCert,
AssetPathKubeletClientKey,
AssetPathCACert,
}
if etcdUseTLS {
secretAssets = append(secretAssets, []string{
AssetPathEtcdClientCA,
AssetPathEtcdClientCert,
AssetPathEtcdClientKey,
}...)
}
secretYAML, err := secretFromAssets(secretAPIServerName, secretNamespace, secretAssets, assets)
if err != nil {
return Asset{}, err
}
return Asset{Name: AssetPathAPIServerSecret, Data: secretYAML}, nil
}
func newControllerManagerSecretAsset(assets Assets) (Asset, error) {
secretAssets := []string{
AssetPathServiceAccountPrivKey,
AssetPathCACert,
AssetPathCAKey,
}
secretYAML, err := secretFromAssets(secretCMName, secretNamespace, secretAssets, assets)
if err != nil {
return Asset{}, err
}
return Asset{Name: AssetPathControllerManagerSecret, Data: secretYAML}, nil
}
// TODO(aaron): use actual secret object (need to wrap in apiversion/type)
type secret struct {
ApiVersion string `json:"apiVersion"`
Kind string `json:"kind"`
Metadata map[string]string `json:"metadata"`
Type string `json:"type"`
Data map[string]string `json:"data"`
}
func secretFromAssets(name, namespace string, assetNames []string, assets Assets) ([]byte, error) {
data := make(map[string]string)
for _, an := range assetNames {
a, err := assets.Get(an)
if err != nil {
return []byte{}, err
}
data[filepath.Base(a.Name)] = base64.StdEncoding.EncodeToString(a.Data)
}
return yaml.Marshal(secret{
ApiVersion: "v1",
Kind: "Secret",
Type: "Opaque",
Metadata: map[string]string{
"name": name,
"namespace": namespace,
},
Data: data,
})
}
func MustCreateAssetFromTemplate(name string, template []byte, data interface{}) Asset {
a, err := assetFromTemplate(name, template, data)
if err != nil {
panic(err)
}
return a
}
func assetFromTemplate(name string, tb []byte, data interface{}) (Asset, error) {
tmpl, err := template.New(name).Parse(string(tb))
if err != nil {
return Asset{}, err
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, data); err != nil {
return Asset{}, err
}
return Asset{Name: name, Data: buf.Bytes()}, nil
}
================================================
FILE: cmd/render/plugin/default/asset/tls.go
================================================
package asset
import (
"crypto/rsa"
"crypto/x509"
"net"
"net/url"
"github.com/pborman/uuid"
"github.com/kubernetes-sigs/bootkube/pkg/tlsutil"
)
// TLS organizations map to Kubernetes groups, and "system:masters"
// is a well-known Kubernetes group that gives a user admin power.
const orgSystemMasters = "system:masters"
func newTLSAssets(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, altNames tlsutil.AltNames) ([]Asset, error) {
var (
assets []Asset
err error
)
apiKey, apiCert, err := newAPIKeyAndCert(caCert, caPrivKey, altNames)
if err != nil {
return assets, err
}
aggregatorCAPrivKey, err := tlsutil.NewPrivateKey()
if err != nil {
return assets, err
}
cfg := tlsutil.CertConfig{
CommonName: "front-proxy",
}
aggregatorCACert, err := tlsutil.NewSelfSignedCACertificate(cfg, aggregatorCAPrivKey)
if err != nil {
return assets, err
}
frontProxyPrivKey, err := tlsutil.NewPrivateKey()
if err != nil {
return assets, err
}
cfg = tlsutil.CertConfig{
CommonName: "front-proxy-client",
}
frontProxyCert, err := tlsutil.NewSignedCertificate(cfg, frontProxyPrivKey, aggregatorCACert, aggregatorCAPrivKey)
if err != nil {
return assets, err
}
kubeletClientCertConfig := tlsutil.CertConfig{
CommonName: "apiserver-kubelet-client",
Organization: []string{orgSystemMasters},
}
kubeletClientKey, kubeletClientCert, err := newAdminKeyAndCert(caCert, caPrivKey, kubeletClientCertConfig)
if err != nil {
return assets, err
}
saPrivKey, err := tlsutil.NewPrivateKey()
if err != nil {
return assets, err
}
saPubKey, err := tlsutil.EncodePublicKeyPEM(&saPrivKey.PublicKey)
if err != nil {
return assets, err
}
adminCertConfig := tlsutil.CertConfig{
CommonName: "admin",
Organization: []string{orgSystemMasters},
}
adminKey, adminCert, err := newAdminKeyAndCert(caCert, caPrivKey, adminCertConfig)
if err != nil {
return assets, err
}
assets = append(assets, []Asset{
{Name: AssetPathCAKey, Data: tlsutil.EncodePrivateKeyPEM(caPrivKey)},
{Name: AssetPathCACert, Data: tlsutil.EncodeCertificatePEM(caCert)},
{Name: AssetPathAPIServerKey, Data: tlsutil.EncodePrivateKeyPEM(apiKey)},
{Name: AssetPathAPIServerCert, Data: tlsutil.EncodeCertificatePEM(apiCert)},
{Name: AssetPathServiceAccountPrivKey, Data: tlsutil.EncodePrivateKeyPEM(saPrivKey)},
{Name: AssetPathAggregatorCA, Data: tlsutil.EncodeCertificatePEM(aggregatorCACert)},
{Name: AssetPathFrontProxyClientCert, Data: tlsutil.EncodeCertificatePEM(frontProxyCert)},
{Name: AssetPathFrontProxyClientKey, Data: tlsutil.EncodePrivateKeyPEM(frontProxyPrivKey)},
{Name: AssetPathKubeletClientKey, Data: tlsutil.EncodePrivateKeyPEM(kubeletClientKey)},
{Name: AssetPathKubeletClientCert, Data: tlsutil.EncodeCertificatePEM(kubeletClientCert)},
{Name: AssetPathServiceAccountPubKey, Data: saPubKey},
{Name: AssetPathAdminKey, Data: tlsutil.EncodePrivateKeyPEM(adminKey)},
{Name: AssetPathAdminCert, Data: tlsutil.EncodeCertificatePEM(adminCert)},
}...)
return assets, nil
}
func newCACert() (*rsa.PrivateKey, *x509.Certificate, error) {
key, err := tlsutil.NewPrivateKey()
if err != nil {
return nil, nil, err
}
config := tlsutil.CertConfig{
CommonName: "kube-ca",
Organization: []string{uuid.New()},
OrganizationalUnit: []string{"bootkube"},
}
cert, err := tlsutil.NewSelfSignedCACertificate(config, key)
if err != nil {
return nil, nil, err
}
return key, cert, err
}
func newAPIKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, altNames tlsutil.AltNames) (*rsa.PrivateKey, *x509.Certificate, error) {
key, err := tlsutil.NewPrivateKey()
if err != nil {
return nil, nil, err
}
altNames.DNSNames = append(altNames.DNSNames, []string{
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster.local",
}...)
config := tlsutil.CertConfig{
CommonName: "kube-apiserver",
Organization: []string{"kube-master"},
AltNames: altNames,
}
cert, err := tlsutil.NewSignedCertificate(config, key, caCert, caPrivKey)
if err != nil {
return nil, nil, err
}
return key, cert, err
}
func newAdminKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, config tlsutil.CertConfig) (*rsa.PrivateKey, *x509.Certificate, error) {
key, err := tlsutil.NewPrivateKey()
if err != nil {
return nil, nil, err
}
cert, err := tlsutil.NewSignedCertificate(config, key, caCert, caPrivKey)
if err != nil {
return nil, nil, err
}
return key, cert, err
}
func newEtcdTLSAssets(etcdCACert, etcdClientCert *x509.Certificate, etcdClientKey *rsa.PrivateKey, caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, etcdServers []*url.URL) ([]Asset, error) {
var assets []Asset
if etcdCACert == nil {
// Use the master CA to generate etcd assets.
etcdCACert = caCert
// Create an etcd client cert.
var err error
etcdClientKey, etcdClientCert, err = newEtcdKeyAndCert(caCert, caPrivKey, "etcd-client", etcdServers)
if err != nil {
return nil, err
}
// Create an etcd peer cert (not consumed by self-hosted components).
etcdPeerKey, etcdPeerCert, err := newEtcdKeyAndCert(caCert, caPrivKey, "etcd-peer", etcdServers)
if err != nil {
return nil, err
}
etcdServerKey, etcdServerCert, err := newEtcdKeyAndCert(caCert, caPrivKey, "etcd-server", etcdServers)
if err != nil {
return nil, err
}
assets = append(assets, []Asset{
{Name: AssetPathEtcdPeerCA, Data: tlsutil.EncodeCertificatePEM(etcdCACert)},
{Name: AssetPathEtcdPeerKey, Data: tlsutil.EncodePrivateKeyPEM(etcdPeerKey)},
{Name: AssetPathEtcdPeerCert, Data: tlsutil.EncodeCertificatePEM(etcdPeerCert)},
{Name: AssetPathEtcdServerCA, Data: tlsutil.EncodeCertificatePEM(etcdCACert)},
{Name: AssetPathEtcdServerKey, Data: tlsutil.EncodePrivateKeyPEM(etcdServerKey)},
{Name: AssetPathEtcdServerCert, Data: tlsutil.EncodeCertificatePEM(etcdServerCert)},
}...)
}
assets = append(assets, []Asset{
{Name: AssetPathEtcdClientCA, Data: tlsutil.EncodeCertificatePEM(etcdCACert)},
{Name: AssetPathEtcdClientKey, Data: tlsutil.EncodePrivateKeyPEM(etcdClientKey)},
{Name: AssetPathEtcdClientCert, Data: tlsutil.EncodeCertificatePEM(etcdClientCert)},
}...)
return assets, nil
}
func newEtcdKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, commonName string, etcdServers []*url.URL) (*rsa.PrivateKey, *x509.Certificate, error) {
addrs := make([]string, len(etcdServers))
for i := range etcdServers {
addrs[i] = etcdServers[i].Hostname()
}
return newKeyAndCert(caCert, caPrivKey, commonName, addrs)
}
func newKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, commonName string, addrs []string) (*rsa.PrivateKey, *x509.Certificate, error) {
key, err := tlsutil.NewPrivateKey()
if err != nil {
return nil, nil, err
}
var altNames tlsutil.AltNames
for _, addr := range addrs {
if ip := net.ParseIP(addr); ip != nil {
altNames.IPs = append(altNames.IPs, ip)
} else {
altNames.DNSNames = append(altNames.DNSNames, addr)
}
}
config := tlsutil.CertConfig{
CommonName: commonName,
Organization: []string{"etcd"},
AltNames: altNames,
}
cert, err := tlsutil.NewSignedCertificate(config, key, caCert, caPrivKey)
if err != nil {
return nil, nil, err
}
return key, cert, err
}
================================================
FILE: cmd/render/plugin/default/main.go
================================================
package main
import (
"crypto/rsa"
"crypto/x509"
"errors"
"flag"
"fmt"
"io/ioutil"
"net"
"net/url"
"strings"
"github.com/kubernetes-sigs/bootkube/cmd/render/plugin/default/asset"
"github.com/kubernetes-sigs/bootkube/pkg/plugin"
"github.com/kubernetes-sigs/bootkube/pkg/tlsutil"
)
const (
apiOffset = 1
dnsOffset = 10
defaultServiceBaseIP = "10.3.0.0"
defaultEtcdServers = "https://127.0.0.1:2379"
)
var (
renderOpts struct {
caCertificatePath string
caPrivateKeyPath string
etcdCAPath string
etcdCertificatePath string
etcdPrivateKeyPath string
etcdServers string
apiServers string
altNames string
podCIDR string
serviceCIDR string
cloudProvider string
networkProvider string
clusterName string
}
imageVersions = asset.DefaultImages
)
type render struct{}
var Renderer render
func (*render) Render(opts *plugin.Options, args []string) error {
CommandLine := flag.NewFlagSet("plugin", flag.ExitOnError)
CommandLine.StringVar(&renderOpts.caCertificatePath, "ca-certificate-path", "", "Path to an existing PEM encoded CA. If provided, TLS assets will be generated using this certificate authority.")
CommandLine.StringVar(&renderOpts.caPrivateKeyPath, "ca-private-key-path", "", "Path to an existing Certificate Authority RSA private key. Required if --ca-certificate is set.")
CommandLine.StringVar(&renderOpts.etcdCAPath, "etcd-ca-path", "", "Path to an existing PEM encoded CA that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-certificate-path and --etcd-private-key-path, and must have etcd configured to use TLS with matching secrets.")
CommandLine.StringVar(&renderOpts.etcdCertificatePath, "etcd-certificate-path", "", "Path to an existing certificate that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-ca-path and --etcd-private-key-path, and must have etcd configured to use TLS with matching secrets.")
CommandLine.StringVar(&renderOpts.etcdPrivateKeyPath, "etcd-private-key-path", "", "Path to an existing private key that will be used for TLS-enabled communication between the apiserver and etcd. Must be used in conjunction with --etcd-ca-path and --etcd-certificate-path, and must have etcd configured to use TLS with matching secrets.")
CommandLine.StringVar(&renderOpts.etcdServers, "etcd-servers", defaultEtcdServers, "List of etcd servers URLs including host:port, comma separated")
CommandLine.StringVar(&renderOpts.apiServers, "api-servers", "https://127.0.0.1:6443", "List of API server URLs including host:port, comma seprated")
CommandLine.StringVar(&renderOpts.altNames, "api-server-alt-names", "", "List of SANs to use in api-server certificate. Example: 'IP=127.0.0.1,IP=127.0.0.2,DNS=localhost'. If empty, SANs will be extracted from the --api-servers flag.")
CommandLine.StringVar(&renderOpts.podCIDR, "pod-cidr", "10.2.0.0/16", "The CIDR range(s) of cluster pods. If dual-stack, IPv4 must come first, separated by a comma.")
CommandLine.StringVar(&renderOpts.serviceCIDR, "service-cidr", "10.3.0.0/24", "The CIDR range(s) of cluster services. If dual-stack, IPv4 must come first, seprated by a comma.")
CommandLine.StringVar(&renderOpts.cloudProvider, "cloud-provider", "", "The provider for cloud services. Empty string for no provider")
CommandLine.StringVar(&renderOpts.networkProvider, "network-provider", "flannel", "CNI network provider (flannel, experimental-canal or experimental-calico).")
CommandLine.StringVar(&renderOpts.clusterName, "cluster-name", "", "The name of the kubernetes cluster.")
CommandLine.Parse(args)
err := validateRenderOpts()
if err != nil {
return err
}
config, err := flagsToAssetConfig()
if err != nil {
return err
}
as, err := asset.NewDefaultAssets(*config)
if err != nil {
return err
}
err = as.WriteFiles(opts.AssetDir)
if err != nil {
return err
}
return nil
}
func validateRenderOpts() error {
if renderOpts.caCertificatePath != "" && renderOpts.caPrivateKeyPath == "" {
return errors.New("You must provide the --ca-private-key-path flag when --ca-certificate-path is provided.")
}
if renderOpts.caPrivateKeyPath != "" && renderOpts.caCertificatePath == "" {
return errors.New("You must provide the --ca-certificate-path flag when --ca-private-key-path is provided.")
}
if (renderOpts.etcdCAPath != "" || renderOpts.etcdCertificatePath != "" || renderOpts.etcdPrivateKeyPath != "") && (renderOpts.etcdCAPath == "" || renderOpts.etcdCertificatePath == "" || renderOpts.etcdPrivateKeyPath == "") {
return errors.New("You must specify either all or none of --etcd-ca-path, --etcd-certificate-path, and --etcd-private-key-path")
}
if renderOpts.etcdServers == "" {
return errors.New("Missing required flag: --etcd-servers")
}
if renderOpts.apiServers == "" {
return errors.New("Missing required flag: --api-servers")
}
if renderOpts.networkProvider != asset.NetworkFlannel && renderOpts.networkProvider != asset.NetworkCalico && renderOpts.networkProvider != asset.NetworkCanal {
return errors.New("Must specify --network-provider flannel or experimental-calico or experimental-canal")
}
return nil
}
func flagsToAssetConfig() (c *asset.Config, err error) {
apiServers, err := parseURLs(renderOpts.apiServers)
if err != nil {
return nil, err
}
altNames, err := parseAltNames(renderOpts.altNames)
if err != nil {
return nil, err
}
if altNames == nil {
// Fall back to parsing from api-server list
altNames = altNamesFromURLs(apiServers)
}
var caCert *x509.Certificate
var caPrivKey *rsa.PrivateKey
if renderOpts.caCertificatePath != "" {
caPrivKey, caCert, err = parseCertAndPrivateKeyFromDisk(renderOpts.caCertificatePath, renderOpts.caPrivateKeyPath)
if err != nil {
return nil, err
}
}
var podNets, serviceNets []*net.IPNet
for _, cidr := range strings.Split(renderOpts.podCIDR, ",") {
_, podNet, err := net.ParseCIDR(cidr)
if err != nil {
return nil, err
}
podNets = append(podNets, podNet)
}
for _, cidr := range strings.Split(renderOpts.serviceCIDR, ",") {
_, serviceNet, err := net.ParseCIDR(cidr)
if err != nil {
return nil, err
}
serviceNets = append(serviceNets, serviceNet)
}
if len(podNets) != len(serviceNets) {
return nil, fmt.Errorf("number of service CIDRs (%d) must match the number of pod CIDRs (%d)", len(serviceNets), len(podNets))
}
if len(podNets) > 2 || len(podNets) < 1 {
return nil, errors.New("kubernetes requires exactly 1 or 2 pod networks, and they must be of different address families")
}
if len(serviceNets) > 2 || len(serviceNets) < 1 {
return nil, errors.New("kubernetes requires exactly 1 or 2 service networks, and they must be of different address families")
}
for _, podNet := range podNets {
for _, svcNet := range serviceNets {
if podNet.Contains(svcNet.IP) || svcNet.Contains(podNet.IP) {
return nil, fmt.Errorf("Pod CIDR %s and service CIDR %s must not overlap", podNet.String(), svcNet.String())
}
}
}
var apiServiceIPs, dnsServiceIPs []net.IP
for _, serviceNet := range serviceNets {
apiServiceIP, err := offsetServiceIP(serviceNet, apiOffset)
if err != nil {
return nil, err
}
apiServiceIPs = append(apiServiceIPs, apiServiceIP)
dnsServiceIP, err := offsetServiceIP(serviceNet, dnsOffset)
if err != nil {
return nil, err
}
dnsServiceIPs = append(dnsServiceIPs, dnsServiceIP)
}
etcdServers, err := parseURLs(renderOpts.etcdServers)
if err != nil {
return nil, err
}
etcdUseTLS := false
for _, url := range etcdServers {
if url.Scheme == "https" {
etcdUseTLS = true
}
}
var etcdCACert *x509.Certificate
if renderOpts.etcdCAPath != "" {
etcdCACert, err = parseCertFromDisk(renderOpts.etcdCAPath)
if err != nil {
return nil, err
}
}
var etcdClientCert *x509.Certificate
var etcdClientKey *rsa.PrivateKey
if renderOpts.etcdCertificatePath != "" {
etcdClientKey, etcdClientCert, err = parseCertAndPrivateKeyFromDisk(renderOpts.etcdCertificatePath, renderOpts.etcdPrivateKeyPath)
if err != nil {
return nil, err
}
}
// TODO: Find better option than asking users to make manual changes
if serviceNets[0].IP.String() != defaultServiceBaseIP {
fmt.Printf("You have selected a non-default service CIDR %s - be sure your kubelet service file uses --cluster-dns=%s\n", serviceNets[0].String(), dnsServiceIPs[0].String())
}
return &asset.Config{
ClusterName: renderOpts.clusterName,
EtcdCACert: etcdCACert,
EtcdClientCert: etcdClientCert,
EtcdClientKey: etcdClientKey,
EtcdServers: etcdServers,
EtcdUseTLS: etcdUseTLS,
CACert: caCert,
CAPrivKey: caPrivKey,
APIServers: apiServers,
AltNames: altNames,
PodCIDRs: podNets,
ServiceCIDRs: serviceNets,
APIServiceIPs: apiServiceIPs,
DNSServiceIPs: dnsServiceIPs,
CloudProvider: renderOpts.cloudProvider,
NetworkProvider: renderOpts.networkProvider,
Images: imageVersions,
}, nil
}
func parseCertAndPrivateKeyFromDisk(caCertPath, privKeyPath string) (*rsa.PrivateKey, *x509.Certificate, error) {
// Parse CA Private key.
keypem, err := ioutil.ReadFile(privKeyPath)
if err != nil {
return nil, nil, fmt.Errorf("error reading ca private key file at %s: %v", privKeyPath, err)
}
key, err := tlsutil.ParsePEMEncodedPrivateKey(keypem)
if err != nil {
return nil, nil, fmt.Errorf("unable to parse CA private key: %v", err)
}
// Parse CA Cert.
cert, err := parseCertFromDisk(caCertPath)
if err != nil {
return nil, nil, err
}
return key, cert, nil
}
func parseCertFromDisk(caCertPath string) (*x509.Certificate, error) {
capem, err := ioutil.ReadFile(caCertPath)
if err != nil {
return nil, fmt.Errorf("error reading ca cert file at %s: %v", caCertPath, err)
}
cert, err := tlsutil.ParsePEMEncodedCACert(capem)
if err != nil {
return nil, fmt.Errorf("unable to parse CA Cert: %v", err)
}
return cert, nil
}
func parseURLs(s string) ([]*url.URL, error) {
var out []*url.URL
for _, u := range strings.Split(s, ",") {
parsed, err := url.Parse(u)
if err != nil {
return nil, err
}
out = append(out, parsed)
}
return out, nil
}
func parseAltNames(s string) (*tlsutil.AltNames, error) {
if s == "" {
return nil, nil
}
var alt tlsutil.AltNames
for _, an := range strings.Split(s, ",") {
switch {
case strings.HasPrefix(an, "DNS="):
alt.DNSNames = append(alt.DNSNames, strings.TrimPrefix(an, "DNS="))
case strings.HasPrefix(an, "IP="):
ip := net.ParseIP(strings.TrimPrefix(an, "IP="))
if ip == nil {
return nil, fmt.Errorf("Invalid IP alt name: %s", an)
}
alt.IPs = append(alt.IPs, ip)
default:
return nil, fmt.Errorf("Invalid alt name: %s", an)
}
}
return &alt, nil
}
func altNamesFromURLs(urls []*url.URL) *tlsutil.AltNames {
var an tlsutil.AltNames
for _, u := range urls {
host, _, err := net.SplitHostPort(u.Host)
if err != nil {
host = u.Host
}
ip := net.ParseIP(host)
if ip == nil {
an.DNSNames = append(an.DNSNames, host)
} else {
an.IPs = append(an.IPs, ip)
}
}
return &an
}
// offsetServiceIP returns an IP offset by up to 255.
// TODO: do numeric conversion to generalize this utility.
func offsetServiceIP(ipnet *net.IPNet, offset int) (net.IP, error) {
ip := make(net.IP, len(ipnet.IP))
copy(ip, ipnet.IP)
for i := 0; i < offset; i++ {
incIPv4(ip)
}
if ipnet.Contains(ip) {
return ip, nil
}
return net.IP([]byte("")), fmt.Errorf("Service IP %v is not in %s", ip, ipnet)
}
func incIPv4(ip net.IP) {
for j := len(ip) - 1; j >= 0; j-- {
ip[j]++
if ip[j] > 0 {
break
}
}
}
================================================
FILE: cmd/render/plugin/default/render_test.go
================================================
package main
import (
"net"
"testing"
)
func TestOffsetIP(t *testing.T) {
cases := []struct {
input string
offset int
expected string
}{
{"10.3.0.0/24", 1, "10.3.0.1"},
{"10.3.0.0/24", 10, "10.3.0.10"},
{"10.3.0.0/24", 15, "10.3.0.15"},
{"10.3.0.0/16", 1, "10.3.0.1"},
{"10.3.0.0/16", 10, "10.3.0.10"},
{"10.3.0.0/16", 15, "10.3.0.15"},
{"10.33.1.200/16", 1, "10.33.0.1"},
{"10.33.1.200/16", 10, "10.33.0.10"},
{"10.33.1.200/16", 15, "10.33.0.15"},
{"192.168.1.0/24", 15, "192.168.1.15"},
}
for _, c := range cases {
_, cidr, err := net.ParseCIDR(c.input)
if err != nil {
t.Errorf("unexpected CIDR parse error: %v", err)
}
ip, err := offsetServiceIP(cidr, c.offset)
if ip.String() != c.expected {
t.Errorf("expected %s, got %s", c.expected, ip.String())
}
}
}
================================================
FILE: code-of-conduct.md
================================================
# Kubernetes Community Code of Conduct
Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
================================================
FILE: e2e/README.md
================================================
## Bootkube E2E Testing
This is the beginnings of E2E testing for the bootkube repo using the standard go testing harness. To run the tests once you have a kubeconfig to a running cluster just execute:
`go test -v ./e2e/ --kubeconfig=<filepath>`
The number of nodes is required so that the setup can block on all nodes being registered.
## Roadmap
Implement whatever is needed to finish porting all functionality from pluton tests
================================================
FILE: e2e/checkpointer_test.go
================================================
package e2e
import (
"bytes"
"context"
"fmt"
"strings"
"sync"
"testing"
"time"
"github.com/kubernetes-sigs/bootkube/cmd/render/plugin/default/asset"
v1 "k8s.io/api/core/v1"
"k8s.io/api/extensions/v1beta1"
rbac "k8s.io/api/rbac/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/scheme"
)
const (
retryAttempts = 60
retryInterval = 5 * time.Second
)
func TestCheckpointer(t *testing.T) {
t.Run("UnscheduleCheckpointer", testCheckpointerUnscheduleCheckpointer)
t.Run("UnscheduleParent", testCheckpointerUnscheduleParent)
}
// Deleting a checkpointer should cleanup any other checkpointed manifests on that node.
func testCheckpointerUnscheduleCheckpointer(t *testing.T) {
// Get the cluster
c := waitCluster(t)
testNS := makeNamespace(t.Name())
if _, err := createNamespace(client, testNS); err != nil {
t.Fatalf("Failed to create namespace: %v", err)
}
defer deleteNamespace(client, testNS)
// Deploy the pod checkpointer and test nginx.
if err := setupTestCheckpointerRole(testNS); err != nil {
t.Fatalf("Failed to create test-checkpointer role: %v", err)
}
if err := createDaemonSet(testNS, []byte(fmt.Sprintf(checkpointerDS, asset.DefaultImages.PodCheckpointer)), c); err != nil {
t.Fatalf("Failed to create pod-checkpointer daemonset: %v", err)
}
if err := createDaemonSet(testNS, nginxDS, c); err != nil {
t.Fatalf("Failed to create nginx daemonset: %v", err)
}
// Verify the checkpoints are created.
if err := verifyCheckpoint(c, testNS, "test-checkpointer", true, true); err != nil {
t.Fatalf("Failed to verify checkpoint: %v", err)
}
if err := verifyCheckpoint(c, testNS, "test-nginx", true, false); err != nil {
t.Fatalf("Failed to verify checkpoint: %v", err)
}
// Delete the pod checkpointer.
deletePropagationForeground := metav1.DeletePropagationForeground
if err := client.ExtensionsV1beta1().DaemonSets(testNS).Delete(context.TODO(), "test-checkpointer", metav1.DeleteOptions{PropagationPolicy: &deletePropagationForeground}); err != nil {
t.Fatalf("Failed to delete checkpointer: %v", err)
}
// Verify that the test-checkpointer is cleaned up but the nginx daemonset is still running.
if err := verifyPod(c, "test-checkpointer", false); err != nil {
t.Errorf("Failed to verifyPod: %s", err)
}
if err := verifyPod(c, "test-nginx", true); err != nil {
t.Errorf("Failed to verifyPod: %s", err)
}
// Currently disabled due to e2e testing flakes. See:
// * https://github.com/kubernetes-sigs/bootkube/issues/816
// * https://github.com/kubernetes-sigs/bootkube/pull/836
// if err := verifyCheckpoint(c, testNS, "test-checkpointer", false, false); err != nil {
// t.Fatalf("Failed to verifyCheckpoint: %s", err)
// }
// Checkpointed manifest should be cleaned up.
if err := verifyCheckpoint(c, testNS, "test-nginx", false, false); err != nil {
t.Errorf("Failed to verifyCheckpoint: %s", err)
}
}
// 1. Schedule a pod checkpointer on worker node.
// 2. Schedule a test pod on worker node.
// 3. Reboot the worker without starting the kubelet.
// 4. Delete the test pod on API server.
// 5. Reboot the masters without starting the kubelet.
// 6. Start the worker kubelet, verify the checkpointer and the pod are still running as static pods.
// 7. Start the master kubelets, verify the test pod is removed, but not the checkpointer.
func testCheckpointerUnscheduleParent(t *testing.T) {
// Get the cluster
c := waitCluster(t)
testNS := makeNamespace(t.Name())
if _, err := createNamespace(client, testNS); err != nil {
t.Fatalf("Failed to create namespace: %v", err)
}
defer deleteNamespace(client, testNS)
// Deploy the pod checkpointer and test nginx.
if err := setupTestCheckpointerRole(testNS); err != nil {
t.Fatalf("Failed to create test-checkpointer role: %v", err)
}
if err := createDaemonSet(testNS, []byte(fmt.Sprintf(checkpointerDS, asset.DefaultImages.PodCheckpointer)), c); err != nil {
t.Fatalf("Failed to create pod-checkpointer daemonset: %v", err)
}
if err := createDaemonSet(testNS, nginxDS, c); err != nil {
t.Fatalf("Failed to create nginx daemonset: %v", err)
}
// Verify the checkpoints are created.
if err := verifyCheckpoint(c, testNS, "test-checkpointer", true, true); err != nil {
t.Fatalf("verifyCheckpoint: %s", err)
}
if err := verifyCheckpoint(c, testNS, "test-nginx", true, false); err != nil {
t.Fatalf("verifyCheckpoint: %s", err)
}
// Disable the kubelet and reboot the worker.
if stdout, stderr, err := c.Workers[0].SSH("sudo systemctl disable kubelet"); err != nil {
t.Fatalf("Failed to disable kubelet on worker %q: %v\nstdout: %s\nstderr: %s", c.Workers[0].Name, err, stdout, stderr)
}
if err := c.Workers[0].Reboot(); err != nil {
t.Fatalf("Failed to reboot worker: %v", err)
}
// Delete test pod on the workers.
patch := `{"spec":{"template":{"spec":{"nodeSelector":{"node-role.kubernetes.io/master":""}}}}}`
if _, err := client.ExtensionsV1beta1().DaemonSets(testNS).Patch(context.TODO(), "test-nginx", types.MergePatchType, []byte(patch), metav1.PatchOptions{}); err != nil {
t.Fatalf("unable to patch daemonset: %v", err)
}
// Disable the kubelet and reboot the masters.
var rebootGroup sync.WaitGroup
for i := range c.Masters {
rebootGroup.Add(1)
go func(i int) {
defer rebootGroup.Done()
if stdout, stderr, err := c.Masters[i].SSH("sudo systemctl disable kubelet"); err != nil {
t.Fatalf("Failed to disable kubelet on master %q: %v\nstdout: %s\nstderr: %s", c.Masters[i].Name, err, stdout, stderr)
}
if err := c.Masters[i].Reboot(); err != nil {
t.Fatalf("Failed to reboot master: %v", err)
}
}(i)
}
rebootGroup.Wait()
// Start the worker kubelet.
if stdout, stderr, err := c.Workers[0].SSH("sudo systemctl enable kubelet && sudo systemctl start kubelet"); err != nil {
t.Fatalf("unable to start kubelet on worker %q: %v\nstdout: %s\nstderr: %s", c.Workers[0].Name, err, stdout, stderr)
}
// Verify that the checkpoints are running.
if err := verifyPod(c, "pod-checkpointer", true); err != nil {
t.Fatalf("verifyPod: %s", err)
}
if err := verifyPod(c, "test-nginx", true); err != nil {
t.Fatalf("verifyPod: %s", err)
}
// Start the master kubelets.
var enableGroup sync.WaitGroup
for i := range c.Masters {
enableGroup.Add(1)
go func(i int) {
defer enableGroup.Done()
if stdout, stderr, err := c.Masters[i].SSH("sudo systemctl enable kubelet && sudo systemctl start kubelet"); err != nil {
t.Fatalf("unable to start kubelet on master %q: %v\nstdout: %s\nstderr: %s", c.Masters[i].Name, err, stdout, stderr)
}
}(i)
}
enableGroup.Wait()
// Verify that checkpoint is cleaned up and not running, but the pod checkpointer should still be running.
if err := verifyPod(c, "test-checkpointer", true); err != nil {
t.Fatalf("verifyPod: %s", err)
}
if err := verifyPod(c, "test-nginx", false); err != nil {
t.Fatalf("verifyPod: %s", err)
}
if err := verifyCheckpoint(c, testNS, "test-checkpointer", true, true); err != nil {
t.Fatalf("verifyCheckpoint: %s", err)
}
if err := verifyCheckpoint(c, testNS, "test-nginx", false, false); err != nil {
t.Fatalf("verifyCheckpoint: %s", err)
}
}
func makeNamespace(testName string) string {
return strings.ToLower(fmt.Sprintf("%s-%s", namespace, strings.Split(testName, "/")[1]))
}
func createDaemonSet(namespace string, manifest []byte, c *Cluster) error {
obj, _, err := scheme.Codecs.UniversalDecoder().Decode(manifest, nil, &v1beta1.DaemonSet{})
if err != nil {
return fmt.Errorf("unable to decode manifest: %v", err)
}
ds, ok := obj.(*v1beta1.DaemonSet)
if !ok {
return fmt.Errorf("expected manifest to decode into *api.Daemonset, got %T", ds)
}
if _, err := client.ExtensionsV1beta1().DaemonSets(namespace).Create(context.TODO(), ds, metav1.CreateOptions{}); err != nil {
return fmt.Errorf("failed to create the checkpoint parent: %v", err)
}
if err := verifyPod(c, ds.ObjectMeta.Name, true); err != nil {
return fmt.Errorf("failed to verifyPod: %s", err)
}
return nil
}
func verifyCheckpoint(c *Cluster, namespace, daemonsetName string, shouldExist, shouldBeActive bool) error {
return retry(retryAttempts, retryInterval, func() error {
dirs := []string{
"/etc/kubernetes/inactive-manifests/",
"/etc/kubernetes/checkpoint-secrets/" + namespace,
// TODO(yifan): Add configmap.
}
if shouldBeActive {
dirs = append(dirs, "/etc/kubernetes/manifests")
}
for _, dir := range dirs {
stdout, stderr, err := c.Workers[0].SSH("sudo ls " + dir)
if err != nil {
return fmt.Errorf("unable to ls %q, error: %v\nstdout: %s\nstderr: %s", dir, err, stdout, stderr)
}
if shouldExist && !bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("unable to find checkpoint %q in %q: error: %v, output: %q", daemonsetName, dir, err, stdout)
}
if !shouldExist && bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("should not find checkpoint %q in %q, error: %v, output: %q", daemonsetName, dir, err, stdout)
}
}
// Check active checkpoints.
dir := "/etc/kubernetes/manifests"
stdout, stderr, err := c.Workers[0].SSH("sudo ls " + dir)
if err != nil {
return fmt.Errorf("unable to ls %q, error: %v\nstdout: %s\nstderr: %s", dir, err, stdout, stderr)
}
if shouldBeActive && !bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("unable to find checkpoint %q in %q: error: %v, output: %q", daemonsetName, dir, err, stdout)
}
if !shouldBeActive && bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("should not find checkpoint %q in %q, error: %v, output: %q", daemonsetName, dir, err, stdout)
}
return nil
})
}
func verifyPod(c *Cluster, daemonsetName string, shouldRun bool) error {
return retry(retryAttempts, retryInterval, func() error {
stdout, stderr, err := c.Workers[0].SSH("docker ps")
if err != nil {
return fmt.Errorf("unable to docker ps, error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
}
if shouldRun && !bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("unable to find running checkpoints %q, error: %v, output: %q", daemonsetName, err, stdout)
}
if !shouldRun && bytes.Contains(stdout, []byte(daemonsetName)) {
return fmt.Errorf("should not find running checkpoints %q, error: %v, output: %q", daemonsetName, err, stdout)
}
return nil
})
}
func isNodeReady(n *Node) bool {
for _, condition := range n.Status.Conditions {
if condition.Type == v1.NodeReady && condition.Status == v1.ConditionTrue {
return true
}
}
return false
}
// waitCluster waits for master and workers to be ready.
func waitCluster(t *testing.T) *Cluster {
var c *Cluster
var err error
if err := retry(retryAttempts, retryInterval, func() error {
c, err = GetCluster()
if err != nil {
t.Fatalf("Failed to get cluster")
}
if len(c.Masters) == 0 {
return fmt.Errorf("no masters")
}
if len(c.Workers) == 0 {
return fmt.Errorf("no workers")
}
for i := range c.Masters {
if !isNodeReady(c.Masters[i]) {
return fmt.Errorf("masters[%d] is not ready", i)
}
}
for i := range c.Workers {
if !isNodeReady(c.Workers[i]) {
return fmt.Errorf("workers[%d] is not ready", i)
}
}
return nil
}); err != nil {
t.Fatalf("Failed to wait cluster: %v", err)
}
return c
}
func setupTestCheckpointerRole(namespace string) error {
// Copy special kubeconfig-in-cluster configmap from kube-system namespace.
kc, err := client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(context.TODO(), "kubeconfig-in-cluster", metav1.GetOptions{})
if err != nil {
return err
}
kc.ObjectMeta = metav1.ObjectMeta{
Name: kc.ObjectMeta.Name,
Namespace: namespace,
}
if _, err := client.CoreV1().ConfigMaps(namespace).Create(context.TODO(), kc, metav1.CreateOptions{}); err != nil {
return err
}
if _, err := client.CoreV1().ServiceAccounts(namespace).Create(context.TODO(), &v1.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{
Name: "test-checkpointer",
Namespace: namespace,
},
}, metav1.CreateOptions{}); err != nil {
return err
}
if _, err := client.RbacV1beta1().Roles(namespace).Create(context.TODO(), &rbac.Role{
ObjectMeta: metav1.ObjectMeta{
Name: "test-checkpointer",
Namespace: namespace,
},
Rules: []rbac.PolicyRule{{
APIGroups: []string{""}, // "" indicates the core API group
Resources: []string{"pods"},
Verbs: []string{"get", "watch", "list"},
}, {
APIGroups: []string{""}, // "" indicates the core API group
Resources: []string{"secrets", "configmaps"},
Verbs: []string{"get"},
}},
}, metav1.CreateOptions{}); err != nil {
return err
}
if _, err := client.RbacV1beta1().RoleBindings(namespace).Create(context.TODO(), &rbac.RoleBinding{
ObjectMeta: metav1.ObjectMeta{
Name: "test-checkpointer",
Namespace: namespace,
},
Subjects: []rbac.Subject{{
Kind: "ServiceAccount",
Name: "test-checkpointer",
Namespace: namespace,
}},
RoleRef: rbac.RoleRef{
APIGroup: "rbac.authorization.k8s.io",
Kind: "Role",
Name: "test-checkpointer",
},
}, metav1.CreateOptions{}); err != nil {
return err
}
return nil
}
const checkpointerDS = `apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: test-checkpointer
labels:
app: test-checkpointer
spec:
selector:
matchLabels:
app: test-checkpointer
template:
metadata:
labels:
app: test-checkpointer
annotations:
checkpointer.alpha.coreos.com/checkpoint: "true"
spec:
containers:
- name: test-checkpointer
image: %s
command:
- /checkpoint
- --checkpoint-grace-period=5s
- --lock-file=/var/run/lock/test-checkpointer.lock
- --kubeconfig=/etc/checkpointer/kubeconfig
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
imagePullPolicy: Always
volumeMounts:
- mountPath: /etc/checkpointer
name: kubeconfig
- mountPath: /etc/kubernetes
name: etc-kubernetes
- mountPath: /var/run
name: var-run
serviceAccountName: test-checkpointer
hostNetwork: true
restartPolicy: Always
volumes:
- name: kubeconfig
configMap:
name: kubeconfig-in-cluster
- name: etc-kubernetes
hostPath:
path: /etc/kubernetes
- name: var-run
hostPath:
path: /var/run
`
var nginxDS = []byte(`apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: test-nginx
spec:
selector:
matchLabels:
app: nginx-checkpoint-test
template:
metadata:
labels:
app: nginx-checkpoint-test
annotations:
checkpointer.alpha.coreos.com/checkpoint: "true"
spec:
hostNetwork: true
containers:
- name: nginx
image: nginx
`)
================================================
FILE: e2e/deleteapi_test.go
================================================
package e2e
import (
"context"
"fmt"
"testing"
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestDeleteAPI(t *testing.T) {
apiPods, err := client.CoreV1().Pods("kube-system").List(context.TODO(), metav1.ListOptions{LabelSelector: "k8s-app=kube-apiserver"})
if err != nil {
t.Fatal(err)
}
// delete any api-server pods
deletedPods := make(map[string]struct{})
for _, pod := range apiPods.Items {
if err := client.CoreV1().Pods("kube-system").Delete(context.TODO(), pod.ObjectMeta.Name, metav1.DeleteOptions{}); err != nil {
t.Fatalf("error deleting api-server pod: %v", err)
}
deletedPods[pod.ObjectMeta.Name] = struct{}{}
}
// wait for pods to be completely deleted.
if err := retry(100, 1*time.Second, func() error {
remainingPods, err := client.CoreV1().Pods("kube-system").List(context.TODO(), metav1.ListOptions{LabelSelector: "k8s-app=kube-apiserver"})
if err != nil {
return fmt.Errorf("error checking for remaining apiserver pods: %v", err)
}
for _, pod := range remainingPods.Items {
if _, ok := deletedPods[pod.ObjectMeta.Name]; ok {
return fmt.Errorf("pod %s is still not deleted", pod.ObjectMeta.Name)
}
}
return nil
}); err != nil {
t.Fatalf("error waiting for apiserver pods to be deleted: %v", err)
}
// wait until api server is back up
if err := controlPlaneReady(client, 120, 5*time.Second); err != nil {
t.Fatalf("waiting for control plane: %v", err)
}
}
================================================
FILE: e2e/internal/e2eutil/testworkload/nginx_workload.go
================================================
package testworkload
import (
"context"
"fmt"
"time"
"github.com/golang/glog"
batchv1 "k8s.io/api/batch/v1"
"k8s.io/api/core/v1"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
utilrand "k8s.io/apimachinery/pkg/util/rand"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes"
)
var (
// PollTimeoutForNginx is the max duration for polling when using Nginx testworkload.
PollTimeoutForNginx = 10 * time.Minute
// PollIntervalForNginx is the interval between each condition check of poolling when using Nginx testworkload.
PollIntervalForNginx = 10 * time.Second
)
// Nginx creates a temp nginx deployment/service pair
// that can be used as a test workload
type Nginx struct {
Namespace string
Name string
// List of pods that belong to the deployment
Pods []*v1.Pod
client kubernetes.Interface
podSelector *metav1.LabelSelector
nodeSelector *metav1.LabelSelector
pingPodSelector *metav1.LabelSelector
}
// NginxOpts defines func that applies custom options for Nginx
type NginxOpts func(*Nginx) error
// NewNginx create this nginx deployment/service pair.
// It waits until all the pods in the deployment are running.
func NewNginx(kc kubernetes.Interface, namespace string, options ...NginxOpts) (*Nginx, error) {
//create random suffix
name := fmt.Sprintf("nginx-%s", utilrand.String(5))
n := &Nginx{
Namespace: namespace,
Name: name,
podSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"app": name}},
nodeSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{},
},
pingPodSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{},
},
client: kc,
}
//apply options
for _, option := range options {
if err := option(n); err != nil {
return nil, fmt.Errorf("error invalid options: %v", err)
}
}
var err error
defer func() {
if err != nil {
n.Delete()
}
}()
if err = n.newNginxDeployment(); err != nil {
return nil, fmt.Errorf("error creating deployment %s: %v", n.Name, err)
}
if err = n.newNginxService(); err != nil {
return nil, fmt.Errorf("error creating service %s: %v", n.Name, err)
}
if err = wait.PollImmediate(PollIntervalForNginx, PollTimeoutForNginx, func() (bool, error) {
d, err := kc.ExtensionsV1beta1().Deployments(n.Namespace).Get(context.TODO(), n.Name, metav1.GetOptions{})
if err != nil {
glog.Errorf("Error getting deployment %s: %v", n.Name, err)
return false, nil
}
if d.Status.UpdatedReplicas != d.Status.AvailableReplicas && d.Status.UnavailableReplicas != 0 {
return false, nil
}
//wait for all pods to enter running phase
pl, err := kc.CoreV1().Pods(n.Namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: metav1.FormatLabelSelector(n.podSelector),
})
if err != nil {
glog.Errorf("Error getting pods for deployment %s: %v", n.Name, err)
return false, nil
}
if len(pl.Items) == 0 {
return false, nil
}
var pods []*v1.Pod
for i := range pl.Items {
p := &pl.Items[i]
if p.Status.Phase != v1.PodRunning {
return false, nil
}
pods = append(pods, p)
}
n.Pods = pods
return true, nil
}); err != nil {
return nil, fmt.Errorf("deployment %s is not ready: %v", n.Name, err)
}
return n, nil
}
// WithNginxPingJobLabels adds custom labels for PinJob's pods.
// Affects only PingJob's pods.
func WithNginxPingJobLabels(labels map[string]string) NginxOpts {
return func(n *Nginx) error {
for k, v := range labels {
n.pingPodSelector.MatchLabels[k] = v
}
return nil
}
}
// IsReachable pings the nginx service.
// Expects the nginx service to be reachable.
func (n *Nginx) IsReachable() error {
if err := n.newPingPod(true); err != nil {
return fmt.Errorf("error svc wasn't reachable: %v", err)
}
return nil
}
// IsUnReachable pings the nginx service.
// Expects the nginx service to be unreachable.
func (n *Nginx) IsUnReachable() error {
if err := n.newPingPod(false); err != nil {
return fmt.Errorf("error svc was reachable: %v", err)
}
return nil
}
// Delete deletes the deployment and service
func (n *Nginx) Delete() error {
delPropPolicy := metav1.DeletePropagationForeground
if err := wait.PollImmediate(PollIntervalForNginx, PollTimeoutForNginx, func() (bool, error) {
if err := n.client.ExtensionsV1beta1().Deployments(n.Namespace).Delete(context.TODO(), n.Name, metav1.DeleteOptions{
PropagationPolicy: &delPropPolicy,
}); err != nil && !apierrors.IsNotFound(err) {
return false, nil
}
if err := n.client.CoreV1().Services(n.Namespace).Delete(context.TODO(), n.Name, metav1.DeleteOptions{
PropagationPolicy: &delPropPolicy,
}); err != nil && !apierrors.IsNotFound(err) {
return false, nil
}
return true, nil
}); err != nil {
return fmt.Errorf("error deleting %s deployment and service: %v", n.Name, err)
}
return nil
}
func (n *Nginx) newNginxDeployment() error {
var (
repl int32 = 2
cPort int32 = 80
)
d := &extensionsv1beta1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: n.Name,
Namespace: n.Namespace,
},
Spec: extensionsv1beta1.DeploymentSpec{
Replicas: &repl,
Selector: n.podSelector,
Template: v1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: n.podSelector.MatchLabels,
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "nginx",
Image: "nginx:1.12-alpine",
Ports: []v1.ContainerPort{
{
ContainerPort: cPort,
},
},
},
},
NodeSelector: n.nodeSelector.MatchLabels,
},
},
},
}
if _, err := n.client.ExtensionsV1beta1().Deployments(n.Namespace).Create(context.TODO(), d, metav1.CreateOptions{}); err != nil {
return err
}
return nil
}
func (n *Nginx) newNginxService() error {
var (
cPort int32 = 80
tPort int32 = 80
)
svc := &v1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: n.Name,
Namespace: n.Namespace,
},
Spec: v1.ServiceSpec{
Selector: n.podSelector.MatchLabels,
Ports: []v1.ServicePort{
{
Protocol: v1.ProtocolTCP,
Port: cPort,
TargetPort: intstr.FromInt(int(tPort)),
},
},
},
}
if _, err := n.client.CoreV1().Services(n.Namespace).Create(context.TODO(), svc, metav1.CreateOptions{}); err != nil {
return err
}
return nil
}
func (n *Nginx) newPingPod(reachable bool) error {
name := fmt.Sprintf("%s-ping-job-%s", n.Name, utilrand.String(5))
deadline := int64(PollTimeoutForNginx.Seconds())
cmd := fmt.Sprintf("wget --timeout 5 %s", n.Name)
if !reachable {
cmd = fmt.Sprintf("! %s", cmd)
}
runcmd := []string{"/bin/sh", "-c", cmd}
job := &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: n.Namespace,
},
Spec: batchv1.JobSpec{
ActiveDeadlineSeconds: &deadline,
gitextract_n2_dffvn/
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── Documentation/
│ ├── alpha-features.md
│ ├── design-principles.md
│ ├── development.md
│ ├── disaster-recovery.md
│ ├── network-requirements.md
│ ├── root-requirements.md
│ ├── upgrading.md
│ └── users-integrations.md
├── LICENSE
├── Makefile
├── NOTICE
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── RELEASING.md
├── ROADMAP.md
├── SECURITY_CONTACTS
├── bill-of-materials.json
├── build/
│ ├── README.md
│ ├── build-image.sh
│ ├── build-release.sh
│ └── git-version.sh
├── cmd/
│ ├── bootkube/
│ │ ├── main.go
│ │ ├── recover.go
│ │ ├── render.go
│ │ └── start.go
│ ├── checkpoint/
│ │ ├── README.md
│ │ └── main.go
│ └── render/
│ └── plugin/
│ └── default/
│ ├── asset/
│ │ ├── asset.go
│ │ ├── asset_test.go
│ │ ├── images.go
│ │ ├── internal/
│ │ │ └── templates.go
│ │ ├── k8s.go
│ │ └── tls.go
│ ├── main.go
│ └── render_test.go
├── code-of-conduct.md
├── e2e/
│ ├── README.md
│ ├── checkpointer_test.go
│ ├── deleteapi_test.go
│ ├── internal/
│ │ └── e2eutil/
│ │ ├── testworkload/
│ │ │ └── nginx_workload.go
│ │ └── utils/
│ │ └── utils.go
│ ├── main_test.go
│ ├── network_test.go
│ ├── node_test.go
│ ├── reboot_test.go
│ ├── required_imports.go
│ ├── smoke_test.go
│ └── ssh_client_test.go
├── go.mod
├── go.sum
├── hack/
│ ├── jenkins/
│ │ ├── README.md
│ │ ├── images/
│ │ │ └── bootkube-e2e/
│ │ │ └── Dockerfile
│ │ ├── jobs/
│ │ │ ├── bootkube_conformance_cncf.groovy
│ │ │ └── bootkube_e2e.groovy
│ │ ├── pipelines/
│ │ │ ├── bootkube-conformance/
│ │ │ │ └── Jenkinsfile
│ │ │ └── bootkube-e2e/
│ │ │ └── Jenkinsfile
│ │ └── scripts/
│ │ ├── conformance.sh
│ │ ├── e2e.sh
│ │ ├── gather-logs.sh
│ │ ├── tqs-down.sh
│ │ └── tqs-up.sh
│ ├── multi-node/
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── bootkube-test-recovery
│ │ ├── bootkube-up
│ │ ├── conformance-test.sh
│ │ ├── etcd-cloud-config.yaml
│ │ └── user-data.sample
│ ├── quickstart/
│ │ ├── .gitignore
│ │ ├── copylogs.sh
│ │ ├── init-master.sh
│ │ ├── init-node.sh
│ │ ├── kubelet.service
│ │ ├── quickstart-aws.md
│ │ ├── quickstart-gce.md
│ │ └── test.sh
│ ├── scripts/
│ │ └── gatherlogs
│ ├── single-node/
│ │ ├── README.md
│ │ ├── Vagrantfile
│ │ ├── bootkube-up
│ │ ├── conformance-test.sh
│ │ ├── user-data-etcd.sample
│ │ └── user-data.sample
│ ├── terraform-quickstart/
│ │ ├── README.md
│ │ ├── copylogs.sh
│ │ ├── environment_default.txt
│ │ ├── environment_e2e.txt
│ │ ├── genlogs.sh
│ │ ├── iam.tf
│ │ ├── main.tf
│ │ ├── network.tf
│ │ ├── outputs.tf
│ │ ├── run-conformance.sh
│ │ ├── start-cluster.sh
│ │ ├── terraform.tfvars.example
│ │ └── variables.tf
│ └── tests/
│ ├── conformance-gce.sh
│ └── conformance-test.sh
├── image/
│ ├── bootkube/
│ │ ├── Dockerfile
│ │ └── build-image.sh
│ └── checkpoint/
│ ├── Dockerfile
│ └── build-image.sh
├── pkg/
│ ├── bootkube/
│ │ ├── bootkube.go
│ │ ├── bootstrap.go
│ │ ├── bootstrap_test.go
│ │ ├── create.go
│ │ ├── create_test.go
│ │ └── status.go
│ ├── checkpoint/
│ │ ├── apiserver.go
│ │ ├── checkpoint.go
│ │ ├── config_map.go
│ │ ├── cri/
│ │ │ ├── README.md
│ │ │ ├── v1alpha1/
│ │ │ │ ├── api.pb.go
│ │ │ │ └── constants.go
│ │ │ └── v1alpha2/
│ │ │ ├── api.pb.go
│ │ │ └── constants.go
│ │ ├── internal/
│ │ │ ├── README.md
│ │ │ ├── util.go
│ │ │ └── util_unix.go
│ │ ├── kubelet.go
│ │ ├── manifest.go
│ │ ├── pod.go
│ │ ├── pod_test.go
│ │ ├── process.go
│ │ ├── process_test.go
│ │ ├── runtime_service.go
│ │ ├── secret.go
│ │ ├── state.go
│ │ └── state_test.go
│ ├── plugin/
│ │ └── plugin.go
│ ├── recovery/
│ │ ├── apiserver.go
│ │ ├── etcd.go
│ │ ├── etcd_template.go
│ │ ├── recover.go
│ │ ├── recover_test.go
│ │ └── util.go
│ ├── tlsutil/
│ │ └── tlsutil.go
│ ├── util/
│ │ └── log.go
│ └── version/
│ └── version.go
└── vendor/
├── github.com/
│ ├── coreos/
│ │ └── etcd/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── auth/
│ │ │ └── authpb/
│ │ │ ├── auth.pb.go
│ │ │ └── auth.proto
│ │ ├── clientv3/
│ │ │ ├── README.md
│ │ │ ├── auth.go
│ │ │ ├── client.go
│ │ │ ├── cluster.go
│ │ │ ├── compact_op.go
│ │ │ ├── compare.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── health_balancer.go
│ │ │ ├── kv.go
│ │ │ ├── lease.go
│ │ │ ├── logger.go
│ │ │ ├── maintenance.go
│ │ │ ├── op.go
│ │ │ ├── options.go
│ │ │ ├── ready_wait.go
│ │ │ ├── retry.go
│ │ │ ├── sort.go
│ │ │ ├── txn.go
│ │ │ └── watch.go
│ │ ├── etcdserver/
│ │ │ ├── api/
│ │ │ │ └── v3rpc/
│ │ │ │ └── rpctypes/
│ │ │ │ ├── doc.go
│ │ │ │ ├── error.go
│ │ │ │ └── md.go
│ │ │ └── etcdserverpb/
│ │ │ ├── etcdserver.pb.go
│ │ │ ├── etcdserver.proto
│ │ │ ├── raft_internal.pb.go
│ │ │ ├── raft_internal.proto
│ │ │ ├── raft_internal_stringer.go
│ │ │ ├── rpc.pb.go
│ │ │ └── rpc.proto
│ │ ├── mvcc/
│ │ │ └── mvccpb/
│ │ │ ├── kv.pb.go
│ │ │ └── kv.proto
│ │ └── pkg/
│ │ └── types/
│ │ ├── doc.go
│ │ ├── id.go
│ │ ├── set.go
│ │ ├── slice.go
│ │ ├── urls.go
│ │ └── urlsmap.go
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── LICENSE
│ │ └── spew/
│ │ ├── bypass.go
│ │ ├── bypasssafe.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── doc.go
│ │ ├── dump.go
│ │ ├── format.go
│ │ └── spew.go
│ ├── ghodss/
│ │ └── yaml/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── fields.go
│ │ └── yaml.go
│ ├── gogo/
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── gogoproto/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── gogo.pb.go
│ │ │ ├── gogo.pb.golden
│ │ │ ├── gogo.proto
│ │ │ └── helper.go
│ │ ├── proto/
│ │ │ ├── Makefile
│ │ │ ├── clone.go
│ │ │ ├── custom_gogo.go
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── duration.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gogo.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── extensions_gogo.go
│ │ │ ├── lib.go
│ │ │ ├── lib_gogo.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_reflect_gogo.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_gogo.go
│ │ │ ├── properties.go
│ │ │ ├── properties_gogo.go
│ │ │ ├── skip_gogo.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_marshal_gogo.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── table_unmarshal_gogo.go
│ │ │ ├── text.go
│ │ │ ├── text_gogo.go
│ │ │ ├── text_parser.go
│ │ │ ├── timestamp.go
│ │ │ ├── timestamp_gogo.go
│ │ │ ├── wrappers.go
│ │ │ └── wrappers_gogo.go
│ │ ├── protoc-gen-gogo/
│ │ │ └── descriptor/
│ │ │ ├── Makefile
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor.pb.go
│ │ │ ├── descriptor_gostring.gen.go
│ │ │ └── helper.go
│ │ └── sortkeys/
│ │ └── sortkeys.go
│ ├── golang/
│ │ ├── glog/
│ │ │ ├── LICENSE
│ │ │ ├── README
│ │ │ ├── glog.go
│ │ │ └── glog_file.go
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── proto/
│ │ │ ├── clone.go
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── encode.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── lib.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── properties.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── text.go
│ │ │ └── text_parser.go
│ │ └── ptypes/
│ │ ├── any/
│ │ │ ├── any.pb.go
│ │ │ └── any.proto
│ │ ├── any.go
│ │ ├── doc.go
│ │ ├── duration/
│ │ │ ├── duration.pb.go
│ │ │ └── duration.proto
│ │ ├── duration.go
│ │ ├── timestamp/
│ │ │ ├── timestamp.pb.go
│ │ │ └── timestamp.proto
│ │ └── timestamp.go
│ ├── google/
│ │ ├── btree/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── btree.go
│ │ └── gofuzz/
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── fuzz.go
│ │ └── go.mod
│ ├── googleapis/
│ │ └── gnostic/
│ │ ├── LICENSE
│ │ ├── OpenAPIv2/
│ │ │ ├── OpenAPIv2.go
│ │ │ ├── OpenAPIv2.pb.go
│ │ │ ├── OpenAPIv2.proto
│ │ │ ├── README.md
│ │ │ └── openapi-2.0.json
│ │ ├── compiler/
│ │ │ ├── README.md
│ │ │ ├── context.go
│ │ │ ├── error.go
│ │ │ ├── extension-handler.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ └── reader.go
│ │ └── extensions/
│ │ ├── COMPILE-EXTENSION.sh
│ │ ├── README.md
│ │ ├── extension.pb.go
│ │ ├── extension.proto
│ │ └── extensions.go
│ ├── gregjones/
│ │ └── httpcache/
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── diskcache/
│ │ │ └── diskcache.go
│ │ └── httpcache.go
│ ├── hashicorp/
│ │ └── golang-lru/
│ │ ├── .gitignore
│ │ ├── 2q.go
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── arc.go
│ │ ├── lru.go
│ │ └── simplelru/
│ │ └── lru.go
│ ├── imdario/
│ │ └── mergo/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ └── mergo.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── modern-go/
│ │ └── concurrent/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── executor.go
│ │ ├── go_above_19.go
│ │ ├── go_below_19.go
│ │ ├── log.go
│ │ ├── test.sh
│ │ └── unbounded_executor.go
│ ├── pborman/
│ │ └── uuid/
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── json.go
│ │ ├── node.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ └── version4.go
│ ├── peterbourgon/
│ │ └── diskv/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── compression.go
│ │ ├── diskv.go
│ │ └── index.go
│ └── spf13/
│ ├── cobra/
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── bash_completions.go
│ │ ├── bash_completions.md
│ │ ├── cobra.go
│ │ ├── command.go
│ │ ├── command_notwin.go
│ │ └── command_win.go
│ └── pflag/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE
│ ├── README.md
│ ├── bool.go
│ ├── bool_slice.go
│ ├── count.go
│ ├── duration.go
│ ├── flag.go
│ ├── float32.go
│ ├── float64.go
│ ├── golangflag.go
│ ├── int.go
│ ├── int32.go
│ ├── int64.go
│ ├── int8.go
│ ├── int_slice.go
│ ├── ip.go
│ ├── ip_slice.go
│ ├── ipmask.go
│ ├── ipnet.go
│ ├── string.go
│ ├── string_array.go
│ ├── string_slice.go
│ ├── uint.go
│ ├── uint16.go
│ ├── uint32.go
│ ├── uint64.go
│ ├── uint8.go
│ └── uint_slice.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── curve25519/
│ │ │ ├── const_amd64.h
│ │ │ ├── const_amd64.s
│ │ │ ├── cswap_amd64.s
│ │ │ ├── curve25519.go
│ │ │ ├── doc.go
│ │ │ ├── freeze_amd64.s
│ │ │ ├── ladderstep_amd64.s
│ │ │ ├── mont25519_amd64.go
│ │ │ ├── mul_amd64.s
│ │ │ └── square_amd64.s
│ │ ├── ed25519/
│ │ │ ├── ed25519.go
│ │ │ └── internal/
│ │ │ └── edwards25519/
│ │ │ ├── const.go
│ │ │ └── edwards25519.go
│ │ ├── internal/
│ │ │ ├── chacha20/
│ │ │ │ ├── asm_arm64.s
│ │ │ │ ├── chacha_arm64.go
│ │ │ │ ├── chacha_generic.go
│ │ │ │ ├── chacha_noasm.go
│ │ │ │ ├── chacha_s390x.go
│ │ │ │ ├── chacha_s390x.s
│ │ │ │ └── xor.go
│ │ │ └── subtle/
│ │ │ ├── aliasing.go
│ │ │ └── aliasing_appengine.go
│ │ ├── poly1305/
│ │ │ ├── mac_noasm.go
│ │ │ ├── poly1305.go
│ │ │ ├── sum_amd64.go
│ │ │ ├── sum_amd64.s
│ │ │ ├── sum_arm.go
│ │ │ ├── sum_arm.s
│ │ │ ├── sum_generic.go
│ │ │ ├── sum_noasm.go
│ │ │ ├── sum_s390x.go
│ │ │ ├── sum_s390x.s
│ │ │ └── sum_vmsl_s390x.s
│ │ └── ssh/
│ │ ├── agent/
│ │ │ ├── client.go
│ │ │ ├── forward.go
│ │ │ ├── keyring.go
│ │ │ └── server.go
│ │ ├── buffer.go
│ │ ├── certs.go
│ │ ├── channel.go
│ │ ├── cipher.go
│ │ ├── client.go
│ │ ├── client_auth.go
│ │ ├── common.go
│ │ ├── connection.go
│ │ ├── doc.go
│ │ ├── handshake.go
│ │ ├── kex.go
│ │ ├── keys.go
│ │ ├── mac.go
│ │ ├── messages.go
│ │ ├── mux.go
│ │ ├── server.go
│ │ ├── session.go
│ │ ├── streamlocal.go
│ │ ├── tcpip.go
│ │ ├── terminal/
│ │ │ ├── terminal.go
│ │ │ ├── util.go
│ │ │ ├── util_aix.go
│ │ │ ├── util_bsd.go
│ │ │ ├── util_linux.go
│ │ │ ├── util_plan9.go
│ │ │ ├── util_solaris.go
│ │ │ └── util_windows.go
│ │ └── transport.go
│ ├── net/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── context/
│ │ │ ├── context.go
│ │ │ ├── ctxhttp/
│ │ │ │ └── ctxhttp.go
│ │ │ ├── go17.go
│ │ │ ├── go19.go
│ │ │ ├── pre_go17.go
│ │ │ └── pre_go19.go
│ │ ├── http/
│ │ │ └── httpguts/
│ │ │ ├── guts.go
│ │ │ └── httplex.go
│ │ ├── http2/
│ │ │ ├── .gitignore
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── go111.go
│ │ │ ├── gotrack.go
│ │ │ ├── headermap.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── not_go111.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── transport.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority.go
│ │ │ └── writesched_random.go
│ │ ├── idna/
│ │ │ ├── idna10.0.0.go
│ │ │ ├── idna9.0.0.go
│ │ │ ├── punycode.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── trie.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ └── trace/
│ │ ├── events.go
│ │ ├── histogram.go
│ │ └── trace.go
│ ├── oauth2/
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── internal/
│ │ │ ├── client_appengine.go
│ │ │ ├── doc.go
│ │ │ ├── oauth2.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── oauth2.go
│ │ ├── token.go
│ │ └── transport.go
│ ├── sys/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── cpu/
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── byteorder.go
│ │ │ ├── cpu.go
│ │ │ ├── cpu_aix_ppc64.go
│ │ │ ├── cpu_arm.go
│ │ │ ├── cpu_gc_s390x.go
│ │ │ ├── cpu_gc_x86.go
│ │ │ ├── cpu_gccgo.c
│ │ │ ├── cpu_gccgo.go
│ │ │ ├── cpu_gccgo_s390x.go
│ │ │ ├── cpu_linux.go
│ │ │ ├── cpu_linux_arm64.go
│ │ │ ├── cpu_linux_ppc64x.go
│ │ │ ├── cpu_linux_s390x.go
│ │ │ ├── cpu_mips64x.go
│ │ │ ├── cpu_mipsx.go
│ │ │ ├── cpu_other_arm64.go
│ │ │ ├── cpu_s390x.s
│ │ │ ├── cpu_wasm.go
│ │ │ ├── cpu_x86.go
│ │ │ ├── cpu_x86.s
│ │ │ └── syscall_aix_ppc64_gc.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_darwin_386.s
│ │ │ ├── asm_darwin_amd64.s
│ │ │ ├── asm_darwin_arm.s
│ │ │ ├── asm_darwin_arm64.s
│ │ │ ├── asm_dragonfly_amd64.s
│ │ │ ├── asm_freebsd_386.s
│ │ │ ├── asm_freebsd_amd64.s
│ │ │ ├── asm_freebsd_arm.s
│ │ │ ├── asm_freebsd_arm64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_netbsd_386.s
│ │ │ ├── asm_netbsd_amd64.s
│ │ │ ├── asm_netbsd_arm.s
│ │ │ ├── asm_netbsd_arm64.s
│ │ │ ├── asm_openbsd_386.s
│ │ │ ├── asm_openbsd_amd64.s
│ │ │ ├── asm_openbsd_arm.s
│ │ │ ├── asm_openbsd_arm64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── errors_freebsd_386.go
│ │ │ ├── errors_freebsd_amd64.go
│ │ │ ├── errors_freebsd_arm.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ioctl.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_386.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_386.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zptrace386_linux.go
│ │ │ ├── zptracearm_linux.go
│ │ │ ├── zptracemips_linux.go
│ │ │ ├── zptracemipsle_linux.go
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_386.1_11.go
│ │ │ ├── zsyscall_darwin_386.go
│ │ │ ├── zsyscall_darwin_386.s
│ │ │ ├── zsyscall_darwin_amd64.1_11.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm.1_11.go
│ │ │ ├── zsyscall_darwin_arm.go
│ │ │ ├── zsyscall_darwin_arm.s
│ │ │ ├── zsyscall_darwin_arm64.1_11.go
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysnum_darwin_386.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_386.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ └── ztypes_solaris_amd64.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── asm_windows_386.s
│ │ ├── asm_windows_amd64.s
│ │ ├── asm_windows_arm.s
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── text/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ ├── bidirule.go
│ │ │ ├── bidirule10.0.0.go
│ │ │ └── bidirule9.0.0.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ └── norm/
│ │ ├── composition.go
│ │ ├── forminfo.go
│ │ ├── input.go
│ │ ├── iter.go
│ │ ├── normalize.go
│ │ ├── readwriter.go
│ │ ├── tables10.0.0.go
│ │ ├── tables9.0.0.go
│ │ ├── transform.go
│ │ └── trie.go
│ └── time/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ └── rate/
│ ├── rate.go
│ ├── rate_go16.go
│ └── rate_go17.go
├── google.golang.org/
│ ├── appengine/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ ├── api.go
│ │ │ ├── api_classic.go
│ │ │ ├── api_common.go
│ │ │ ├── app_id.go
│ │ │ ├── base/
│ │ │ │ ├── api_base.pb.go
│ │ │ │ └── api_base.proto
│ │ │ ├── datastore/
│ │ │ │ ├── datastore_v3.pb.go
│ │ │ │ └── datastore_v3.proto
│ │ │ ├── identity.go
│ │ │ ├── identity_classic.go
│ │ │ ├── identity_flex.go
│ │ │ ├── identity_vm.go
│ │ │ ├── internal.go
│ │ │ ├── log/
│ │ │ │ ├── log_service.pb.go
│ │ │ │ └── log_service.proto
│ │ │ ├── main.go
│ │ │ ├── main_common.go
│ │ │ ├── main_vm.go
│ │ │ ├── metadata.go
│ │ │ ├── net.go
│ │ │ ├── regen.sh
│ │ │ ├── remote_api/
│ │ │ │ ├── remote_api.pb.go
│ │ │ │ └── remote_api.proto
│ │ │ ├── transaction.go
│ │ │ └── urlfetch/
│ │ │ ├── urlfetch_service.pb.go
│ │ │ └── urlfetch_service.proto
│ │ └── urlfetch/
│ │ └── urlfetch.go
│ ├── genproto/
│ │ ├── LICENSE
│ │ └── googleapis/
│ │ └── rpc/
│ │ └── status/
│ │ └── status.pb.go
│ └── grpc/
│ ├── .travis.yml
│ ├── AUTHORS
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── backoff.go
│ ├── balancer/
│ │ ├── balancer.go
│ │ ├── base/
│ │ │ ├── balancer.go
│ │ │ └── base.go
│ │ └── roundrobin/
│ │ └── roundrobin.go
│ ├── balancer.go
│ ├── balancer_conn_wrappers.go
│ ├── balancer_v1_wrapper.go
│ ├── binarylog/
│ │ └── grpc_binarylog_v1/
│ │ └── binarylog.pb.go
│ ├── call.go
│ ├── clientconn.go
│ ├── codec.go
│ ├── codegen.sh
│ ├── codes/
│ │ ├── code_string.go
│ │ └── codes.go
│ ├── connectivity/
│ │ └── connectivity.go
│ ├── credentials/
│ │ ├── credentials.go
│ │ ├── internal/
│ │ │ ├── syscallconn.go
│ │ │ └── syscallconn_appengine.go
│ │ └── tls13.go
│ ├── dialoptions.go
│ ├── doc.go
│ ├── encoding/
│ │ ├── encoding.go
│ │ └── proto/
│ │ └── proto.go
│ ├── go.mod
│ ├── go.sum
│ ├── grpclog/
│ │ ├── grpclog.go
│ │ ├── logger.go
│ │ └── loggerv2.go
│ ├── health/
│ │ └── grpc_health_v1/
│ │ └── health.pb.go
│ ├── install_gae.sh
│ ├── interceptor.go
│ ├── internal/
│ │ ├── backoff/
│ │ │ └── backoff.go
│ │ ├── binarylog/
│ │ │ ├── binarylog.go
│ │ │ ├── binarylog_testutil.go
│ │ │ ├── env_config.go
│ │ │ ├── method_logger.go
│ │ │ ├── regenerate.sh
│ │ │ ├── sink.go
│ │ │ └── util.go
│ │ ├── channelz/
│ │ │ ├── funcs.go
│ │ │ ├── types.go
│ │ │ ├── types_linux.go
│ │ │ ├── types_nonlinux.go
│ │ │ ├── util_linux.go
│ │ │ └── util_nonlinux.go
│ │ ├── envconfig/
│ │ │ └── envconfig.go
│ │ ├── grpcrand/
│ │ │ └── grpcrand.go
│ │ ├── grpcsync/
│ │ │ └── event.go
│ │ ├── internal.go
│ │ ├── syscall/
│ │ │ ├── syscall_linux.go
│ │ │ └── syscall_nonlinux.go
│ │ └── transport/
│ │ ├── bdp_estimator.go
│ │ ├── controlbuf.go
│ │ ├── defaults.go
│ │ ├── flowcontrol.go
│ │ ├── handler_server.go
│ │ ├── http2_client.go
│ │ ├── http2_server.go
│ │ ├── http_util.go
│ │ ├── log.go
│ │ └── transport.go
│ ├── keepalive/
│ │ └── keepalive.go
│ ├── metadata/
│ │ └── metadata.go
│ ├── naming/
│ │ ├── dns_resolver.go
│ │ └── naming.go
│ ├── peer/
│ │ └── peer.go
│ ├── picker_wrapper.go
│ ├── pickfirst.go
│ ├── proxy.go
│ ├── resolver/
│ │ ├── dns/
│ │ │ └── dns_resolver.go
│ │ ├── passthrough/
│ │ │ └── passthrough.go
│ │ └── resolver.go
│ ├── resolver_conn_wrapper.go
│ ├── rpc_util.go
│ ├── server.go
│ ├── service_config.go
│ ├── stats/
│ │ ├── handlers.go
│ │ └── stats.go
│ ├── status/
│ │ └── status.go
│ ├── stream.go
│ ├── tap/
│ │ └── tap.go
│ ├── trace.go
│ ├── version.go
│ └── vet.sh
├── gopkg.in/
│ ├── inf.v0/
│ │ ├── LICENSE
│ │ ├── dec.go
│ │ └── rounder.go
│ └── yaml.v2/
│ ├── .travis.yml
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── go.mod
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── k8s.io/
│ ├── api/
│ │ ├── LICENSE
│ │ ├── admissionregistration/
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── apps/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta2/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── auditregistration/
│ │ │ └── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── authentication/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── authorization/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── autoscaling/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v2beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v2beta2/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── batch/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v2alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── certificates/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── coordination/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── core/
│ │ │ └── v1/
│ │ │ ├── annotation_key_constants.go
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── objectreference.go
│ │ │ ├── register.go
│ │ │ ├── resource.go
│ │ │ ├── taint.go
│ │ │ ├── toleration.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── events/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── extensions/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── networking/
│ │ │ └── v1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── policy/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── rbac/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── scheduling/
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── settings/
│ │ │ └── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── storage/
│ │ ├── v1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── v1alpha1/
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_swagger_doc_generated.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── v1beta1/
│ │ ├── doc.go
│ │ ├── generated.pb.go
│ │ ├── generated.proto
│ │ ├── register.go
│ │ ├── types.go
│ │ ├── types_swagger_doc_generated.go
│ │ └── zz_generated.deepcopy.go
│ ├── apiextensions-apiserver/
│ │ ├── LICENSE
│ │ └── pkg/
│ │ └── apis/
│ │ └── apiextensions/
│ │ ├── deepcopy.go
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── register.go
│ │ ├── types.go
│ │ ├── types_jsonschema.go
│ │ ├── v1beta1/
│ │ │ ├── conversion.go
│ │ │ ├── deepcopy.go
│ │ │ ├── defaults.go
│ │ │ ├── doc.go
│ │ │ ├── generated.pb.go
│ │ │ ├── generated.proto
│ │ │ ├── marshal.go
│ │ │ ├── register.go
│ │ │ ├── types.go
│ │ │ ├── types_jsonschema.go
│ │ │ ├── zz_generated.conversion.go
│ │ │ ├── zz_generated.deepcopy.go
│ │ │ └── zz_generated.defaults.go
│ │ └── zz_generated.deepcopy.go
│ ├── apimachinery/
│ │ ├── LICENSE
│ │ ├── pkg/
│ │ │ ├── api/
│ │ │ │ ├── equality/
│ │ │ │ │ └── semantic.go
│ │ │ │ ├── errors/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── meta/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── firsthit_restmapper.go
│ │ │ │ │ ├── help.go
│ │ │ │ │ ├── interfaces.go
│ │ │ │ │ ├── lazy.go
│ │ │ │ │ ├── meta.go
│ │ │ │ │ ├── multirestmapper.go
│ │ │ │ │ ├── priority.go
│ │ │ │ │ └── restmapper.go
│ │ │ │ └── resource/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── amount.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── math.go
│ │ │ │ ├── quantity.go
│ │ │ │ ├── quantity_proto.go
│ │ │ │ ├── scale_int.go
│ │ │ │ ├── suffix.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── apis/
│ │ │ │ └── meta/
│ │ │ │ ├── internalversion/
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ ├── v1/
│ │ │ │ │ ├── OWNERS
│ │ │ │ │ ├── controller_ref.go
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── duration.go
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ ├── group_version.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── labels.go
│ │ │ │ │ ├── meta.go
│ │ │ │ │ ├── micro_time.go
│ │ │ │ │ ├── micro_time_proto.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── time.go
│ │ │ │ │ ├── time_proto.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ │ ├── unstructured/
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ ├── unstructured.go
│ │ │ │ │ │ ├── unstructured_list.go
│ │ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ │ ├── watch.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── conversion.go
│ │ │ │ ├── deepcopy.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_swagger_doc_generated.go
│ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ └── zz_generated.defaults.go
│ │ │ ├── conversion/
│ │ │ │ ├── converter.go
│ │ │ │ ├── deep_equal.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── helper.go
│ │ │ │ └── queryparams/
│ │ │ │ ├── convert.go
│ │ │ │ └── doc.go
│ │ │ ├── fields/
│ │ │ │ ├── doc.go
│ │ │ │ ├── fields.go
│ │ │ │ ├── requirements.go
│ │ │ │ └── selector.go
│ │ │ ├── labels/
│ │ │ │ ├── doc.go
│ │ │ │ ├── labels.go
│ │ │ │ ├── selector.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── runtime/
│ │ │ │ ├── codec.go
│ │ │ │ ├── codec_check.go
│ │ │ │ ├── conversion.go
│ │ │ │ ├── converter.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── embedded.go
│ │ │ │ ├── error.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── generated.pb.go
│ │ │ │ ├── generated.proto
│ │ │ │ ├── helper.go
│ │ │ │ ├── interfaces.go
│ │ │ │ ├── register.go
│ │ │ │ ├── schema/
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ ├── group_version.go
│ │ │ │ │ └── interfaces.go
│ │ │ │ ├── scheme.go
│ │ │ │ ├── scheme_builder.go
│ │ │ │ ├── serializer/
│ │ │ │ │ ├── codec_factory.go
│ │ │ │ │ ├── json/
│ │ │ │ │ │ ├── json.go
│ │ │ │ │ │ └── meta.go
│ │ │ │ │ ├── negotiated_codec.go
│ │ │ │ │ ├── protobuf/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ └── protobuf.go
│ │ │ │ │ ├── protobuf_extension.go
│ │ │ │ │ ├── recognizer/
│ │ │ │ │ │ └── recognizer.go
│ │ │ │ │ ├── streaming/
│ │ │ │ │ │ └── streaming.go
│ │ │ │ │ └── versioning/
│ │ │ │ │ └── versioning.go
│ │ │ │ ├── swagger_doc_generator.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_proto.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ ├── selection/
│ │ │ │ └── operator.go
│ │ │ ├── types/
│ │ │ │ ├── doc.go
│ │ │ │ ├── namespacedname.go
│ │ │ │ ├── nodename.go
│ │ │ │ ├── patch.go
│ │ │ │ └── uid.go
│ │ │ ├── util/
│ │ │ │ ├── cache/
│ │ │ │ │ ├── cache.go
│ │ │ │ │ └── lruexpirecache.go
│ │ │ │ ├── clock/
│ │ │ │ │ └── clock.go
│ │ │ │ ├── diff/
│ │ │ │ │ └── diff.go
│ │ │ │ ├── errors/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── framer/
│ │ │ │ │ └── framer.go
│ │ │ │ ├── intstr/
│ │ │ │ │ ├── generated.pb.go
│ │ │ │ │ ├── generated.proto
│ │ │ │ │ └── intstr.go
│ │ │ │ ├── json/
│ │ │ │ │ └── json.go
│ │ │ │ ├── naming/
│ │ │ │ │ └── from_stack.go
│ │ │ │ ├── net/
│ │ │ │ │ ├── http.go
│ │ │ │ │ ├── interface.go
│ │ │ │ │ ├── port_range.go
│ │ │ │ │ ├── port_split.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── rand/
│ │ │ │ │ └── rand.go
│ │ │ │ ├── runtime/
│ │ │ │ │ └── runtime.go
│ │ │ │ ├── sets/
│ │ │ │ │ ├── byte.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── empty.go
│ │ │ │ │ ├── int.go
│ │ │ │ │ ├── int64.go
│ │ │ │ │ └── string.go
│ │ │ │ ├── validation/
│ │ │ │ │ ├── field/
│ │ │ │ │ │ ├── errors.go
│ │ │ │ │ │ └── path.go
│ │ │ │ │ └── validation.go
│ │ │ │ ├── wait/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── wait.go
│ │ │ │ └── yaml/
│ │ │ │ └── decoder.go
│ │ │ ├── version/
│ │ │ │ ├── doc.go
│ │ │ │ ├── helpers.go
│ │ │ │ └── types.go
│ │ │ └── watch/
│ │ │ ├── doc.go
│ │ │ ├── filter.go
│ │ │ ├── mux.go
│ │ │ ├── streamwatcher.go
│ │ │ ├── watch.go
│ │ │ └── zz_generated.deepcopy.go
│ │ └── third_party/
│ │ └── forked/
│ │ └── golang/
│ │ └── reflect/
│ │ └── deep_equal.go
│ ├── client-go/
│ │ ├── LICENSE
│ │ ├── discovery/
│ │ │ ├── cached_discovery.go
│ │ │ ├── discovery_client.go
│ │ │ ├── doc.go
│ │ │ ├── helper.go
│ │ │ └── round_tripper.go
│ │ ├── kubernetes/
│ │ │ ├── clientset.go
│ │ │ ├── doc.go
│ │ │ ├── import.go
│ │ │ ├── scheme/
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ └── typed/
│ │ │ ├── admissionregistration/
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── admissionregistration_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── initializerconfiguration.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── admissionregistration_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── mutatingwebhookconfiguration.go
│ │ │ │ └── validatingwebhookconfiguration.go
│ │ │ ├── apps/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── apps_client.go
│ │ │ │ │ ├── controllerrevision.go
│ │ │ │ │ ├── daemonset.go
│ │ │ │ │ ├── deployment.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── replicaset.go
│ │ │ │ │ └── statefulset.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── apps_client.go
│ │ │ │ │ ├── controllerrevision.go
│ │ │ │ │ ├── deployment.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── statefulset.go
│ │ │ │ └── v1beta2/
│ │ │ │ ├── apps_client.go
│ │ │ │ ├── controllerrevision.go
│ │ │ │ ├── daemonset.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── replicaset.go
│ │ │ │ └── statefulset.go
│ │ │ ├── auditregistration/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── auditregistration_client.go
│ │ │ │ ├── auditsink.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── authentication/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── authentication_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── tokenreview.go
│ │ │ │ │ └── tokenreview_expansion.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── authentication_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── tokenreview.go
│ │ │ │ └── tokenreview_expansion.go
│ │ │ ├── authorization/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── authorization_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── localsubjectaccessreview.go
│ │ │ │ │ ├── localsubjectaccessreview_expansion.go
│ │ │ │ │ ├── selfsubjectaccessreview.go
│ │ │ │ │ ├── selfsubjectaccessreview_expansion.go
│ │ │ │ │ ├── selfsubjectrulesreview.go
│ │ │ │ │ ├── selfsubjectrulesreview_expansion.go
│ │ │ │ │ ├── subjectaccessreview.go
│ │ │ │ │ └── subjectaccessreview_expansion.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── authorization_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── localsubjectaccessreview.go
│ │ │ │ ├── localsubjectaccessreview_expansion.go
│ │ │ │ ├── selfsubjectaccessreview.go
│ │ │ │ ├── selfsubjectaccessreview_expansion.go
│ │ │ │ ├── selfsubjectrulesreview.go
│ │ │ │ ├── selfsubjectrulesreview_expansion.go
│ │ │ │ ├── subjectaccessreview.go
│ │ │ │ └── subjectaccessreview_expansion.go
│ │ │ ├── autoscaling/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── autoscaling_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── horizontalpodautoscaler.go
│ │ │ │ ├── v2beta1/
│ │ │ │ │ ├── autoscaling_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── horizontalpodautoscaler.go
│ │ │ │ └── v2beta2/
│ │ │ │ ├── autoscaling_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ └── horizontalpodautoscaler.go
│ │ │ ├── batch/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── batch_client.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ └── job.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── batch_client.go
│ │ │ │ │ ├── cronjob.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ └── generated_expansion.go
│ │ │ │ └── v2alpha1/
│ │ │ │ ├── batch_client.go
│ │ │ │ ├── cronjob.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── certificates/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── certificates_client.go
│ │ │ │ ├── certificatesigningrequest.go
│ │ │ │ ├── certificatesigningrequest_expansion.go
│ │ │ │ ├── doc.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── coordination/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── coordination_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ └── lease.go
│ │ │ ├── core/
│ │ │ │ └── v1/
│ │ │ │ ├── componentstatus.go
│ │ │ │ ├── configmap.go
│ │ │ │ ├── core_client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── endpoints.go
│ │ │ │ ├── event.go
│ │ │ │ ├── event_expansion.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── limitrange.go
│ │ │ │ ├── namespace.go
│ │ │ │ ├── namespace_expansion.go
│ │ │ │ ├── node.go
│ │ │ │ ├── node_expansion.go
│ │ │ │ ├── persistentvolume.go
│ │ │ │ ├── persistentvolumeclaim.go
│ │ │ │ ├── pod.go
│ │ │ │ ├── pod_expansion.go
│ │ │ │ ├── podtemplate.go
│ │ │ │ ├── replicationcontroller.go
│ │ │ │ ├── resourcequota.go
│ │ │ │ ├── secret.go
│ │ │ │ ├── service.go
│ │ │ │ ├── service_expansion.go
│ │ │ │ ├── serviceaccount.go
│ │ │ │ └── serviceaccount_expansion.go
│ │ │ ├── events/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── events_client.go
│ │ │ │ └── generated_expansion.go
│ │ │ ├── extensions/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── daemonset.go
│ │ │ │ ├── deployment.go
│ │ │ │ ├── deployment_expansion.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── extensions_client.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── ingress.go
│ │ │ │ ├── podsecuritypolicy.go
│ │ │ │ └── replicaset.go
│ │ │ ├── networking/
│ │ │ │ └── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── networking_client.go
│ │ │ │ └── networkpolicy.go
│ │ │ ├── policy/
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── eviction.go
│ │ │ │ ├── eviction_expansion.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── poddisruptionbudget.go
│ │ │ │ ├── podsecuritypolicy.go
│ │ │ │ └── policy_client.go
│ │ │ ├── rbac/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── clusterrole.go
│ │ │ │ │ ├── clusterrolebinding.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── rbac_client.go
│ │ │ │ │ ├── role.go
│ │ │ │ │ └── rolebinding.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── clusterrole.go
│ │ │ │ │ ├── clusterrolebinding.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── rbac_client.go
│ │ │ │ │ ├── role.go
│ │ │ │ │ └── rolebinding.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── clusterrole.go
│ │ │ │ ├── clusterrolebinding.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── rbac_client.go
│ │ │ │ ├── role.go
│ │ │ │ └── rolebinding.go
│ │ │ ├── scheduling/
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── generated_expansion.go
│ │ │ │ │ ├── priorityclass.go
│ │ │ │ │ └── scheduling_client.go
│ │ │ │ └── v1beta1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── priorityclass.go
│ │ │ │ └── scheduling_client.go
│ │ │ ├── settings/
│ │ │ │ └── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── podpreset.go
│ │ │ │ └── settings_client.go
│ │ │ └── storage/
│ │ │ ├── v1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── storage_client.go
│ │ │ │ ├── storageclass.go
│ │ │ │ └── volumeattachment.go
│ │ │ ├── v1alpha1/
│ │ │ │ ├── doc.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── storage_client.go
│ │ │ │ └── volumeattachment.go
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── generated_expansion.go
│ │ │ ├── storage_client.go
│ │ │ ├── storageclass.go
│ │ │ └── volumeattachment.go
│ │ ├── pkg/
│ │ │ ├── apis/
│ │ │ │ └── clientauthentication/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── doc.go
│ │ │ │ ├── register.go
│ │ │ │ ├── types.go
│ │ │ │ ├── v1alpha1/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ ├── v1beta1/
│ │ │ │ │ ├── conversion.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── zz_generated.conversion.go
│ │ │ │ │ ├── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.defaults.go
│ │ │ │ └── zz_generated.deepcopy.go
│ │ │ └── version/
│ │ │ ├── .gitattributes
│ │ │ ├── base.go
│ │ │ ├── def.bzl
│ │ │ ├── doc.go
│ │ │ └── version.go
│ │ ├── plugin/
│ │ │ └── pkg/
│ │ │ └── client/
│ │ │ └── auth/
│ │ │ └── exec/
│ │ │ └── exec.go
│ │ ├── rest/
│ │ │ ├── OWNERS
│ │ │ ├── client.go
│ │ │ ├── config.go
│ │ │ ├── plugin.go
│ │ │ ├── request.go
│ │ │ ├── transport.go
│ │ │ ├── url_utils.go
│ │ │ ├── urlbackoff.go
│ │ │ ├── watch/
│ │ │ │ ├── decoder.go
│ │ │ │ └── encoder.go
│ │ │ └── zz_generated.deepcopy.go
│ │ ├── tools/
│ │ │ ├── auth/
│ │ │ │ ├── OWNERS
│ │ │ │ └── clientauth.go
│ │ │ ├── cache/
│ │ │ │ ├── OWNERS
│ │ │ │ ├── controller.go
│ │ │ │ ├── delta_fifo.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── expiration_cache.go
│ │ │ │ ├── expiration_cache_fakes.go
│ │ │ │ ├── fake_custom_store.go
│ │ │ │ ├── fifo.go
│ │ │ │ ├── heap.go
│ │ │ │ ├── index.go
│ │ │ │ ├── listers.go
│ │ │ │ ├── listwatch.go
│ │ │ │ ├── mutation_cache.go
│ │ │ │ ├── mutation_detector.go
│ │ │ │ ├── reflector.go
│ │ │ │ ├── reflector_metrics.go
│ │ │ │ ├── shared_informer.go
│ │ │ │ ├── store.go
│ │ │ │ ├── thread_safe_store.go
│ │ │ │ └── undelta_store.go
│ │ │ ├── clientcmd/
│ │ │ │ ├── api/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── latest/
│ │ │ │ │ │ └── latest.go
│ │ │ │ │ ├── register.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── v1/
│ │ │ │ │ │ ├── conversion.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── register.go
│ │ │ │ │ │ ├── types.go
│ │ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ │ └── zz_generated.deepcopy.go
│ │ │ │ ├── auth_loaders.go
│ │ │ │ ├── client_config.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── flag.go
│ │ │ │ ├── helpers.go
│ │ │ │ ├── loader.go
│ │ │ │ ├── merged_client_builder.go
│ │ │ │ ├── overrides.go
│ │ │ │ └── validation.go
│ │ │ ├── metrics/
│ │ │ │ ├── OWNERS
│ │ │ │ └── metrics.go
│ │ │ ├── pager/
│ │ │ │ └── pager.go
│ │ │ └── reference/
│ │ │ └── ref.go
│ │ ├── transport/
│ │ │ ├── OWNERS
│ │ │ ├── cache.go
│ │ │ ├── config.go
│ │ │ ├── round_trippers.go
│ │ │ ├── token_source.go
│ │ │ └── transport.go
│ │ └── util/
│ │ ├── buffer/
│ │ │ └── ring_growing.go
│ │ ├── cert/
│ │ │ ├── OWNERS
│ │ │ ├── cert.go
│ │ │ ├── csr.go
│ │ │ ├── io.go
│ │ │ └── pem.go
│ │ ├── connrotation/
│ │ │ └── connrotation.go
│ │ ├── flowcontrol/
│ │ │ ├── backoff.go
│ │ │ └── throttle.go
│ │ ├── homedir/
│ │ │ └── homedir.go
│ │ ├── integer/
│ │ │ └── integer.go
│ │ └── retry/
│ │ ├── OWNERS
│ │ └── util.go
│ └── klog/
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── OWNERS
│ ├── README.md
│ ├── RELEASE.md
│ ├── SECURITY_CONTACTS
│ ├── code-of-conduct.md
│ ├── klog.go
│ └── klog_file.go
├── modules.txt
└── sigs.k8s.io/
└── yaml/
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── OWNERS
├── README.md
├── RELEASE.md
├── SECURITY_CONTACTS
├── code-of-conduct.md
├── fields.go
├── yaml.go
└── yaml_go110.go
Copy disabled (too large)
Download .txt
Showing preview only (12,102K chars total). Download the full file to get everything.
SYMBOL INDEX (143730 symbols across 1296 files)
FILE: cmd/bootkube/main.go
function main (line 33) | func main() {
FILE: cmd/bootkube/recover.go
function init (line 43) | func init() {
function runCmdRecover (line 55) | func runCmdRecover(cmd *cobra.Command, args []string) error {
function validateRecoverOpts (line 87) | func validateRecoverOpts(cmd *cobra.Command, args []string) error {
function createEtcdClient (line 103) | func createEtcdClient() (*clientv3.Client, error) {
FILE: cmd/bootkube/render.go
function init (line 29) | func init() {
function runCmdRender (line 40) | func runCmdRender(cmd *cobra.Command, args []string) error {
FILE: cmd/bootkube/start.go
function init (line 38) | func init() {
function runCmdStart (line 46) | func runCmdStart(cmd *cobra.Command, args []string) error {
function validateStartOpts (line 65) | func validateStartOpts(cmd *cobra.Command, args []string) error {
FILE: cmd/checkpoint/main.go
constant nodeNameEnv (line 17) | nodeNameEnv = "NODE_NAME"
constant podNameEnv (line 18) | podNameEnv = "POD_NAME"
constant podNamespaceEnv (line 19) | podNamespaceEnv = "POD_NAMESPACE"
constant defaultRuntimeEndpoint (line 21) | defaultRuntimeEndpoint = "unix:///var/run/dockershim.sock"
constant defaultRuntimeRequestTimeout (line 22) | defaultRuntimeRequestTimeout = 2 * time.Minute
constant defaultCheckpointGracePeriod (line 23) | defaultCheckpointGracePeriod = 1 * time.Minute
function init (line 34) | func init() {
function main (line 43) | func main() {
function flock (line 85) | func flock(path string) error {
function readDownwardAPI (line 98) | func readDownwardAPI() (nodeName, podName, podNamespace string, err erro...
FILE: cmd/render/plugin/default/asset/asset.go
constant AssetPathSecrets (line 21) | AssetPathSecrets = "tls"
constant AssetPathCAKey (line 22) | AssetPathCAKey = "tls/ca.key"
constant AssetPathCACert (line 23) | AssetPathCACert = "tls/ca.crt"
constant AssetPathAPIServerKey (line 24) | AssetPathAPIServerKey = "tls/apiserver.key"
constant AssetPathAPIServerCert (line 25) | AssetPathAPIServerCert = "tls/apiserver.crt"
constant AssetPathEtcdClientCA (line 26) | AssetPathEtcdClientCA = "tls/etcd-client-ca.crt"
constant AssetPathEtcdClientCert (line 27) | AssetPathEtcdClientCert = "tls/etcd-client.crt"
constant AssetPathEtcdClientKey (line 28) | AssetPathEtcdClientKey = "tls/etcd-client.key"
constant AssetPathEtcdServerCA (line 29) | AssetPathEtcdServerCA = "tls/etcd/server-ca.crt"
constant AssetPathEtcdServerCert (line 30) | AssetPathEtcdServerCert = "tls/etcd/server.crt"
constant AssetPathEtcdServerKey (line 31) | AssetPathEtcdServerKey = "tls/etcd/server.key"
constant AssetPathEtcdPeerCA (line 32) | AssetPathEtcdPeerCA = "tls/etcd/peer-ca.crt"
constant AssetPathEtcdPeerCert (line 33) | AssetPathEtcdPeerCert = "tls/etcd/peer.crt"
constant AssetPathEtcdPeerKey (line 34) | AssetPathEtcdPeerKey = "tls/etcd/peer.key"
constant AssetPathAggregatorCA (line 35) | AssetPathAggregatorCA = "tls/front-proxy-ca.crt"
constant AssetPathFrontProxyClientCert (line 36) | AssetPathFrontProxyClientCert = "tls/front-proxy-client.crt"
constant AssetPathFrontProxyClientKey (line 37) | AssetPathFrontProxyClientKey = "tls/front-proxy-client.key"
constant AssetPathServiceAccountPrivKey (line 38) | AssetPathServiceAccountPrivKey = "tls/service-account.key"
constant AssetPathServiceAccountPubKey (line 39) | AssetPathServiceAccountPubKey = "tls/service-account.pub"
constant AssetPathKubeletClientCert (line 40) | AssetPathKubeletClientCert = "tls/apiserver-kubelet-client....
constant AssetPathKubeletClientKey (line 41) | AssetPathKubeletClientKey = "tls/apiserver-kubelet-client....
constant AssetPathAdminKey (line 42) | AssetPathAdminKey = "tls/admin.key"
constant AssetPathAdminCert (line 43) | AssetPathAdminCert = "tls/admin.crt"
constant AssetPathAdminKubeConfig (line 44) | AssetPathAdminKubeConfig = "auth/kubeconfig"
constant AssetPathKubeletKubeConfig (line 45) | AssetPathKubeletKubeConfig = "auth/kubeconfig-kubelet"
constant AssetPathManifests (line 46) | AssetPathManifests = "manifests"
constant AssetPathKubeConfigInCluster (line 47) | AssetPathKubeConfigInCluster = "manifests/kubeconfig-in-clust...
constant AssetPathKubeletBootstrapToken (line 48) | AssetPathKubeletBootstrapToken = "manifests/kubelet-bootstrap-t...
constant AssetPathProxy (line 49) | AssetPathProxy = "manifests/kube-proxy.yaml"
constant AssetPathProxySA (line 50) | AssetPathProxySA = "manifests/kube-proxy-sa.yaml"
constant AssetPathProxyRoleBinding (line 51) | AssetPathProxyRoleBinding = "manifests/kube-proxy-role-bin...
constant AssetPathFlannel (line 52) | AssetPathFlannel = "manifests/flannel.yaml"
constant AssetPathFlannelCfg (line 53) | AssetPathFlannelCfg = "manifests/flannel-cfg.yaml"
constant AssetPathFlannelClusterRole (line 54) | AssetPathFlannelClusterRole = "manifests/flannel-cluster-rol...
constant AssetPathFlannelClusterRoleBinding (line 55) | AssetPathFlannelClusterRoleBinding = "manifests/flannel-cluster-rol...
constant AssetPathFlannelSA (line 56) | AssetPathFlannelSA = "manifests/flannel-sa.yaml"
constant AssetPathCalico (line 57) | AssetPathCalico = "manifests/calico.yaml"
constant AssetPathCalicoPolicyOnly (line 58) | AssetPathCalicoPolicyOnly = "manifests/calico-policy-only....
constant AssetPathCalicoCfg (line 59) | AssetPathCalicoCfg = "manifests/calico-config.yaml"
constant AssetPathCalicoSA (line 60) | AssetPathCalicoSA = "manifests/calico-service-acco...
constant AssetPathCalicoRole (line 61) | AssetPathCalicoRole = "manifests/calico-role.yaml"
constant AssetPathCalicoRoleBinding (line 62) | AssetPathCalicoRoleBinding = "manifests/calico-role-binding...
constant AssetPathCalicoBGPConfigurationsCRD (line 63) | AssetPathCalicoBGPConfigurationsCRD = "manifests/calico-bgp-configur...
constant AssetPathCalicoBGPPeersCRD (line 64) | AssetPathCalicoBGPPeersCRD = "manifests/calico-bgp-peers-cr...
constant AssetPathCalicoFelixConfigurationsCRD (line 65) | AssetPathCalicoFelixConfigurationsCRD = "manifests/calico-felix-config...
constant AssetPathCalicoGlobalNetworkPoliciesCRD (line 66) | AssetPathCalicoGlobalNetworkPoliciesCRD = "manifests/calico-global-netwo...
constant AssetPathCalicoNetworkPoliciesCRD (line 67) | AssetPathCalicoNetworkPoliciesCRD = "manifests/calico-network-poli...
constant AssetPathCalicoGlobalNetworkSetsCRD (line 68) | AssetPathCalicoGlobalNetworkSetsCRD = "manifests/calico-global-netwo...
constant AssetPathCalicoIPPoolsCRD (line 69) | AssetPathCalicoIPPoolsCRD = "manifests/calico-ip-pools-crd...
constant AssetPathCalicoClusterInformationsCRD (line 70) | AssetPathCalicoClusterInformationsCRD = "manifests/calico-cluster-info...
constant AssetPathAPIServerSecret (line 71) | AssetPathAPIServerSecret = "manifests/kube-apiserver-secr...
constant AssetPathAPIServer (line 72) | AssetPathAPIServer = "manifests/kube-apiserver.yaml"
constant AssetPathControllerManager (line 73) | AssetPathControllerManager = "manifests/kube-controller-man...
constant AssetPathControllerManagerSA (line 74) | AssetPathControllerManagerSA = "manifests/kube-controller-man...
constant AssetPathControllerManagerRB (line 75) | AssetPathControllerManagerRB = "manifests/kube-controller-man...
constant AssetPathControllerManagerSecret (line 76) | AssetPathControllerManagerSecret = "manifests/kube-controller-man...
constant AssetPathControllerManagerDisruption (line 77) | AssetPathControllerManagerDisruption = "manifests/kube-controller-man...
constant AssetPathScheduler (line 78) | AssetPathScheduler = "manifests/kube-scheduler.yaml"
constant AssetPathSchedulerDisruption (line 79) | AssetPathSchedulerDisruption = "manifests/kube-scheduler-disr...
constant AssetPathCoreDNSClusterRoleBinding (line 80) | AssetPathCoreDNSClusterRoleBinding = "manifests/coredns-cluster-rol...
constant AssetPathCoreDNSClusterRole (line 81) | AssetPathCoreDNSClusterRole = "manifests/coredns-cluster-rol...
constant AssetPathCoreDNSConfig (line 82) | AssetPathCoreDNSConfig = "manifests/coredns-config.yaml"
constant AssetPathCoreDNSDeployment (line 83) | AssetPathCoreDNSDeployment = "manifests/coredns-deployment....
constant AssetPathCoreDNSSA (line 84) | AssetPathCoreDNSSA = "manifests/coredns-service-acc...
constant AssetPathCoreDNSSvc (line 85) | AssetPathCoreDNSSvc = "manifests/coredns-service.yaml"
constant AssetPathSystemNamespace (line 86) | AssetPathSystemNamespace = "manifests/kube-system-ns.yaml"
constant AssetPathCheckpointer (line 87) | AssetPathCheckpointer = "manifests/pod-checkpointer.yaml"
constant AssetPathCheckpointerSA (line 88) | AssetPathCheckpointerSA = "manifests/pod-checkpointer-sa...
constant AssetPathCheckpointerRole (line 89) | AssetPathCheckpointerRole = "manifests/pod-checkpointer-ro...
constant AssetPathCheckpointerRoleBinding (line 90) | AssetPathCheckpointerRoleBinding = "manifests/pod-checkpointer-ro...
constant AssetPathCheckpointerClusterRole (line 91) | AssetPathCheckpointerClusterRole = "manifests/pod-checkpointer-cl...
constant AssetPathCheckpointerClusterRoleBinding (line 92) | AssetPathCheckpointerClusterRoleBinding = "manifests/pod-checkpointer-cl...
constant AssetPathEtcdClientSecret (line 93) | AssetPathEtcdClientSecret = "manifests/etcd-client-tls.yaml"
constant AssetPathEtcdPeerSecret (line 94) | AssetPathEtcdPeerSecret = "manifests/etcd-peer-tls.yaml"
constant AssetPathEtcdServerSecret (line 95) | AssetPathEtcdServerSecret = "manifests/etcd-server-tls.yaml"
constant AssetPathCSRBootstrapRoleBinding (line 96) | AssetPathCSRBootstrapRoleBinding = "manifests/csr-bootstrap-role-...
constant AssetPathCSRApproverRoleBinding (line 97) | AssetPathCSRApproverRoleBinding = "manifests/csr-approver-role-b...
constant AssetPathCSRRenewalRoleBinding (line 98) | AssetPathCSRRenewalRoleBinding = "manifests/csr-renewal-role-bi...
constant AssetPathKubeSystemSARoleBinding (line 99) | AssetPathKubeSystemSARoleBinding = "manifests/kube-system-rbac-ro...
constant AssetPathBootstrapManifests (line 100) | AssetPathBootstrapManifests = "bootstrap-manifests"
constant AssetPathBootstrapAPIServer (line 101) | AssetPathBootstrapAPIServer = "bootstrap-manifests/bootstrap...
constant AssetPathBootstrapControllerManager (line 102) | AssetPathBootstrapControllerManager = "bootstrap-manifests/bootstrap...
constant AssetPathBootstrapScheduler (line 103) | AssetPathBootstrapScheduler = "bootstrap-manifests/bootstrap...
type Config (line 110) | type Config struct
method BindAllAddress (line 164) | func (c Config) BindAllAddress() string {
method ServiceCIDRsString (line 172) | func (c Config) ServiceCIDRsString() string {
method PodCIDRsString (line 177) | func (c Config) PodCIDRsString() string {
method APIServiceIPsString (line 182) | func (c Config) APIServiceIPsString() string {
method DNSServiceIPsString (line 187) | func (c Config) DNSServiceIPsString() string {
function stringerSlice (line 191) | func stringerSlice(in interface{}) []string {
function joinStringsFromSliceOrSingle (line 220) | func joinStringsFromSliceOrSingle(inSlice []string, inSingle fmt.Stringe...
function containsNonLocalIPv6 (line 232) | func containsNonLocalIPv6(in []net.IP) bool {
type ImageVersions (line 246) | type ImageVersions struct
function NewDefaultAssets (line 261) | func NewDefaultAssets(conf Config) (Assets, error) {
type Asset (line 322) | type Asset struct
method WriteFile (line 357) | func (a Asset) WriteFile(path string) error {
type Assets (line 327) | type Assets
method Get (line 329) | func (as Assets) Get(name string) (Asset, error) {
method WriteFiles (line 338) | func (as Assets) WriteFiles(path string) error {
FILE: cmd/render/plugin/default/asset/asset_test.go
type f (line 9) | type f struct
method String (line 13) | func (f *f) String() string {
function TestJoinStringsFromSliceOrSingle (line 17) | func TestJoinStringsFromSliceOrSingle(t *testing.T) {
function TestContainsNonLocalIPv6 (line 41) | func TestContainsNonLocalIPv6(t *testing.T) {
function TestStringerSlice (line 69) | func TestStringerSlice(t *testing.T) {
FILE: cmd/render/plugin/default/asset/k8s.go
constant EtcdServiceName (line 18) | EtcdServiceName = "etcd-service"
constant SecretEtcdPeer (line 20) | SecretEtcdPeer = "etcd-peer-tls"
constant SecretEtcdServer (line 21) | SecretEtcdServer = "etcd-server-tls"
constant SecretEtcdClient (line 22) | SecretEtcdClient = "etcd-client-tls"
constant NetworkFlannel (line 24) | NetworkFlannel = "flannel"
constant NetworkCalico (line 25) | NetworkCalico = "experimental-calico"
constant NetworkCanal (line 26) | NetworkCanal = "experimental-canal"
constant secretNamespace (line 28) | secretNamespace = "kube-system"
constant secretAPIServerName (line 29) | secretAPIServerName = "kube-apiserver"
constant secretCMName (line 30) | secretCMName = "kube-controller-manager"
type staticConfig (line 33) | type staticConfig struct
function newStaticAssets (line 37) | func newStaticAssets(imageVersions ImageVersions) Assets {
function newDynamicAssets (line 61) | func newDynamicAssets(conf Config) Assets {
constant validBootstrapTokenChars (line 120) | validBootstrapTokenChars = "0123456789abcdefghijklmnopqrstuvwxyz"
function newBootstrapToken (line 124) | func newBootstrapToken() (id string, secret string, err error) {
function newKubeConfigAssets (line 137) | func newKubeConfigAssets(assets Assets, conf Config) ([]Asset, error) {
function newAPIServerSecretAsset (line 197) | func newAPIServerSecretAsset(assets Assets, etcdUseTLS bool) (Asset, err...
function newControllerManagerSecretAsset (line 225) | func newControllerManagerSecretAsset(assets Assets) (Asset, error) {
type secret (line 241) | type secret struct
function secretFromAssets (line 249) | func secretFromAssets(name, namespace string, assetNames []string, asset...
function MustCreateAssetFromTemplate (line 270) | func MustCreateAssetFromTemplate(name string, template []byte, data inte...
function assetFromTemplate (line 278) | func assetFromTemplate(name string, tb []byte, data interface{}) (Asset,...
FILE: cmd/render/plugin/default/asset/tls.go
constant orgSystemMasters (line 16) | orgSystemMasters = "system:masters"
function newTLSAssets (line 18) | func newTLSAssets(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, a...
function newCACert (line 104) | func newCACert() (*rsa.PrivateKey, *x509.Certificate, error) {
function newAPIKeyAndCert (line 124) | func newAPIKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKe...
function newAdminKeyAndCert (line 148) | func newAdminKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.Private...
function newEtcdTLSAssets (line 161) | func newEtcdTLSAssets(etcdCACert, etcdClientCert *x509.Certificate, etcd...
function newEtcdKeyAndCert (line 203) | func newEtcdKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateK...
function newKeyAndCert (line 211) | func newKeyAndCert(caCert *x509.Certificate, caPrivKey *rsa.PrivateKey, ...
FILE: cmd/render/plugin/default/main.go
constant apiOffset (line 20) | apiOffset = 1
constant dnsOffset (line 21) | dnsOffset = 10
constant defaultServiceBaseIP (line 22) | defaultServiceBaseIP = "10.3.0.0"
constant defaultEtcdServers (line 23) | defaultEtcdServers = "https://127.0.0.1:2379"
type render (line 46) | type render struct
method Render (line 50) | func (*render) Render(opts *plugin.Options, args []string) error {
function validateRenderOpts (line 92) | func validateRenderOpts() error {
function flagsToAssetConfig (line 114) | func flagsToAssetConfig() (c *asset.Config, err error) {
function parseCertAndPrivateKeyFromDisk (line 244) | func parseCertAndPrivateKeyFromDisk(caCertPath, privKeyPath string) (*rs...
function parseCertFromDisk (line 262) | func parseCertFromDisk(caCertPath string) (*x509.Certificate, error) {
function parseURLs (line 274) | func parseURLs(s string) ([]*url.URL, error) {
function parseAltNames (line 286) | func parseAltNames(s string) (*tlsutil.AltNames, error) {
function altNamesFromURLs (line 308) | func altNamesFromURLs(urls []*url.URL) *tlsutil.AltNames {
function offsetServiceIP (line 327) | func offsetServiceIP(ipnet *net.IPNet, offset int) (net.IP, error) {
function incIPv4 (line 339) | func incIPv4(ip net.IP) {
FILE: cmd/render/plugin/default/render_test.go
function TestOffsetIP (line 8) | func TestOffsetIP(t *testing.T) {
FILE: e2e/checkpointer_test.go
constant retryAttempts (line 22) | retryAttempts = 60
constant retryInterval (line 23) | retryInterval = 5 * time.Second
function TestCheckpointer (line 26) | func TestCheckpointer(t *testing.T) {
function testCheckpointerUnscheduleCheckpointer (line 32) | func testCheckpointerUnscheduleCheckpointer(t *testing.T) {
function testCheckpointerUnscheduleParent (line 95) | func testCheckpointerUnscheduleParent(t *testing.T) {
function makeNamespace (line 195) | func makeNamespace(testName string) string {
function createDaemonSet (line 199) | func createDaemonSet(namespace string, manifest []byte, c *Cluster) error {
function verifyCheckpoint (line 217) | func verifyCheckpoint(c *Cluster, namespace, daemonsetName string, shoul...
function verifyPod (line 260) | func verifyPod(c *Cluster, daemonsetName string, shouldRun bool) error {
function isNodeReady (line 277) | func isNodeReady(n *Node) bool {
function waitCluster (line 287) | func waitCluster(t *testing.T) *Cluster {
function setupTestCheckpointerRole (line 319) | func setupTestCheckpointerRole(namespace string) error {
constant checkpointerDS (line 379) | checkpointerDS = `apiVersion: extensions/v1beta1
FILE: e2e/deleteapi_test.go
function TestDeleteAPI (line 12) | func TestDeleteAPI(t *testing.T) {
FILE: e2e/internal/e2eutil/testworkload/nginx_workload.go
type Nginx (line 29) | type Nginx struct
method IsReachable (line 135) | func (n *Nginx) IsReachable() error {
method IsUnReachable (line 145) | func (n *Nginx) IsUnReachable() error {
method Delete (line 154) | func (n *Nginx) Delete() error {
method newNginxDeployment (line 176) | func (n *Nginx) newNginxDeployment() error {
method newNginxService (line 217) | func (n *Nginx) newNginxService() error {
method newPingPod (line 245) | func (n *Nginx) newPingPod(reachable bool) error {
type NginxOpts (line 42) | type NginxOpts
function NewNginx (line 46) | func NewNginx(kc kubernetes.Interface, namespace string, options ...Ngin...
function WithNginxPingJobLabels (line 124) | func WithNginxPingJobLabels(labels map[string]string) NginxOpts {
FILE: e2e/internal/e2eutil/utils/utils.go
constant NodeRoleMasterLabel (line 9) | NodeRoleMasterLabel = "node-role.kubernetes.io/master"
constant NodeRoleWorkerLabel (line 11) | NodeRoleWorkerLabel = "node-role.kubernetes.io/node"
function Retry (line 16) | func Retry(attempts int, delay time.Duration, f func() error) error {
FILE: e2e/main_test.go
function init (line 29) | func init() {
function TestMain (line 35) | func TestMain(m *testing.M) {
function createNamespace (line 79) | func createNamespace(c kubernetes.Interface, name string) (*v1.Namespace...
function deleteNamespace (line 94) | func deleteNamespace(c kubernetes.Interface, name string) error {
function ready (line 100) | func ready(c kubernetes.Interface) error {
function retry (line 132) | func retry(attempts int, delay time.Duration, f func() error) error {
FILE: e2e/network_test.go
constant networkPingPollInterval (line 20) | networkPingPollInterval = 1 * time.Second
constant networkPingPollTimeout (line 21) | networkPingPollTimeout = 5 * time.Minute
function TestNetwork (line 30) | func TestNetwork(t *testing.T) {
function HelperDefaultDeny (line 67) | func HelperDefaultDeny(t *testing.T, nginx *testworkload.Nginx) {
function HelperPolicy (line 114) | func HelperPolicy(t *testing.T, nginx *testworkload.Nginx) {
FILE: e2e/node_test.go
constant LabelNodeRoleMaster (line 16) | LabelNodeRoleMaster = "node-role.kubernetes.io/master"
type Node (line 19) | type Node struct
method GetIPByType (line 27) | func (n *Node) GetIPByType(addrType v1.NodeAddressType) string {
method ExternalIP (line 38) | func (n *Node) ExternalIP() string {
method InternalIP (line 42) | func (n *Node) InternalIP() string {
method SSH (line 46) | func (n *Node) SSH(cmd string) (stdout, stderr []byte, err error) {
method Reboot (line 57) | func (n *Node) Reboot() error {
method IsMaster (line 92) | func (n *Node) IsMaster() bool {
function newNode (line 23) | func newNode(n *v1.Node) *Node {
type Cluster (line 98) | type Cluster struct
function GetCluster (line 104) | func GetCluster() (*Cluster, error) {
FILE: e2e/reboot_test.go
function TestReboot (line 20) | func TestReboot(t *testing.T) {
function nodesReady (line 50) | func nodesReady(c kubernetes.Interface, expectedNodes *v1.NodeList, t *t...
constant checkpointAnnotation (line 87) | checkpointAnnotation = "checkpointer.alpha.coreos.com/checkpoint-of"
function controlPlaneReady (line 91) | func controlPlaneReady(c kubernetes.Interface, attempts int, backoff tim...
FILE: e2e/smoke_test.go
function TestSmoke (line 10) | func TestSmoke(t *testing.T) {
FILE: e2e/ssh_client_test.go
type SSHClient (line 16) | type SSHClient struct
method SSH (line 59) | func (c *SSHClient) SSH(host, cmd string) (stdout, stderr []byte, err ...
method Manhole (line 89) | func (c *SSHClient) Manhole(host string) error {
function newSSHClientOrDie (line 23) | func newSSHClientOrDie(keypath string) *SSHClient {
FILE: pkg/bootkube/bootkube.go
constant assetTimeout (line 12) | assetTimeout = 20 * time.Minute
type Config (line 14) | type Config struct
type bootkube (line 21) | type bootkube struct
method Run (line 37) | func (b *bootkube) Run() error {
function NewBootkube (line 28) | func NewBootkube(config Config) (*bootkube, error) {
function UserOutput (line 80) | func UserOutput(format string, a ...interface{}) {
FILE: pkg/bootkube/bootstrap.go
type bootstrapControlPlane (line 12) | type bootstrapControlPlane struct
method Start (line 28) | func (b *bootstrapControlPlane) Start() error {
method Teardown (line 52) | func (b *bootstrapControlPlane) Teardown() error {
function NewBootstrapControlPlane (line 19) | func NewBootstrapControlPlane(assetDir, podManifestPath string) *bootstr...
function copyFile (line 68) | func copyFile(src, dst string, overwrite bool) error {
function copyDirectory (line 92) | func copyDirectory(srcDir, dstDir string, overwrite bool) ([]string, err...
FILE: pkg/bootkube/bootstrap_test.go
function setUp (line 18) | func setUp(t *testing.T) (assetDir, podManifestPath string) {
function tearDown (line 60) | func tearDown(assetDir, podManifestPath string, t *testing.T) {
function TestBootstrapControlPlane (line 72) | func TestBootstrapControlPlane(t *testing.T) {
function TestBootstrapControlPlaneNoOverwrite (line 110) | func TestBootstrapControlPlaneNoOverwrite(t *testing.T) {
FILE: pkg/bootkube/create.go
constant crdRolloutDuration (line 34) | crdRolloutDuration = 1 * time.Second
constant crdRolloutTimeout (line 35) | crdRolloutTimeout = 2 * time.Minute
function CreateAssets (line 38) | func CreateAssets(config clientcmd.ClientConfig, manifestDir string, tim...
function apiTest (line 88) | func apiTest(c clientcmd.ClientConfig) error {
type manifest (line 110) | type manifest struct
method String (line 120) | func (m manifest) String() string {
method urlPath (line 289) | func (m manifest) urlPath(plural string, namespaced bool) string {
type creater (line 127) | type creater struct
method createManifests (line 155) | func (c *creater) createManifests(manifests []manifest) (ok bool) {
method waitForCRD (line 230) | func (c *creater) waitForCRD(m manifest) error {
method create (line 276) | func (c *creater) create(m manifest) error {
function newCreater (line 136) | func newCreater(c *rest.Config, strict bool) (*creater, error) {
function allCustomResourcesURI (line 268) | func allCustomResourcesURI(gvr schema.GroupVersionResource) string {
function loadManifests (line 304) | func loadManifests(p string) ([]manifest, error) {
function parseManifests (line 340) | func parseManifests(r io.Reader) ([]manifest, error) {
function parseJSONManifest (line 372) | func parseJSONManifest(data []byte) (manifest, error) {
function newResourceMapper (line 393) | func newResourceMapper(d discovery.DiscoveryInterface) *resourceMapper {
type resourceMapper (line 402) | type resourceMapper struct
method resourceInfo (line 411) | func (m *resourceMapper) resourceInfo(groupVersion, kind string) (*met...
FILE: pkg/bootkube/create_test.go
function TestParseManifests (line 9) | func TestParseManifests(t *testing.T) {
function TestManifestURLPath (line 141) | func TestManifestURLPath(t *testing.T) {
FILE: pkg/bootkube/status.go
constant doesNotExist (line 22) | doesNotExist = "DoesNotExist"
function WaitUntilPodsRunning (line 25) | func WaitUntilPodsRunning(c clientcmd.ClientConfig, pods []string, timeo...
type statusController (line 44) | type statusController struct
method Run (line 65) | func (s *statusController) Run(ctx context.Context) {
method podWatcher (line 71) | func (s *statusController) podWatcher(ctx context.Context) {
method nodeWatcher (line 95) | func (s *statusController) nodeWatcher(ctx context.Context) {
method AllRunning (line 116) | func (s *statusController) AllRunning() (bool, error) {
method allPodsRunning (line 132) | func (s *statusController) allPodsRunning() bool {
method allNodesReady (line 160) | func (s *statusController) allNodesReady() bool {
method PodStatus (line 188) | func (s *statusController) PodStatus() (map[string]corev1.PodPhase, er...
method NodeStatus (line 215) | func (s *statusController) NodeStatus() (map[string]corev1.NodeConditi...
function NewStatusController (line 53) | func NewStatusController(c clientcmd.ClientConfig, pods []string) (*stat...
FILE: pkg/checkpoint/apiserver.go
method getAPIParentPods (line 14) | func (c *checkpointer) getAPIParentPods(nodeName string) (bool, map[stri...
FILE: pkg/checkpoint/checkpoint.go
constant activeCheckpointPath (line 16) | activeCheckpointPath = "/etc/kubernetes/manifests"
constant inactiveCheckpointPath (line 17) | inactiveCheckpointPath = "/etc/kubernetes/inactive-manifests"
constant checkpointSecretPath (line 18) | checkpointSecretPath = "/etc/kubernetes/checkpoint-secrets"
constant checkpointConfigMapPath (line 19) | checkpointConfigMapPath = "/etc/kubernetes/checkpoint-configmaps"
constant shouldCheckpointAnnotation (line 21) | shouldCheckpointAnnotation = "checkpointer.alpha.coreos.com/checkpoint"
constant checkpointParentAnnotation (line 22) | checkpointParentAnnotation = "checkpointer.alpha.coreos.com/checkpoint-of"
constant podSourceAnnotation (line 23) | podSourceAnnotation = "kubernetes.io/config.source"
constant shouldCheckpoint (line 25) | shouldCheckpoint = "true"
constant podSourceFile (line 26) | podSourceFile = "file"
constant defaultPollingFrequency (line 28) | defaultPollingFrequency = 5 * time.Second
constant defaultCheckpointTimeout (line 29) | defaultCheckpointTimeout = 1 * time.Minute
constant rootUID (line 31) | rootUID = 0
constant rootGID (line 32) | rootGID = 0
type Options (line 41) | type Options struct
type CheckpointerPod (line 56) | type CheckpointerPod struct
type checkpointer (line 66) | type checkpointer struct
method run (line 104) | func (c *checkpointer) run() {
function Run (line 76) | func Run(opts Options) error {
FILE: pkg/checkpoint/config_map.go
method checkpointConfigMapVolumes (line 15) | func (c *checkpointer) checkpointConfigMapVolumes(pod *corev1.Pod) (*cor...
method checkpointConfigMap (line 38) | func (c *checkpointer) checkpointConfigMap(namespace, podName, configMap...
function configMapPath (line 61) | func configMapPath(namespace, podName, configMapName string) string {
function podFullNameToConfigMapPath (line 65) | func podFullNameToConfigMapPath(id string) string {
FILE: pkg/checkpoint/cri/v1alpha1/api.pb.go
constant _ (line 153) | _ = proto.GoGoProtoPackageIsVersion2
type Protocol (line 155) | type Protocol
method String (line 171) | func (x Protocol) String() string {
method EnumDescriptor (line 174) | func (Protocol) EnumDescriptor() ([]byte, []int) { return fileDescript...
constant Protocol_TCP (line 158) | Protocol_TCP Protocol = 0
constant Protocol_UDP (line 159) | Protocol_UDP Protocol = 1
type MountPropagation (line 176) | type MountPropagation
method String (line 199) | func (x MountPropagation) String() string {
method EnumDescriptor (line 202) | func (MountPropagation) EnumDescriptor() ([]byte, []int) { return file...
constant MountPropagation_PROPAGATION_PRIVATE (line 180) | MountPropagation_PROPAGATION_PRIVATE MountPropagation = 0
constant MountPropagation_PROPAGATION_HOST_TO_CONTAINER (line 182) | MountPropagation_PROPAGATION_HOST_TO_CONTAINER MountPropagation = 1
constant MountPropagation_PROPAGATION_BIDIRECTIONAL (line 185) | MountPropagation_PROPAGATION_BIDIRECTIONAL MountPropagation = 2
type PodSandboxState (line 204) | type PodSandboxState
method String (line 220) | func (x PodSandboxState) String() string {
method EnumDescriptor (line 223) | func (PodSandboxState) EnumDescriptor() ([]byte, []int) { return fileD...
constant PodSandboxState_SANDBOX_READY (line 207) | PodSandboxState_SANDBOX_READY PodSandboxState = 0
constant PodSandboxState_SANDBOX_NOTREADY (line 208) | PodSandboxState_SANDBOX_NOTREADY PodSandboxState = 1
type ContainerState (line 225) | type ContainerState
method String (line 247) | func (x ContainerState) String() string {
method EnumDescriptor (line 250) | func (ContainerState) EnumDescriptor() ([]byte, []int) { return fileDe...
constant ContainerState_CONTAINER_CREATED (line 228) | ContainerState_CONTAINER_CREATED ContainerState = 0
constant ContainerState_CONTAINER_RUNNING (line 229) | ContainerState_CONTAINER_RUNNING ContainerState = 1
constant ContainerState_CONTAINER_EXITED (line 230) | ContainerState_CONTAINER_EXITED ContainerState = 2
constant ContainerState_CONTAINER_UNKNOWN (line 231) | ContainerState_CONTAINER_UNKNOWN ContainerState = 3
type VersionRequest (line 252) | type VersionRequest struct
method Reset (line 257) | func (m *VersionRequest) Reset() { *m = VersionRequ...
method ProtoMessage (line 258) | func (*VersionRequest) ProtoMessage() {}
method Descriptor (line 259) | func (*VersionRequest) Descriptor() ([]byte, []int) { return fileDescr...
method GetVersion (line 261) | func (m *VersionRequest) GetVersion() string {
method Marshal (line 4566) | func (m *VersionRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4576) | func (m *VersionRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8599) | func (m *VersionRequest) Size() (n int) {
method String (line 10280) | func (this *VersionRequest) String() string {
method Unmarshal (line 11632) | func (m *VersionRequest) Unmarshal(dAtA []byte) error {
type VersionResponse (line 268) | type VersionResponse struct
method Reset (line 281) | func (m *VersionResponse) Reset() { *m = VersionRes...
method ProtoMessage (line 282) | func (*VersionResponse) ProtoMessage() {}
method Descriptor (line 283) | func (*VersionResponse) Descriptor() ([]byte, []int) { return fileDesc...
method GetVersion (line 285) | func (m *VersionResponse) GetVersion() string {
method GetRuntimeName (line 292) | func (m *VersionResponse) GetRuntimeName() string {
method GetRuntimeVersion (line 299) | func (m *VersionResponse) GetRuntimeVersion() string {
method GetRuntimeApiVersion (line 306) | func (m *VersionResponse) GetRuntimeApiVersion() string {
method Marshal (line 4590) | func (m *VersionResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4600) | func (m *VersionResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8609) | func (m *VersionResponse) Size() (n int) {
method String (line 10290) | func (this *VersionResponse) String() string {
method Unmarshal (line 11711) | func (m *VersionResponse) Unmarshal(dAtA []byte) error {
type DNSConfig (line 314) | type DNSConfig struct
method Reset (line 324) | func (m *DNSConfig) Reset() { *m = DNSConfig{} }
method ProtoMessage (line 325) | func (*DNSConfig) ProtoMessage() {}
method Descriptor (line 326) | func (*DNSConfig) Descriptor() ([]byte, []int) { return fileDescriptor...
method GetServers (line 328) | func (m *DNSConfig) GetServers() []string {
method GetSearches (line 335) | func (m *DNSConfig) GetSearches() []string {
method GetOptions (line 342) | func (m *DNSConfig) GetOptions() []string {
method Marshal (line 4632) | func (m *DNSConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4642) | func (m *DNSConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8631) | func (m *DNSConfig) Size() (n int) {
method String (line 10303) | func (this *DNSConfig) String() string {
method Unmarshal (line 11877) | func (m *DNSConfig) Unmarshal(dAtA []byte) error {
type PortMapping (line 350) | type PortMapping struct
method Reset (line 361) | func (m *PortMapping) Reset() { *m = PortMapping{} }
method ProtoMessage (line 362) | func (*PortMapping) ProtoMessage() {}
method Descriptor (line 363) | func (*PortMapping) Descriptor() ([]byte, []int) { return fileDescript...
method GetProtocol (line 365) | func (m *PortMapping) GetProtocol() Protocol {
method GetContainerPort (line 372) | func (m *PortMapping) GetContainerPort() int32 {
method GetHostPort (line 379) | func (m *PortMapping) GetHostPort() int32 {
method GetHostIp (line 386) | func (m *PortMapping) GetHostIp() string {
method Marshal (line 4695) | func (m *PortMapping) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4705) | func (m *PortMapping) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8655) | func (m *PortMapping) Size() (n int) {
method String (line 10315) | func (this *PortMapping) String() string {
method Unmarshal (line 12014) | func (m *PortMapping) Unmarshal(dAtA []byte) error {
type Mount (line 394) | type Mount struct
method Reset (line 407) | func (m *Mount) Reset() { *m = Mount{} }
method ProtoMessage (line 408) | func (*Mount) ProtoMessage() {}
method Descriptor (line 409) | func (*Mount) Descriptor() ([]byte, []int) { return fileDescriptorApi,...
method GetContainerPath (line 411) | func (m *Mount) GetContainerPath() string {
method GetHostPath (line 418) | func (m *Mount) GetHostPath() string {
method GetReadonly (line 425) | func (m *Mount) GetReadonly() bool {
method GetSelinuxRelabel (line 432) | func (m *Mount) GetSelinuxRelabel() bool {
method GetPropagation (line 439) | func (m *Mount) GetPropagation() MountPropagation {
method Marshal (line 4734) | func (m *Mount) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4744) | func (m *Mount) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8674) | func (m *Mount) Size() (n int) {
method String (line 10328) | func (this *Mount) String() string {
method Unmarshal (line 12150) | func (m *Mount) Unmarshal(dAtA []byte) error {
type NamespaceOption (line 447) | type NamespaceOption struct
method Reset (line 456) | func (m *NamespaceOption) Reset() { *m = NamespaceO...
method ProtoMessage (line 457) | func (*NamespaceOption) ProtoMessage() {}
method Descriptor (line 458) | func (*NamespaceOption) Descriptor() ([]byte, []int) { return fileDesc...
method GetHostNetwork (line 460) | func (m *NamespaceOption) GetHostNetwork() bool {
method GetHostPid (line 467) | func (m *NamespaceOption) GetHostPid() bool {
method GetHostIpc (line 474) | func (m *NamespaceOption) GetHostIpc() bool {
method Marshal (line 4789) | func (m *NamespaceOption) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4799) | func (m *NamespaceOption) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8697) | func (m *NamespaceOption) Size() (n int) {
method String (line 10342) | func (this *NamespaceOption) String() string {
method Unmarshal (line 12317) | func (m *NamespaceOption) Unmarshal(dAtA []byte) error {
type Int64Value (line 482) | type Int64Value struct
method Reset (line 487) | func (m *Int64Value) Reset() { *m = Int64Value{} }
method ProtoMessage (line 488) | func (*Int64Value) ProtoMessage() {}
method Descriptor (line 489) | func (*Int64Value) Descriptor() ([]byte, []int) { return fileDescripto...
method GetValue (line 491) | func (m *Int64Value) GetValue() int64 {
method Marshal (line 4837) | func (m *Int64Value) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4847) | func (m *Int64Value) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8712) | func (m *Int64Value) Size() (n int) {
method String (line 10354) | func (this *Int64Value) String() string {
method Unmarshal (line 12427) | func (m *Int64Value) Unmarshal(dAtA []byte) error {
type LinuxSandboxSecurityContext (line 503) | type LinuxSandboxSecurityContext struct
method Reset (line 531) | func (m *LinuxSandboxSecurityContext) Reset() { *m ...
method ProtoMessage (line 532) | func (*LinuxSandboxSecurityContext) ProtoMessage() {}
method Descriptor (line 533) | func (*LinuxSandboxSecurityContext) Descriptor() ([]byte, []int) { ret...
method GetNamespaceOptions (line 535) | func (m *LinuxSandboxSecurityContext) GetNamespaceOptions() *Namespace...
method GetSelinuxOptions (line 542) | func (m *LinuxSandboxSecurityContext) GetSelinuxOptions() *SELinuxOpti...
method GetRunAsUser (line 549) | func (m *LinuxSandboxSecurityContext) GetRunAsUser() *Int64Value {
method GetReadonlyRootfs (line 556) | func (m *LinuxSandboxSecurityContext) GetReadonlyRootfs() bool {
method GetSupplementalGroups (line 563) | func (m *LinuxSandboxSecurityContext) GetSupplementalGroups() []int64 {
method GetPrivileged (line 570) | func (m *LinuxSandboxSecurityContext) GetPrivileged() bool {
method GetSeccompProfilePath (line 577) | func (m *LinuxSandboxSecurityContext) GetSeccompProfilePath() string {
method Marshal (line 4860) | func (m *LinuxSandboxSecurityContext) Marshal() (dAtA []byte, err erro...
method MarshalTo (line 4870) | func (m *LinuxSandboxSecurityContext) MarshalTo(dAtA []byte) (int, err...
method Size (line 8721) | func (m *LinuxSandboxSecurityContext) Size() (n int) {
method String (line 10364) | func (this *LinuxSandboxSecurityContext) String() string {
method Unmarshal (line 12496) | func (m *LinuxSandboxSecurityContext) Unmarshal(dAtA []byte) error {
type LinuxPodSandboxConfig (line 586) | type LinuxPodSandboxConfig struct
method Reset (line 597) | func (m *LinuxPodSandboxConfig) Reset() { *m = Linu...
method ProtoMessage (line 598) | func (*LinuxPodSandboxConfig) ProtoMessage() {}
method Descriptor (line 599) | func (*LinuxPodSandboxConfig) Descriptor() ([]byte, []int) { return fi...
method GetCgroupParent (line 601) | func (m *LinuxPodSandboxConfig) GetCgroupParent() string {
method GetSecurityContext (line 608) | func (m *LinuxPodSandboxConfig) GetSecurityContext() *LinuxSandboxSecu...
method GetSysctls (line 615) | func (m *LinuxPodSandboxConfig) GetSysctls() map[string]string {
method Marshal (line 4952) | func (m *LinuxPodSandboxConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 4962) | func (m *LinuxPodSandboxConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8756) | func (m *LinuxPodSandboxConfig) Size() (n int) {
method String (line 10380) | func (this *LinuxPodSandboxConfig) String() string {
method Unmarshal (line 12776) | func (m *LinuxPodSandboxConfig) Unmarshal(dAtA []byte) error {
type PodSandboxMetadata (line 626) | type PodSandboxMetadata struct
method Reset (line 637) | func (m *PodSandboxMetadata) Reset() { *m = PodSand...
method ProtoMessage (line 638) | func (*PodSandboxMetadata) ProtoMessage() {}
method Descriptor (line 639) | func (*PodSandboxMetadata) Descriptor() ([]byte, []int) { return fileD...
method GetName (line 641) | func (m *PodSandboxMetadata) GetName() string {
method GetUid (line 648) | func (m *PodSandboxMetadata) GetUid() string {
method GetNamespace (line 655) | func (m *PodSandboxMetadata) GetNamespace() string {
method GetAttempt (line 662) | func (m *PodSandboxMetadata) GetAttempt() uint32 {
method Marshal (line 5003) | func (m *PodSandboxMetadata) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5013) | func (m *PodSandboxMetadata) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8778) | func (m *PodSandboxMetadata) Size() (n int) {
method String (line 10402) | func (this *PodSandboxMetadata) String() string {
method Unmarshal (line 13004) | func (m *PodSandboxMetadata) Unmarshal(dAtA []byte) error {
type PodSandboxConfig (line 671) | type PodSandboxConfig struct
method Reset (line 722) | func (m *PodSandboxConfig) Reset() { *m = PodSandbo...
method ProtoMessage (line 723) | func (*PodSandboxConfig) ProtoMessage() {}
method Descriptor (line 724) | func (*PodSandboxConfig) Descriptor() ([]byte, []int) { return fileDes...
method GetMetadata (line 726) | func (m *PodSandboxConfig) GetMetadata() *PodSandboxMetadata {
method GetHostname (line 733) | func (m *PodSandboxConfig) GetHostname() string {
method GetLogDirectory (line 740) | func (m *PodSandboxConfig) GetLogDirectory() string {
method GetDnsConfig (line 747) | func (m *PodSandboxConfig) GetDnsConfig() *DNSConfig {
method GetPortMappings (line 754) | func (m *PodSandboxConfig) GetPortMappings() []*PortMapping {
method GetLabels (line 761) | func (m *PodSandboxConfig) GetLabels() map[string]string {
method GetAnnotations (line 768) | func (m *PodSandboxConfig) GetAnnotations() map[string]string {
method GetLinux (line 775) | func (m *PodSandboxConfig) GetLinux() *LinuxPodSandboxConfig {
method Marshal (line 5044) | func (m *PodSandboxConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5054) | func (m *PodSandboxConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8799) | func (m *PodSandboxConfig) Size() (n int) {
method String (line 10415) | func (this *PodSandboxConfig) String() string {
method Unmarshal (line 13160) | func (m *PodSandboxConfig) Unmarshal(dAtA []byte) error {
type RunPodSandboxRequest (line 782) | type RunPodSandboxRequest struct
method Reset (line 787) | func (m *RunPodSandboxRequest) Reset() { *m = RunPo...
method ProtoMessage (line 788) | func (*RunPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 789) | func (*RunPodSandboxRequest) Descriptor() ([]byte, []int) { return fil...
method GetConfig (line 791) | func (m *RunPodSandboxRequest) GetConfig() *PodSandboxConfig {
method Marshal (line 5150) | func (m *RunPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5160) | func (m *RunPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8847) | func (m *RunPodSandboxRequest) Size() (n int) {
method String (line 10452) | func (this *RunPodSandboxRequest) String() string {
method Unmarshal (line 13630) | func (m *RunPodSandboxRequest) Unmarshal(dAtA []byte) error {
type RunPodSandboxResponse (line 798) | type RunPodSandboxResponse struct
method Reset (line 803) | func (m *RunPodSandboxResponse) Reset() { *m = RunP...
method ProtoMessage (line 804) | func (*RunPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 805) | func (*RunPodSandboxResponse) Descriptor() ([]byte, []int) { return fi...
method GetPodSandboxId (line 807) | func (m *RunPodSandboxResponse) GetPodSandboxId() string {
method Marshal (line 5178) | func (m *RunPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5188) | func (m *RunPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8857) | func (m *RunPodSandboxResponse) Size() (n int) {
method String (line 10462) | func (this *RunPodSandboxResponse) String() string {
method Unmarshal (line 13713) | func (m *RunPodSandboxResponse) Unmarshal(dAtA []byte) error {
type StopPodSandboxRequest (line 814) | type StopPodSandboxRequest struct
method Reset (line 819) | func (m *StopPodSandboxRequest) Reset() { *m = Stop...
method ProtoMessage (line 820) | func (*StopPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 821) | func (*StopPodSandboxRequest) Descriptor() ([]byte, []int) { return fi...
method GetPodSandboxId (line 823) | func (m *StopPodSandboxRequest) GetPodSandboxId() string {
method Marshal (line 5202) | func (m *StopPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5212) | func (m *StopPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8867) | func (m *StopPodSandboxRequest) Size() (n int) {
method String (line 10472) | func (this *StopPodSandboxRequest) String() string {
method Unmarshal (line 13792) | func (m *StopPodSandboxRequest) Unmarshal(dAtA []byte) error {
type StopPodSandboxResponse (line 830) | type StopPodSandboxResponse struct
method Reset (line 833) | func (m *StopPodSandboxResponse) Reset() { *m = Sto...
method ProtoMessage (line 834) | func (*StopPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 835) | func (*StopPodSandboxResponse) Descriptor() ([]byte, []int) { return f...
method Marshal (line 5226) | func (m *StopPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5236) | func (m *StopPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8877) | func (m *StopPodSandboxResponse) Size() (n int) {
method String (line 10482) | func (this *StopPodSandboxResponse) String() string {
method Unmarshal (line 13871) | func (m *StopPodSandboxResponse) Unmarshal(dAtA []byte) error {
type RemovePodSandboxRequest (line 837) | type RemovePodSandboxRequest struct
method Reset (line 842) | func (m *RemovePodSandboxRequest) Reset() { *m = Re...
method ProtoMessage (line 843) | func (*RemovePodSandboxRequest) ProtoMessage() {}
method Descriptor (line 844) | func (*RemovePodSandboxRequest) Descriptor() ([]byte, []int) { return ...
method GetPodSandboxId (line 846) | func (m *RemovePodSandboxRequest) GetPodSandboxId() string {
method Marshal (line 5244) | func (m *RemovePodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5254) | func (m *RemovePodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8883) | func (m *RemovePodSandboxRequest) Size() (n int) {
method String (line 10491) | func (this *RemovePodSandboxRequest) String() string {
method Unmarshal (line 13921) | func (m *RemovePodSandboxRequest) Unmarshal(dAtA []byte) error {
type RemovePodSandboxResponse (line 853) | type RemovePodSandboxResponse struct
method Reset (line 856) | func (m *RemovePodSandboxResponse) Reset() { *m = R...
method ProtoMessage (line 857) | func (*RemovePodSandboxResponse) ProtoMessage() {}
method Descriptor (line 858) | func (*RemovePodSandboxResponse) Descriptor() ([]byte, []int) { return...
method Marshal (line 5268) | func (m *RemovePodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5278) | func (m *RemovePodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8893) | func (m *RemovePodSandboxResponse) Size() (n int) {
method String (line 10501) | func (this *RemovePodSandboxResponse) String() string {
method Unmarshal (line 14000) | func (m *RemovePodSandboxResponse) Unmarshal(dAtA []byte) error {
type PodSandboxStatusRequest (line 860) | type PodSandboxStatusRequest struct
method Reset (line 867) | func (m *PodSandboxStatusRequest) Reset() { *m = Po...
method ProtoMessage (line 868) | func (*PodSandboxStatusRequest) ProtoMessage() {}
method Descriptor (line 869) | func (*PodSandboxStatusRequest) Descriptor() ([]byte, []int) { return ...
method GetPodSandboxId (line 871) | func (m *PodSandboxStatusRequest) GetPodSandboxId() string {
method GetVerbose (line 878) | func (m *PodSandboxStatusRequest) GetVerbose() bool {
method Marshal (line 5286) | func (m *PodSandboxStatusRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5296) | func (m *PodSandboxStatusRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8899) | func (m *PodSandboxStatusRequest) Size() (n int) {
method String (line 10510) | func (this *PodSandboxStatusRequest) String() string {
method Unmarshal (line 14050) | func (m *PodSandboxStatusRequest) Unmarshal(dAtA []byte) error {
type PodSandboxNetworkStatus (line 886) | type PodSandboxNetworkStatus struct
method Reset (line 891) | func (m *PodSandboxNetworkStatus) Reset() { *m = Po...
method ProtoMessage (line 892) | func (*PodSandboxNetworkStatus) ProtoMessage() {}
method Descriptor (line 893) | func (*PodSandboxNetworkStatus) Descriptor() ([]byte, []int) { return ...
method GetIp (line 895) | func (m *PodSandboxNetworkStatus) GetIp() string {
method Marshal (line 5320) | func (m *PodSandboxNetworkStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5330) | func (m *PodSandboxNetworkStatus) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8912) | func (m *PodSandboxNetworkStatus) Size() (n int) {
method String (line 10521) | func (this *PodSandboxNetworkStatus) String() string {
method Unmarshal (line 14149) | func (m *PodSandboxNetworkStatus) Unmarshal(dAtA []byte) error {
type Namespace (line 903) | type Namespace struct
method Reset (line 908) | func (m *Namespace) Reset() { *m = Namespace{} }
method ProtoMessage (line 909) | func (*Namespace) ProtoMessage() {}
method Descriptor (line 910) | func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptor...
method GetOptions (line 912) | func (m *Namespace) GetOptions() *NamespaceOption {
method Marshal (line 5344) | func (m *Namespace) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5354) | func (m *Namespace) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8922) | func (m *Namespace) Size() (n int) {
method String (line 10531) | func (this *Namespace) String() string {
method Unmarshal (line 14228) | func (m *Namespace) Unmarshal(dAtA []byte) error {
type LinuxPodSandboxStatus (line 920) | type LinuxPodSandboxStatus struct
method Reset (line 925) | func (m *LinuxPodSandboxStatus) Reset() { *m = Linu...
method ProtoMessage (line 926) | func (*LinuxPodSandboxStatus) ProtoMessage() {}
method Descriptor (line 927) | func (*LinuxPodSandboxStatus) Descriptor() ([]byte, []int) { return fi...
method GetNamespaces (line 929) | func (m *LinuxPodSandboxStatus) GetNamespaces() *Namespace {
method Marshal (line 5372) | func (m *LinuxPodSandboxStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5382) | func (m *LinuxPodSandboxStatus) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8932) | func (m *LinuxPodSandboxStatus) Size() (n int) {
method String (line 10541) | func (this *LinuxPodSandboxStatus) String() string {
method Unmarshal (line 14311) | func (m *LinuxPodSandboxStatus) Unmarshal(dAtA []byte) error {
type PodSandboxStatus (line 937) | type PodSandboxStatus struct
method Reset (line 959) | func (m *PodSandboxStatus) Reset() { *m = PodSandbo...
method ProtoMessage (line 960) | func (*PodSandboxStatus) ProtoMessage() {}
method Descriptor (line 961) | func (*PodSandboxStatus) Descriptor() ([]byte, []int) { return fileDes...
method GetId (line 963) | func (m *PodSandboxStatus) GetId() string {
method GetMetadata (line 970) | func (m *PodSandboxStatus) GetMetadata() *PodSandboxMetadata {
method GetState (line 977) | func (m *PodSandboxStatus) GetState() PodSandboxState {
method GetCreatedAt (line 984) | func (m *PodSandboxStatus) GetCreatedAt() int64 {
method GetNetwork (line 991) | func (m *PodSandboxStatus) GetNetwork() *PodSandboxNetworkStatus {
method GetLinux (line 998) | func (m *PodSandboxStatus) GetLinux() *LinuxPodSandboxStatus {
method GetLabels (line 1005) | func (m *PodSandboxStatus) GetLabels() map[string]string {
method GetAnnotations (line 1012) | func (m *PodSandboxStatus) GetAnnotations() map[string]string {
method Marshal (line 5400) | func (m *PodSandboxStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5410) | func (m *PodSandboxStatus) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8942) | func (m *PodSandboxStatus) Size() (n int) {
method String (line 10551) | func (this *PodSandboxStatus) String() string {
method Unmarshal (line 14394) | func (m *PodSandboxStatus) Unmarshal(dAtA []byte) error {
type PodSandboxStatusResponse (line 1019) | type PodSandboxStatusResponse struct
method Reset (line 1029) | func (m *PodSandboxStatusResponse) Reset() { *m = P...
method ProtoMessage (line 1030) | func (*PodSandboxStatusResponse) ProtoMessage() {}
method Descriptor (line 1031) | func (*PodSandboxStatusResponse) Descriptor() ([]byte, []int) { return...
method GetStatus (line 1033) | func (m *PodSandboxStatusResponse) GetStatus() *PodSandboxStatus {
method GetInfo (line 1040) | func (m *PodSandboxStatusResponse) GetInfo() map[string]string {
method Marshal (line 5498) | func (m *PodSandboxStatusResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5508) | func (m *PodSandboxStatusResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 8986) | func (m *PodSandboxStatusResponse) Size() (n int) {
method String (line 10588) | func (this *PodSandboxStatusResponse) String() string {
method Unmarshal (line 14842) | func (m *PodSandboxStatusResponse) Unmarshal(dAtA []byte) error {
type PodSandboxStateValue (line 1048) | type PodSandboxStateValue struct
method Reset (line 1053) | func (m *PodSandboxStateValue) Reset() { *m = PodSa...
method ProtoMessage (line 1054) | func (*PodSandboxStateValue) ProtoMessage() {}
method Descriptor (line 1055) | func (*PodSandboxStateValue) Descriptor() ([]byte, []int) { return fil...
method GetState (line 1057) | func (m *PodSandboxStateValue) GetState() PodSandboxState {
method Marshal (line 5543) | func (m *PodSandboxStateValue) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5553) | func (m *PodSandboxStateValue) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9004) | func (m *PodSandboxStateValue) Size() (n int) {
method String (line 10609) | func (this *PodSandboxStateValue) String() string {
method Unmarshal (line 15041) | func (m *PodSandboxStateValue) Unmarshal(dAtA []byte) error {
type PodSandboxFilter (line 1066) | type PodSandboxFilter struct
method Reset (line 1077) | func (m *PodSandboxFilter) Reset() { *m = PodSandbo...
method ProtoMessage (line 1078) | func (*PodSandboxFilter) ProtoMessage() {}
method Descriptor (line 1079) | func (*PodSandboxFilter) Descriptor() ([]byte, []int) { return fileDes...
method GetId (line 1081) | func (m *PodSandboxFilter) GetId() string {
method GetState (line 1088) | func (m *PodSandboxFilter) GetState() *PodSandboxStateValue {
method GetLabelSelector (line 1095) | func (m *PodSandboxFilter) GetLabelSelector() map[string]string {
method Marshal (line 5566) | func (m *PodSandboxFilter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5576) | func (m *PodSandboxFilter) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9013) | func (m *PodSandboxFilter) Size() (n int) {
method String (line 10619) | func (this *PodSandboxFilter) String() string {
method Unmarshal (line 15110) | func (m *PodSandboxFilter) Unmarshal(dAtA []byte) error {
type ListPodSandboxRequest (line 1102) | type ListPodSandboxRequest struct
method Reset (line 1107) | func (m *ListPodSandboxRequest) Reset() { *m = List...
method ProtoMessage (line 1108) | func (*ListPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 1109) | func (*ListPodSandboxRequest) Descriptor() ([]byte, []int) { return fi...
method GetFilter (line 1111) | func (m *ListPodSandboxRequest) GetFilter() *PodSandboxFilter {
method Marshal (line 5617) | func (m *ListPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5627) | func (m *ListPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9035) | func (m *ListPodSandboxRequest) Size() (n int) {
method String (line 10641) | func (this *ListPodSandboxRequest) String() string {
method Unmarshal (line 15338) | func (m *ListPodSandboxRequest) Unmarshal(dAtA []byte) error {
type PodSandbox (line 1119) | type PodSandbox struct
method Reset (line 1137) | func (m *PodSandbox) Reset() { *m = PodSandbox{} }
method ProtoMessage (line 1138) | func (*PodSandbox) ProtoMessage() {}
method Descriptor (line 1139) | func (*PodSandbox) Descriptor() ([]byte, []int) { return fileDescripto...
method GetId (line 1141) | func (m *PodSandbox) GetId() string {
method GetMetadata (line 1148) | func (m *PodSandbox) GetMetadata() *PodSandboxMetadata {
method GetState (line 1155) | func (m *PodSandbox) GetState() PodSandboxState {
method GetCreatedAt (line 1162) | func (m *PodSandbox) GetCreatedAt() int64 {
method GetLabels (line 1169) | func (m *PodSandbox) GetLabels() map[string]string {
method GetAnnotations (line 1176) | func (m *PodSandbox) GetAnnotations() map[string]string {
method Marshal (line 5645) | func (m *PodSandbox) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5655) | func (m *PodSandbox) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9045) | func (m *PodSandbox) Size() (n int) {
method String (line 10651) | func (this *PodSandbox) String() string {
method Unmarshal (line 15421) | func (m *PodSandbox) Unmarshal(dAtA []byte) error {
type ListPodSandboxResponse (line 1183) | type ListPodSandboxResponse struct
method Reset (line 1188) | func (m *ListPodSandboxResponse) Reset() { *m = Lis...
method ProtoMessage (line 1189) | func (*ListPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 1190) | func (*ListPodSandboxResponse) Descriptor() ([]byte, []int) { return f...
method GetItems (line 1192) | func (m *ListPodSandboxResponse) GetItems() []*PodSandbox {
method Marshal (line 5723) | func (m *ListPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5733) | func (m *ListPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9081) | func (m *ListPodSandboxResponse) Size() (n int) {
method String (line 10686) | func (this *ListPodSandboxResponse) String() string {
method Unmarshal (line 15803) | func (m *ListPodSandboxResponse) Unmarshal(dAtA []byte) error {
type ImageSpec (line 1202) | type ImageSpec struct
method Reset (line 1206) | func (m *ImageSpec) Reset() { *m = ImageSpec{} }
method ProtoMessage (line 1207) | func (*ImageSpec) ProtoMessage() {}
method Descriptor (line 1208) | func (*ImageSpec) Descriptor() ([]byte, []int) { return fileDescriptor...
method GetImage (line 1210) | func (m *ImageSpec) GetImage() string {
method Marshal (line 5753) | func (m *ImageSpec) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5763) | func (m *ImageSpec) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9093) | func (m *ImageSpec) Size() (n int) {
method String (line 10696) | func (this *ImageSpec) String() string {
method Unmarshal (line 15884) | func (m *ImageSpec) Unmarshal(dAtA []byte) error {
type KeyValue (line 1217) | type KeyValue struct
method Reset (line 1222) | func (m *KeyValue) Reset() { *m = KeyValue{} }
method ProtoMessage (line 1223) | func (*KeyValue) ProtoMessage() {}
method Descriptor (line 1224) | func (*KeyValue) Descriptor() ([]byte, []int) { return fileDescriptorA...
method GetKey (line 1226) | func (m *KeyValue) GetKey() string {
method GetValue (line 1233) | func (m *KeyValue) GetValue() string {
method Marshal (line 5777) | func (m *KeyValue) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5787) | func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9103) | func (m *KeyValue) Size() (n int) {
method String (line 10706) | func (this *KeyValue) String() string {
method Unmarshal (line 15963) | func (m *KeyValue) Unmarshal(dAtA []byte) error {
type LinuxContainerResources (line 1244) | type LinuxContainerResources struct
method Reset (line 1261) | func (m *LinuxContainerResources) Reset() { *m = Li...
method ProtoMessage (line 1262) | func (*LinuxContainerResources) ProtoMessage() {}
method Descriptor (line 1263) | func (*LinuxContainerResources) Descriptor() ([]byte, []int) { return ...
method GetCpuPeriod (line 1265) | func (m *LinuxContainerResources) GetCpuPeriod() int64 {
method GetCpuQuota (line 1272) | func (m *LinuxContainerResources) GetCpuQuota() int64 {
method GetCpuShares (line 1279) | func (m *LinuxContainerResources) GetCpuShares() int64 {
method GetMemoryLimitInBytes (line 1286) | func (m *LinuxContainerResources) GetMemoryLimitInBytes() int64 {
method GetOomScoreAdj (line 1293) | func (m *LinuxContainerResources) GetOomScoreAdj() int64 {
method GetCpusetCpus (line 1300) | func (m *LinuxContainerResources) GetCpusetCpus() string {
method GetCpusetMems (line 1307) | func (m *LinuxContainerResources) GetCpusetMems() string {
method Marshal (line 5807) | func (m *LinuxContainerResources) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5817) | func (m *LinuxContainerResources) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9117) | func (m *LinuxContainerResources) Size() (n int) {
method String (line 10717) | func (this *LinuxContainerResources) String() string {
method Unmarshal (line 16071) | func (m *LinuxContainerResources) Unmarshal(dAtA []byte) error {
type SELinuxOption (line 1315) | type SELinuxOption struct
method Reset (line 1322) | func (m *SELinuxOption) Reset() { *m = SELinuxOptio...
method ProtoMessage (line 1323) | func (*SELinuxOption) ProtoMessage() {}
method Descriptor (line 1324) | func (*SELinuxOption) Descriptor() ([]byte, []int) { return fileDescri...
method GetUser (line 1326) | func (m *SELinuxOption) GetUser() string {
method GetRole (line 1333) | func (m *SELinuxOption) GetRole() string {
method GetType (line 1340) | func (m *SELinuxOption) GetType() string {
method GetLevel (line 1347) | func (m *SELinuxOption) GetLevel() string {
method Marshal (line 5862) | func (m *SELinuxOption) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5872) | func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9146) | func (m *SELinuxOption) Size() (n int) {
method String (line 10733) | func (this *SELinuxOption) String() string {
method Unmarshal (line 16274) | func (m *SELinuxOption) Unmarshal(dAtA []byte) error {
type Capability (line 1355) | type Capability struct
method Reset (line 1362) | func (m *Capability) Reset() { *m = Capability{} }
method ProtoMessage (line 1363) | func (*Capability) ProtoMessage() {}
method Descriptor (line 1364) | func (*Capability) Descriptor() ([]byte, []int) { return fileDescripto...
method GetAddCapabilities (line 1366) | func (m *Capability) GetAddCapabilities() []string {
method GetDropCapabilities (line 1373) | func (m *Capability) GetDropCapabilities() []string {
method Marshal (line 5904) | func (m *Capability) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 5914) | func (m *Capability) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9168) | func (m *Capability) Size() (n int) {
method String (line 10746) | func (this *Capability) String() string {
method Unmarshal (line 16440) | func (m *Capability) Unmarshal(dAtA []byte) error {
type LinuxContainerSecurityContext (line 1381) | type LinuxContainerSecurityContext struct
method Reset (line 1438) | func (m *LinuxContainerSecurityContext) Reset() { *m = LinuxConta...
method ProtoMessage (line 1439) | func (*LinuxContainerSecurityContext) ProtoMessage() {}
method Descriptor (line 1440) | func (*LinuxContainerSecurityContext) Descriptor() ([]byte, []int) {
method GetCapabilities (line 1444) | func (m *LinuxContainerSecurityContext) GetCapabilities() *Capability {
method GetPrivileged (line 1451) | func (m *LinuxContainerSecurityContext) GetPrivileged() bool {
method GetNamespaceOptions (line 1458) | func (m *LinuxContainerSecurityContext) GetNamespaceOptions() *Namespa...
method GetSelinuxOptions (line 1465) | func (m *LinuxContainerSecurityContext) GetSelinuxOptions() *SELinuxOp...
method GetRunAsUser (line 1472) | func (m *LinuxContainerSecurityContext) GetRunAsUser() *Int64Value {
method GetRunAsUsername (line 1479) | func (m *LinuxContainerSecurityContext) GetRunAsUsername() string {
method GetReadonlyRootfs (line 1486) | func (m *LinuxContainerSecurityContext) GetReadonlyRootfs() bool {
method GetSupplementalGroups (line 1493) | func (m *LinuxContainerSecurityContext) GetSupplementalGroups() []int64 {
method GetApparmorProfile (line 1500) | func (m *LinuxContainerSecurityContext) GetApparmorProfile() string {
method GetSeccompProfilePath (line 1507) | func (m *LinuxContainerSecurityContext) GetSeccompProfilePath() string {
method GetNoNewPrivs (line 1514) | func (m *LinuxContainerSecurityContext) GetNoNewPrivs() bool {
method Marshal (line 5952) | func (m *LinuxContainerSecurityContext) Marshal() (dAtA []byte, err er...
method MarshalTo (line 5962) | func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, e...
method Size (line 9186) | func (m *LinuxContainerSecurityContext) Size() (n int) {
method String (line 10757) | func (this *LinuxContainerSecurityContext) String() string {
method Unmarshal (line 16548) | func (m *LinuxContainerSecurityContext) Unmarshal(dAtA []byte) error {
type LinuxContainerConfig (line 1523) | type LinuxContainerConfig struct
method Reset (line 1530) | func (m *LinuxContainerConfig) Reset() { *m = Linux...
method ProtoMessage (line 1531) | func (*LinuxContainerConfig) ProtoMessage() {}
method Descriptor (line 1532) | func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { return fil...
method GetResources (line 1534) | func (m *LinuxContainerConfig) GetResources() *LinuxContainerResources {
method GetSecurityContext (line 1541) | func (m *LinuxContainerConfig) GetSecurityContext() *LinuxContainerSec...
method Marshal (line 6076) | func (m *LinuxContainerConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6086) | func (m *LinuxContainerConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9236) | func (m *LinuxContainerConfig) Size() (n int) {
method String (line 10777) | func (this *LinuxContainerConfig) String() string {
method Unmarshal (line 16939) | func (m *LinuxContainerConfig) Unmarshal(dAtA []byte) error {
type ContainerMetadata (line 1553) | type ContainerMetadata struct
method Reset (line 1560) | func (m *ContainerMetadata) Reset() { *m = Containe...
method ProtoMessage (line 1561) | func (*ContainerMetadata) ProtoMessage() {}
method Descriptor (line 1562) | func (*ContainerMetadata) Descriptor() ([]byte, []int) { return fileDe...
method GetName (line 1564) | func (m *ContainerMetadata) GetName() string {
method GetAttempt (line 1571) | func (m *ContainerMetadata) GetAttempt() uint32 {
method Marshal (line 6114) | func (m *ContainerMetadata) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6124) | func (m *ContainerMetadata) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9250) | func (m *ContainerMetadata) Size() (n int) {
method String (line 10788) | func (this *ContainerMetadata) String() string {
method Unmarshal (line 17055) | func (m *ContainerMetadata) Unmarshal(dAtA []byte) error {
type Device (line 1579) | type Device struct
method Reset (line 1591) | func (m *Device) Reset() { *m = Device{} }
method ProtoMessage (line 1592) | func (*Device) ProtoMessage() {}
method Descriptor (line 1593) | func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorApi...
method GetContainerPath (line 1595) | func (m *Device) GetContainerPath() string {
method GetHostPath (line 1602) | func (m *Device) GetHostPath() string {
method GetPermissions (line 1609) | func (m *Device) GetPermissions() string {
method Marshal (line 6143) | func (m *Device) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6153) | func (m *Device) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9263) | func (m *Device) Size() (n int) {
method String (line 10799) | func (this *Device) String() string {
method Unmarshal (line 17153) | func (m *Device) Unmarshal(dAtA []byte) error {
type ContainerConfig (line 1618) | type ContainerConfig struct
method Reset (line 1678) | func (m *ContainerConfig) Reset() { *m = ContainerC...
method ProtoMessage (line 1679) | func (*ContainerConfig) ProtoMessage() {}
method Descriptor (line 1680) | func (*ContainerConfig) Descriptor() ([]byte, []int) { return fileDesc...
method GetMetadata (line 1682) | func (m *ContainerConfig) GetMetadata() *ContainerMetadata {
method GetImage (line 1689) | func (m *ContainerConfig) GetImage() *ImageSpec {
method GetCommand (line 1696) | func (m *ContainerConfig) GetCommand() []string {
method GetArgs (line 1703) | func (m *ContainerConfig) GetArgs() []string {
method GetWorkingDir (line 1710) | func (m *ContainerConfig) GetWorkingDir() string {
method GetEnvs (line 1717) | func (m *ContainerConfig) GetEnvs() []*KeyValue {
method GetMounts (line 1724) | func (m *ContainerConfig) GetMounts() []*Mount {
method GetDevices (line 1731) | func (m *ContainerConfig) GetDevices() []*Device {
method GetLabels (line 1738) | func (m *ContainerConfig) GetLabels() map[string]string {
method GetAnnotations (line 1745) | func (m *ContainerConfig) GetAnnotations() map[string]string {
method GetLogPath (line 1752) | func (m *ContainerConfig) GetLogPath() string {
method GetStdin (line 1759) | func (m *ContainerConfig) GetStdin() bool {
method GetStdinOnce (line 1766) | func (m *ContainerConfig) GetStdinOnce() bool {
method GetTty (line 1773) | func (m *ContainerConfig) GetTty() bool {
method GetLinux (line 1780) | func (m *ContainerConfig) GetLinux() *LinuxContainerConfig {
method Marshal (line 6179) | func (m *ContainerConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6189) | func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9281) | func (m *ContainerConfig) Size() (n int) {
method String (line 10811) | func (this *ContainerConfig) String() string {
method Unmarshal (line 17290) | func (m *ContainerConfig) Unmarshal(dAtA []byte) error {
type CreateContainerRequest (line 1787) | type CreateContainerRequest struct
method Reset (line 1799) | func (m *CreateContainerRequest) Reset() { *m = Cre...
method ProtoMessage (line 1800) | func (*CreateContainerRequest) ProtoMessage() {}
method Descriptor (line 1801) | func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return f...
method GetPodSandboxId (line 1803) | func (m *CreateContainerRequest) GetPodSandboxId() string {
method GetConfig (line 1810) | func (m *CreateContainerRequest) GetConfig() *ContainerConfig {
method GetSandboxConfig (line 1817) | func (m *CreateContainerRequest) GetSandboxConfig() *PodSandboxConfig {
method Marshal (line 6369) | func (m *CreateContainerRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6379) | func (m *CreateContainerRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9362) | func (m *CreateContainerRequest) Size() (n int) {
method String (line 10855) | func (this *CreateContainerRequest) String() string {
method Unmarshal (line 17940) | func (m *CreateContainerRequest) Unmarshal(dAtA []byte) error {
type CreateContainerResponse (line 1824) | type CreateContainerResponse struct
method Reset (line 1829) | func (m *CreateContainerResponse) Reset() { *m = Cr...
method ProtoMessage (line 1830) | func (*CreateContainerResponse) ProtoMessage() {}
method Descriptor (line 1831) | func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return ...
method GetContainerId (line 1833) | func (m *CreateContainerResponse) GetContainerId() string {
method Marshal (line 6413) | func (m *CreateContainerResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6423) | func (m *CreateContainerResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9380) | func (m *CreateContainerResponse) Size() (n int) {
method String (line 10867) | func (this *CreateContainerResponse) String() string {
method Unmarshal (line 18085) | func (m *CreateContainerResponse) Unmarshal(dAtA []byte) error {
type StartContainerRequest (line 1840) | type StartContainerRequest struct
method Reset (line 1845) | func (m *StartContainerRequest) Reset() { *m = Star...
method ProtoMessage (line 1846) | func (*StartContainerRequest) ProtoMessage() {}
method Descriptor (line 1847) | func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fi...
method GetContainerId (line 1849) | func (m *StartContainerRequest) GetContainerId() string {
method Marshal (line 6437) | func (m *StartContainerRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6447) | func (m *StartContainerRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9390) | func (m *StartContainerRequest) Size() (n int) {
method String (line 10877) | func (this *StartContainerRequest) String() string {
method Unmarshal (line 18164) | func (m *StartContainerRequest) Unmarshal(dAtA []byte) error {
type StartContainerResponse (line 1856) | type StartContainerResponse struct
method Reset (line 1859) | func (m *StartContainerResponse) Reset() { *m = Sta...
method ProtoMessage (line 1860) | func (*StartContainerResponse) ProtoMessage() {}
method Descriptor (line 1861) | func (*StartContainerResponse) Descriptor() ([]byte, []int) { return f...
method Marshal (line 6461) | func (m *StartContainerResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6471) | func (m *StartContainerResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9400) | func (m *StartContainerResponse) Size() (n int) {
method String (line 10887) | func (this *StartContainerResponse) String() string {
method Unmarshal (line 18243) | func (m *StartContainerResponse) Unmarshal(dAtA []byte) error {
type StopContainerRequest (line 1863) | type StopContainerRequest struct
method Reset (line 1871) | func (m *StopContainerRequest) Reset() { *m = StopC...
method ProtoMessage (line 1872) | func (*StopContainerRequest) ProtoMessage() {}
method Descriptor (line 1873) | func (*StopContainerRequest) Descriptor() ([]byte, []int) { return fil...
method GetContainerId (line 1875) | func (m *StopContainerRequest) GetContainerId() string {
method GetTimeout (line 1882) | func (m *StopContainerRequest) GetTimeout() int64 {
method Marshal (line 6479) | func (m *StopContainerRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6489) | func (m *StopContainerRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9406) | func (m *StopContainerRequest) Size() (n int) {
method String (line 10896) | func (this *StopContainerRequest) String() string {
method Unmarshal (line 18293) | func (m *StopContainerRequest) Unmarshal(dAtA []byte) error {
type StopContainerResponse (line 1889) | type StopContainerResponse struct
method Reset (line 1892) | func (m *StopContainerResponse) Reset() { *m = Stop...
method ProtoMessage (line 1893) | func (*StopContainerResponse) ProtoMessage() {}
method Descriptor (line 1894) | func (*StopContainerResponse) Descriptor() ([]byte, []int) { return fi...
method Marshal (line 6508) | func (m *StopContainerResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6518) | func (m *StopContainerResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9419) | func (m *StopContainerResponse) Size() (n int) {
method String (line 10907) | func (this *StopContainerResponse) String() string {
method Unmarshal (line 18391) | func (m *StopContainerResponse) Unmarshal(dAtA []byte) error {
type RemoveContainerRequest (line 1896) | type RemoveContainerRequest struct
method Reset (line 1901) | func (m *RemoveContainerRequest) Reset() { *m = Rem...
method ProtoMessage (line 1902) | func (*RemoveContainerRequest) ProtoMessage() {}
method Descriptor (line 1903) | func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { return f...
method GetContainerId (line 1905) | func (m *RemoveContainerRequest) GetContainerId() string {
method Marshal (line 6526) | func (m *RemoveContainerRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6536) | func (m *RemoveContainerRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9425) | func (m *RemoveContainerRequest) Size() (n int) {
method String (line 10916) | func (this *RemoveContainerRequest) String() string {
method Unmarshal (line 18441) | func (m *RemoveContainerRequest) Unmarshal(dAtA []byte) error {
type RemoveContainerResponse (line 1912) | type RemoveContainerResponse struct
method Reset (line 1915) | func (m *RemoveContainerResponse) Reset() { *m = Re...
method ProtoMessage (line 1916) | func (*RemoveContainerResponse) ProtoMessage() {}
method Descriptor (line 1917) | func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { return ...
method Marshal (line 6550) | func (m *RemoveContainerResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6560) | func (m *RemoveContainerResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9435) | func (m *RemoveContainerResponse) Size() (n int) {
method String (line 10926) | func (this *RemoveContainerResponse) String() string {
method Unmarshal (line 18520) | func (m *RemoveContainerResponse) Unmarshal(dAtA []byte) error {
type ContainerStateValue (line 1920) | type ContainerStateValue struct
method Reset (line 1925) | func (m *ContainerStateValue) Reset() { *m = Contai...
method ProtoMessage (line 1926) | func (*ContainerStateValue) ProtoMessage() {}
method Descriptor (line 1927) | func (*ContainerStateValue) Descriptor() ([]byte, []int) { return file...
method GetState (line 1929) | func (m *ContainerStateValue) GetState() ContainerState {
method Marshal (line 6568) | func (m *ContainerStateValue) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6578) | func (m *ContainerStateValue) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9441) | func (m *ContainerStateValue) Size() (n int) {
method String (line 10935) | func (this *ContainerStateValue) String() string {
method Unmarshal (line 18570) | func (m *ContainerStateValue) Unmarshal(dAtA []byte) error {
type ContainerFilter (line 1938) | type ContainerFilter struct
method Reset (line 1951) | func (m *ContainerFilter) Reset() { *m = ContainerF...
method ProtoMessage (line 1952) | func (*ContainerFilter) ProtoMessage() {}
method Descriptor (line 1953) | func (*ContainerFilter) Descriptor() ([]byte, []int) { return fileDesc...
method GetId (line 1955) | func (m *ContainerFilter) GetId() string {
method GetState (line 1962) | func (m *ContainerFilter) GetState() *ContainerStateValue {
method GetPodSandboxId (line 1969) | func (m *ContainerFilter) GetPodSandboxId() string {
method GetLabelSelector (line 1976) | func (m *ContainerFilter) GetLabelSelector() map[string]string {
method Marshal (line 6591) | func (m *ContainerFilter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6601) | func (m *ContainerFilter) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9450) | func (m *ContainerFilter) Size() (n int) {
method String (line 10945) | func (this *ContainerFilter) String() string {
method Unmarshal (line 18639) | func (m *ContainerFilter) Unmarshal(dAtA []byte) error {
type ListContainersRequest (line 1983) | type ListContainersRequest struct
method Reset (line 1987) | func (m *ListContainersRequest) Reset() { *m = List...
method ProtoMessage (line 1988) | func (*ListContainersRequest) ProtoMessage() {}
method Descriptor (line 1989) | func (*ListContainersRequest) Descriptor() ([]byte, []int) { return fi...
method GetFilter (line 1991) | func (m *ListContainersRequest) GetFilter() *ContainerFilter {
method Marshal (line 6648) | func (m *ListContainersRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6658) | func (m *ListContainersRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9476) | func (m *ListContainersRequest) Size() (n int) {
method String (line 10968) | func (this *ListContainersRequest) String() string {
method Unmarshal (line 18896) | func (m *ListContainersRequest) Unmarshal(dAtA []byte) error {
type Container (line 2000) | type Container struct
method Reset (line 2026) | func (m *Container) Reset() { *m = Container{} }
method ProtoMessage (line 2027) | func (*Container) ProtoMessage() {}
method Descriptor (line 2028) | func (*Container) Descriptor() ([]byte, []int) { return fileDescriptor...
method GetId (line 2030) | func (m *Container) GetId() string {
method GetPodSandboxId (line 2037) | func (m *Container) GetPodSandboxId() string {
method GetMetadata (line 2044) | func (m *Container) GetMetadata() *ContainerMetadata {
method GetImage (line 2051) | func (m *Container) GetImage() *ImageSpec {
method GetImageRef (line 2058) | func (m *Container) GetImageRef() string {
method GetState (line 2065) | func (m *Container) GetState() ContainerState {
method GetCreatedAt (line 2072) | func (m *Container) GetCreatedAt() int64 {
method GetLabels (line 2079) | func (m *Container) GetLabels() map[string]string {
method GetAnnotations (line 2086) | func (m *Container) GetAnnotations() map[string]string {
method Marshal (line 6676) | func (m *Container) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6686) | func (m *Container) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9486) | func (m *Container) Size() (n int) {
method String (line 10978) | func (this *Container) String() string {
method Unmarshal (line 18979) | func (m *Container) Unmarshal(dAtA []byte) error {
type ListContainersResponse (line 2093) | type ListContainersResponse struct
method Reset (line 2098) | func (m *ListContainersResponse) Reset() { *m = Lis...
method ProtoMessage (line 2099) | func (*ListContainersResponse) ProtoMessage() {}
method Descriptor (line 2100) | func (*ListContainersResponse) Descriptor() ([]byte, []int) { return f...
method GetContainers (line 2102) | func (m *ListContainersResponse) GetContainers() []*Container {
method Marshal (line 6776) | func (m *ListContainersResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6786) | func (m *ListContainersResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9534) | func (m *ListContainersResponse) Size() (n int) {
method String (line 11016) | func (this *ListContainersResponse) String() string {
method Unmarshal (line 19452) | func (m *ListContainersResponse) Unmarshal(dAtA []byte) error {
type ContainerStatusRequest (line 2109) | type ContainerStatusRequest struct
method Reset (line 2116) | func (m *ContainerStatusRequest) Reset() { *m = Con...
method ProtoMessage (line 2117) | func (*ContainerStatusRequest) ProtoMessage() {}
method Descriptor (line 2118) | func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { return f...
method GetContainerId (line 2120) | func (m *ContainerStatusRequest) GetContainerId() string {
method GetVerbose (line 2127) | func (m *ContainerStatusRequest) GetVerbose() bool {
method Marshal (line 6806) | func (m *ContainerStatusRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6816) | func (m *ContainerStatusRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9546) | func (m *ContainerStatusRequest) Size() (n int) {
method String (line 11026) | func (this *ContainerStatusRequest) String() string {
method Unmarshal (line 19533) | func (m *ContainerStatusRequest) Unmarshal(dAtA []byte) error {
type ContainerStatus (line 2135) | type ContainerStatus struct
method Reset (line 2173) | func (m *ContainerStatus) Reset() { *m = ContainerS...
method ProtoMessage (line 2174) | func (*ContainerStatus) ProtoMessage() {}
method Descriptor (line 2175) | func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDesc...
method GetId (line 2177) | func (m *ContainerStatus) GetId() string {
method GetMetadata (line 2184) | func (m *ContainerStatus) GetMetadata() *ContainerMetadata {
method GetState (line 2191) | func (m *ContainerStatus) GetState() ContainerState {
method GetCreatedAt (line 2198) | func (m *ContainerStatus) GetCreatedAt() int64 {
method GetStartedAt (line 2205) | func (m *ContainerStatus) GetStartedAt() int64 {
method GetFinishedAt (line 2212) | func (m *ContainerStatus) GetFinishedAt() int64 {
method GetExitCode (line 2219) | func (m *ContainerStatus) GetExitCode() int32 {
method GetImage (line 2226) | func (m *ContainerStatus) GetImage() *ImageSpec {
method GetImageRef (line 2233) | func (m *ContainerStatus) GetImageRef() string {
method GetReason (line 2240) | func (m *ContainerStatus) GetReason() string {
method GetMessage (line 2247) | func (m *ContainerStatus) GetMessage() string {
method GetLabels (line 2254) | func (m *ContainerStatus) GetLabels() map[string]string {
method GetAnnotations (line 2261) | func (m *ContainerStatus) GetAnnotations() map[string]string {
method GetMounts (line 2268) | func (m *ContainerStatus) GetMounts() []*Mount {
method GetLogPath (line 2275) | func (m *ContainerStatus) GetLogPath() string {
method Marshal (line 6840) | func (m *ContainerStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6850) | func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9559) | func (m *ContainerStatus) Size() (n int) {
method String (line 11037) | func (this *ContainerStatus) String() string {
method Unmarshal (line 19632) | func (m *ContainerStatus) Unmarshal(dAtA []byte) error {
type ContainerStatusResponse (line 2282) | type ContainerStatusResponse struct
method Reset (line 2292) | func (m *ContainerStatusResponse) Reset() { *m = Co...
method ProtoMessage (line 2293) | func (*ContainerStatusResponse) ProtoMessage() {}
method Descriptor (line 2294) | func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { return ...
method GetStatus (line 2296) | func (m *ContainerStatusResponse) GetStatus() *ContainerStatus {
method GetInfo (line 2303) | func (m *ContainerStatusResponse) GetInfo() map[string]string {
method Marshal (line 6979) | func (m *ContainerStatusResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 6989) | func (m *ContainerStatusResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9630) | func (m *ContainerStatusResponse) Size() (n int) {
method String (line 11081) | func (this *ContainerStatusResponse) String() string {
method Unmarshal (line 20251) | func (m *ContainerStatusResponse) Unmarshal(dAtA []byte) error {
type UpdateContainerResourcesRequest (line 2310) | type UpdateContainerResourcesRequest struct
method Reset (line 2317) | func (m *UpdateContainerResourcesRequest) Reset() { *m = UpdateCo...
method ProtoMessage (line 2318) | func (*UpdateContainerResourcesRequest) ProtoMessage() {}
method Descriptor (line 2319) | func (*UpdateContainerResourcesRequest) Descriptor() ([]byte, []int) {
method GetContainerId (line 2323) | func (m *UpdateContainerResourcesRequest) GetContainerId() string {
method GetLinux (line 2330) | func (m *UpdateContainerResourcesRequest) GetLinux() *LinuxContainerRe...
method Marshal (line 7024) | func (m *UpdateContainerResourcesRequest) Marshal() (dAtA []byte, err ...
method MarshalTo (line 7034) | func (m *UpdateContainerResourcesRequest) MarshalTo(dAtA []byte) (int,...
method Size (line 9648) | func (m *UpdateContainerResourcesRequest) Size() (n int) {
method String (line 11102) | func (this *UpdateContainerResourcesRequest) String() string {
method Unmarshal (line 20450) | func (m *UpdateContainerResourcesRequest) Unmarshal(dAtA []byte) error {
type UpdateContainerResourcesResponse (line 2337) | type UpdateContainerResourcesResponse struct
method Reset (line 2340) | func (m *UpdateContainerResourcesResponse) Reset() { *m = UpdateC...
method ProtoMessage (line 2341) | func (*UpdateContainerResourcesResponse) ProtoMessage() {}
method Descriptor (line 2342) | func (*UpdateContainerResourcesResponse) Descriptor() ([]byte, []int) {
method Marshal (line 7058) | func (m *UpdateContainerResourcesResponse) Marshal() (dAtA []byte, err...
method MarshalTo (line 7068) | func (m *UpdateContainerResourcesResponse) MarshalTo(dAtA []byte) (int...
method Size (line 9662) | func (m *UpdateContainerResourcesResponse) Size() (n int) {
method String (line 11113) | func (this *UpdateContainerResourcesResponse) String() string {
method Unmarshal (line 20562) | func (m *UpdateContainerResourcesResponse) Unmarshal(dAtA []byte) error {
type ExecSyncRequest (line 2346) | type ExecSyncRequest struct
method Reset (line 2355) | func (m *ExecSyncRequest) Reset() { *m = ExecSyncRe...
method ProtoMessage (line 2356) | func (*ExecSyncRequest) ProtoMessage() {}
method Descriptor (line 2357) | func (*ExecSyncRequest) Descriptor() ([]byte, []int) { return fileDesc...
method GetContainerId (line 2359) | func (m *ExecSyncRequest) GetContainerId() string {
method GetCmd (line 2366) | func (m *ExecSyncRequest) GetCmd() []string {
method GetTimeout (line 2373) | func (m *ExecSyncRequest) GetTimeout() int64 {
method Marshal (line 7076) | func (m *ExecSyncRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7086) | func (m *ExecSyncRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9668) | func (m *ExecSyncRequest) Size() (n int) {
method String (line 11122) | func (this *ExecSyncRequest) String() string {
method Unmarshal (line 20612) | func (m *ExecSyncRequest) Unmarshal(dAtA []byte) error {
type ExecSyncResponse (line 2380) | type ExecSyncResponse struct
method Reset (line 2389) | func (m *ExecSyncResponse) Reset() { *m = ExecSyncR...
method ProtoMessage (line 2390) | func (*ExecSyncResponse) ProtoMessage() {}
method Descriptor (line 2391) | func (*ExecSyncResponse) Descriptor() ([]byte, []int) { return fileDes...
method GetStdout (line 2393) | func (m *ExecSyncResponse) GetStdout() []byte {
method GetStderr (line 2400) | func (m *ExecSyncResponse) GetStderr() []byte {
method GetExitCode (line 2407) | func (m *ExecSyncResponse) GetExitCode() int32 {
method Marshal (line 7120) | func (m *ExecSyncResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7130) | func (m *ExecSyncResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9687) | func (m *ExecSyncResponse) Size() (n int) {
method String (line 11134) | func (this *ExecSyncResponse) String() string {
method Unmarshal (line 20739) | func (m *ExecSyncResponse) Unmarshal(dAtA []byte) error {
type ExecRequest (line 2414) | type ExecRequest struct
method Reset (line 2435) | func (m *ExecRequest) Reset() { *m = ExecRequest{} }
method ProtoMessage (line 2436) | func (*ExecRequest) ProtoMessage() {}
method Descriptor (line 2437) | func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescript...
method GetContainerId (line 2439) | func (m *ExecRequest) GetContainerId() string {
method GetCmd (line 2446) | func (m *ExecRequest) GetCmd() []string {
method GetTty (line 2453) | func (m *ExecRequest) GetTty() bool {
method GetStdin (line 2460) | func (m *ExecRequest) GetStdin() bool {
method GetStdout (line 2467) | func (m *ExecRequest) GetStdout() bool {
method GetStderr (line 2474) | func (m *ExecRequest) GetStderr() bool {
method Marshal (line 7155) | func (m *ExecRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7165) | func (m *ExecRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9704) | func (m *ExecRequest) Size() (n int) {
method String (line 11146) | func (this *ExecRequest) String() string {
method Unmarshal (line 20870) | func (m *ExecRequest) Unmarshal(dAtA []byte) error {
type ExecResponse (line 2481) | type ExecResponse struct
method Reset (line 2486) | func (m *ExecResponse) Reset() { *m = ExecResponse{} }
method ProtoMessage (line 2487) | func (*ExecResponse) ProtoMessage() {}
method Descriptor (line 2488) | func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescrip...
method GetUrl (line 2490) | func (m *ExecResponse) GetUrl() string {
method Marshal (line 7234) | func (m *ExecResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7244) | func (m *ExecResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9732) | func (m *ExecResponse) Size() (n int) {
method String (line 11161) | func (this *ExecResponse) String() string {
method Unmarshal (line 21058) | func (m *ExecResponse) Unmarshal(dAtA []byte) error {
type AttachRequest (line 2497) | type AttachRequest struct
method Reset (line 2517) | func (m *AttachRequest) Reset() { *m = AttachReques...
method ProtoMessage (line 2518) | func (*AttachRequest) ProtoMessage() {}
method Descriptor (line 2519) | func (*AttachRequest) Descriptor() ([]byte, []int) { return fileDescri...
method GetContainerId (line 2521) | func (m *AttachRequest) GetContainerId() string {
method GetStdin (line 2528) | func (m *AttachRequest) GetStdin() bool {
method GetTty (line 2535) | func (m *AttachRequest) GetTty() bool {
method GetStdout (line 2542) | func (m *AttachRequest) GetStdout() bool {
method GetStderr (line 2549) | func (m *AttachRequest) GetStderr() bool {
method Marshal (line 7258) | func (m *AttachRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7268) | func (m *AttachRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9742) | func (m *AttachRequest) Size() (n int) {
method String (line 11171) | func (this *AttachRequest) String() string {
method Unmarshal (line 21137) | func (m *AttachRequest) Unmarshal(dAtA []byte) error {
type AttachResponse (line 2556) | type AttachResponse struct
method Reset (line 2561) | func (m *AttachResponse) Reset() { *m = AttachRespo...
method ProtoMessage (line 2562) | func (*AttachResponse) ProtoMessage() {}
method Descriptor (line 2563) | func (*AttachResponse) Descriptor() ([]byte, []int) { return fileDescr...
method GetUrl (line 2565) | func (m *AttachResponse) GetUrl() string {
method Marshal (line 7322) | func (m *AttachResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7332) | func (m *AttachResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9764) | func (m *AttachResponse) Size() (n int) {
method String (line 11185) | func (this *AttachResponse) String() string {
method Unmarshal (line 21296) | func (m *AttachResponse) Unmarshal(dAtA []byte) error {
type PortForwardRequest (line 2572) | type PortForwardRequest struct
method Reset (line 2579) | func (m *PortForwardRequest) Reset() { *m = PortFor...
method ProtoMessage (line 2580) | func (*PortForwardRequest) ProtoMessage() {}
method Descriptor (line 2581) | func (*PortForwardRequest) Descriptor() ([]byte, []int) { return fileD...
method GetPodSandboxId (line 2583) | func (m *PortForwardRequest) GetPodSandboxId() string {
method GetPort (line 2590) | func (m *PortForwardRequest) GetPort() []int32 {
method Marshal (line 7346) | func (m *PortForwardRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7356) | func (m *PortForwardRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9774) | func (m *PortForwardRequest) Size() (n int) {
method String (line 11195) | func (this *PortForwardRequest) String() string {
method Unmarshal (line 21375) | func (m *PortForwardRequest) Unmarshal(dAtA []byte) error {
type PortForwardResponse (line 2597) | type PortForwardResponse struct
method Reset (line 2602) | func (m *PortForwardResponse) Reset() { *m = PortFo...
method ProtoMessage (line 2603) | func (*PortForwardResponse) ProtoMessage() {}
method Descriptor (line 2604) | func (*PortForwardResponse) Descriptor() ([]byte, []int) { return file...
method GetUrl (line 2606) | func (m *PortForwardResponse) GetUrl() string {
method Marshal (line 7388) | func (m *PortForwardResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7398) | func (m *PortForwardResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9791) | func (m *PortForwardResponse) Size() (n int) {
method String (line 11206) | func (this *PortForwardResponse) String() string {
method Unmarshal (line 21516) | func (m *PortForwardResponse) Unmarshal(dAtA []byte) error {
type ImageFilter (line 2613) | type ImageFilter struct
method Reset (line 2618) | func (m *ImageFilter) Reset() { *m = ImageFilter{} }
method ProtoMessage (line 2619) | func (*ImageFilter) ProtoMessage() {}
method Descriptor (line 2620) | func (*ImageFilter) Descriptor() ([]byte, []int) { return fileDescript...
method GetImage (line 2622) | func (m *ImageFilter) GetImage() *ImageSpec {
method Marshal (line 7412) | func (m *ImageFilter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7422) | func (m *ImageFilter) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9801) | func (m *ImageFilter) Size() (n int) {
method String (line 11216) | func (this *ImageFilter) String() string {
method Unmarshal (line 21595) | func (m *ImageFilter) Unmarshal(dAtA []byte) error {
type ListImagesRequest (line 2629) | type ListImagesRequest struct
method Reset (line 2634) | func (m *ListImagesRequest) Reset() { *m = ListImag...
method ProtoMessage (line 2635) | func (*ListImagesRequest) ProtoMessage() {}
method Descriptor (line 2636) | func (*ListImagesRequest) Descriptor() ([]byte, []int) { return fileDe...
method GetFilter (line 2638) | func (m *ListImagesRequest) GetFilter() *ImageFilter {
method Marshal (line 7440) | func (m *ListImagesRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7450) | func (m *ListImagesRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9811) | func (m *ListImagesRequest) Size() (n int) {
method String (line 11226) | func (this *ListImagesRequest) String() string {
method Unmarshal (line 21678) | func (m *ListImagesRequest) Unmarshal(dAtA []byte) error {
type Image (line 2646) | type Image struct
method Reset (line 2664) | func (m *Image) Reset() { *m = Image{} }
method ProtoMessage (line 2665) | func (*Image) ProtoMessage() {}
method Descriptor (line 2666) | func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorApi,...
method GetId (line 2668) | func (m *Image) GetId() string {
method GetRepoTags (line 2675) | func (m *Image) GetRepoTags() []string {
method GetRepoDigests (line 2682) | func (m *Image) GetRepoDigests() []string {
method GetSize_ (line 2689) | func (m *Image) GetSize_() uint64 {
method GetUid (line 2696) | func (m *Image) GetUid() *Int64Value {
method GetUsername (line 2703) | func (m *Image) GetUsername() string {
method Marshal (line 7468) | func (m *Image) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7478) | func (m *Image) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9821) | func (m *Image) Size() (n int) {
method String (line 11236) | func (this *Image) String() string {
method Unmarshal (line 21761) | func (m *Image) Unmarshal(dAtA []byte) error {
type ListImagesResponse (line 2710) | type ListImagesResponse struct
method Reset (line 2715) | func (m *ListImagesResponse) Reset() { *m = ListIma...
method ProtoMessage (line 2716) | func (*ListImagesResponse) ProtoMessage() {}
method Descriptor (line 2717) | func (*ListImagesResponse) Descriptor() ([]byte, []int) { return fileD...
method GetImages (line 2719) | func (m *ListImagesResponse) GetImages() []*Image {
method Marshal (line 7543) | func (m *ListImagesResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7553) | func (m *ListImagesResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9854) | func (m *ListImagesResponse) Size() (n int) {
method String (line 11251) | func (this *ListImagesResponse) String() string {
method Unmarshal (line 21979) | func (m *ListImagesResponse) Unmarshal(dAtA []byte) error {
type ImageStatusRequest (line 2726) | type ImageStatusRequest struct
method Reset (line 2733) | func (m *ImageStatusRequest) Reset() { *m = ImageSt...
method ProtoMessage (line 2734) | func (*ImageStatusRequest) ProtoMessage() {}
method Descriptor (line 2735) | func (*ImageStatusRequest) Descriptor() ([]byte, []int) { return fileD...
method GetImage (line 2737) | func (m *ImageStatusRequest) GetImage() *ImageSpec {
method GetVerbose (line 2744) | func (m *ImageStatusRequest) GetVerbose() bool {
method Marshal (line 7573) | func (m *ImageStatusRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7583) | func (m *ImageStatusRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9866) | func (m *ImageStatusRequest) Size() (n int) {
method String (line 11261) | func (this *ImageStatusRequest) String() string {
method Unmarshal (line 22060) | func (m *ImageStatusRequest) Unmarshal(dAtA []byte) error {
type ImageStatusResponse (line 2751) | type ImageStatusResponse struct
method Reset (line 2761) | func (m *ImageStatusResponse) Reset() { *m = ImageS...
method ProtoMessage (line 2762) | func (*ImageStatusResponse) ProtoMessage() {}
method Descriptor (line 2763) | func (*ImageStatusResponse) Descriptor() ([]byte, []int) { return file...
method GetImage (line 2765) | func (m *ImageStatusResponse) GetImage() *Image {
method GetInfo (line 2772) | func (m *ImageStatusResponse) GetInfo() map[string]string {
method Marshal (line 7611) | func (m *ImageStatusResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7621) | func (m *ImageStatusResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9879) | func (m *ImageStatusResponse) Size() (n int) {
method String (line 11272) | func (this *ImageStatusResponse) String() string {
method Unmarshal (line 22163) | func (m *ImageStatusResponse) Unmarshal(dAtA []byte) error {
type AuthConfig (line 2780) | type AuthConfig struct
method Reset (line 2792) | func (m *AuthConfig) Reset() { *m = AuthConfig{} }
method ProtoMessage (line 2793) | func (*AuthConfig) ProtoMessage() {}
method Descriptor (line 2794) | func (*AuthConfig) Descriptor() ([]byte, []int) { return fileDescripto...
method GetUsername (line 2796) | func (m *AuthConfig) GetUsername() string {
method GetPassword (line 2803) | func (m *AuthConfig) GetPassword() string {
method GetAuth (line 2810) | func (m *AuthConfig) GetAuth() string {
method GetServerAddress (line 2817) | func (m *AuthConfig) GetServerAddress() string {
method GetIdentityToken (line 2824) | func (m *AuthConfig) GetIdentityToken() string {
method GetRegistryToken (line 2831) | func (m *AuthConfig) GetRegistryToken() string {
method Marshal (line 7656) | func (m *AuthConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7666) | func (m *AuthConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9897) | func (m *AuthConfig) Size() (n int) {
method String (line 11293) | func (this *AuthConfig) String() string {
method Unmarshal (line 22362) | func (m *AuthConfig) Unmarshal(dAtA []byte) error {
type PullImageRequest (line 2838) | type PullImageRequest struct
method Reset (line 2847) | func (m *PullImageRequest) Reset() { *m = PullImage...
method ProtoMessage (line 2848) | func (*PullImageRequest) ProtoMessage() {}
method Descriptor (line 2849) | func (*PullImageRequest) Descriptor() ([]byte, []int) { return fileDes...
method GetImage (line 2851) | func (m *PullImageRequest) GetImage() *ImageSpec {
method GetAuth (line 2858) | func (m *PullImageRequest) GetAuth() *AuthConfig {
method GetSandboxConfig (line 2865) | func (m *PullImageRequest) GetSandboxConfig() *PodSandboxConfig {
method Marshal (line 7710) | func (m *PullImageRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7720) | func (m *PullImageRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9927) | func (m *PullImageRequest) Size() (n int) {
method String (line 11308) | func (this *PullImageRequest) String() string {
method Unmarshal (line 22586) | func (m *PullImageRequest) Unmarshal(dAtA []byte) error {
type PullImageResponse (line 2872) | type PullImageResponse struct
method Reset (line 2878) | func (m *PullImageResponse) Reset() { *m = PullImag...
method ProtoMessage (line 2879) | func (*PullImageResponse) ProtoMessage() {}
method Descriptor (line 2880) | func (*PullImageResponse) Descriptor() ([]byte, []int) { return fileDe...
method GetImageRef (line 2882) | func (m *PullImageResponse) GetImageRef() string {
method Marshal (line 7758) | func (m *PullImageResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7768) | func (m *PullImageResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9945) | func (m *PullImageResponse) Size() (n int) {
method String (line 11320) | func (this *PullImageResponse) String() string {
method Unmarshal (line 22735) | func (m *PullImageResponse) Unmarshal(dAtA []byte) error {
type RemoveImageRequest (line 2889) | type RemoveImageRequest struct
method Reset (line 2894) | func (m *RemoveImageRequest) Reset() { *m = RemoveI...
method ProtoMessage (line 2895) | func (*RemoveImageRequest) ProtoMessage() {}
method Descriptor (line 2896) | func (*RemoveImageRequest) Descriptor() ([]byte, []int) { return fileD...
method GetImage (line 2898) | func (m *RemoveImageRequest) GetImage() *ImageSpec {
method Marshal (line 7782) | func (m *RemoveImageRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7792) | func (m *RemoveImageRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9955) | func (m *RemoveImageRequest) Size() (n int) {
method String (line 11330) | func (this *RemoveImageRequest) String() string {
method Unmarshal (line 22814) | func (m *RemoveImageRequest) Unmarshal(dAtA []byte) error {
type RemoveImageResponse (line 2905) | type RemoveImageResponse struct
method Reset (line 2908) | func (m *RemoveImageResponse) Reset() { *m = Remove...
method ProtoMessage (line 2909) | func (*RemoveImageResponse) ProtoMessage() {}
method Descriptor (line 2910) | func (*RemoveImageResponse) Descriptor() ([]byte, []int) { return file...
method Marshal (line 7810) | func (m *RemoveImageResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7820) | func (m *RemoveImageResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9965) | func (m *RemoveImageResponse) Size() (n int) {
method String (line 11340) | func (this *RemoveImageResponse) String() string {
method Unmarshal (line 22897) | func (m *RemoveImageResponse) Unmarshal(dAtA []byte) error {
type NetworkConfig (line 2912) | type NetworkConfig struct
method Reset (line 2917) | func (m *NetworkConfig) Reset() { *m = NetworkConfi...
method ProtoMessage (line 2918) | func (*NetworkConfig) ProtoMessage() {}
method Descriptor (line 2919) | func (*NetworkConfig) Descriptor() ([]byte, []int) { return fileDescri...
method GetPodCidr (line 2921) | func (m *NetworkConfig) GetPodCidr() string {
method Marshal (line 7828) | func (m *NetworkConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7838) | func (m *NetworkConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9971) | func (m *NetworkConfig) Size() (n int) {
method String (line 11349) | func (this *NetworkConfig) String() string {
method Unmarshal (line 22947) | func (m *NetworkConfig) Unmarshal(dAtA []byte) error {
type RuntimeConfig (line 2928) | type RuntimeConfig struct
method Reset (line 2932) | func (m *RuntimeConfig) Reset() { *m = RuntimeConfi...
method ProtoMessage (line 2933) | func (*RuntimeConfig) ProtoMessage() {}
method Descriptor (line 2934) | func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescri...
method GetNetworkConfig (line 2936) | func (m *RuntimeConfig) GetNetworkConfig() *NetworkConfig {
method Marshal (line 7852) | func (m *RuntimeConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7862) | func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) {
method Size (line 9981) | func (m *RuntimeConfig) Size() (n int) {
method String (line 11359) | func (this *RuntimeConfig) String() string {
method Unmarshal (line 23026) | func (m *RuntimeConfig) Unmarshal(dAtA []byte) error {
type UpdateRuntimeConfigRequest (line 2943) | type UpdateRuntimeConfigRequest struct
method Reset (line 2947) | func (m *UpdateRuntimeConfigRequest) Reset() { *m =...
method ProtoMessage (line 2948) | func (*UpdateRuntimeConfigRequest) ProtoMessage() {}
method Descriptor (line 2949) | func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { retu...
method GetRuntimeConfig (line 2951) | func (m *UpdateRuntimeConfigRequest) GetRuntimeConfig() *RuntimeConfig {
method Marshal (line 7880) | func (m *UpdateRuntimeConfigRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7890) | func (m *UpdateRuntimeConfigRequest) MarshalTo(dAtA []byte) (int, erro...
method Size (line 9991) | func (m *UpdateRuntimeConfigRequest) Size() (n int) {
method String (line 11369) | func (this *UpdateRuntimeConfigRequest) String() string {
method Unmarshal (line 23109) | func (m *UpdateRuntimeConfigRequest) Unmarshal(dAtA []byte) error {
type UpdateRuntimeConfigResponse (line 2958) | type UpdateRuntimeConfigResponse struct
method Reset (line 2961) | func (m *UpdateRuntimeConfigResponse) Reset() { *m ...
method ProtoMessage (line 2962) | func (*UpdateRuntimeConfigResponse) ProtoMessage() {}
method Descriptor (line 2963) | func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { ret...
method Marshal (line 7908) | func (m *UpdateRuntimeConfigResponse) Marshal() (dAtA []byte, err erro...
method MarshalTo (line 7918) | func (m *UpdateRuntimeConfigResponse) MarshalTo(dAtA []byte) (int, err...
method Size (line 10001) | func (m *UpdateRuntimeConfigResponse) Size() (n int) {
method String (line 11379) | func (this *UpdateRuntimeConfigResponse) String() string {
method Unmarshal (line 23192) | func (m *UpdateRuntimeConfigResponse) Unmarshal(dAtA []byte) error {
type RuntimeCondition (line 2978) | type RuntimeCondition struct
method Reset (line 2989) | func (m *RuntimeCondition) Reset() { *m = RuntimeCo...
method ProtoMessage (line 2990) | func (*RuntimeCondition) ProtoMessage() {}
method Descriptor (line 2991) | func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDes...
method GetType (line 2993) | func (m *RuntimeCondition) GetType() string {
method GetStatus (line 3000) | func (m *RuntimeCondition) GetStatus() bool {
method GetReason (line 3007) | func (m *RuntimeCondition) GetReason() string {
method GetMessage (line 3014) | func (m *RuntimeCondition) GetMessage() string {
method Marshal (line 7926) | func (m *RuntimeCondition) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7936) | func (m *RuntimeCondition) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10007) | func (m *RuntimeCondition) Size() (n int) {
method String (line 11388) | func (this *RuntimeCondition) String() string {
method Unmarshal (line 23242) | func (m *RuntimeCondition) Unmarshal(dAtA []byte) error {
type RuntimeStatus (line 3022) | type RuntimeStatus struct
method Reset (line 3027) | func (m *RuntimeStatus) Reset() { *m = RuntimeStatu...
method ProtoMessage (line 3028) | func (*RuntimeStatus) ProtoMessage() {}
method Descriptor (line 3029) | func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescri...
method GetConditions (line 3031) | func (m *RuntimeStatus) GetConditions() []*RuntimeCondition {
method Marshal (line 7972) | func (m *RuntimeStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 7982) | func (m *RuntimeStatus) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10028) | func (m *RuntimeStatus) Size() (n int) {
method String (line 11401) | func (this *RuntimeStatus) String() string {
method Unmarshal (line 23399) | func (m *RuntimeStatus) Unmarshal(dAtA []byte) error {
type StatusRequest (line 3038) | type StatusRequest struct
method Reset (line 3043) | func (m *StatusRequest) Reset() { *m = StatusReques...
method ProtoMessage (line 3044) | func (*StatusRequest) ProtoMessage() {}
method Descriptor (line 3045) | func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescri...
method GetVerbose (line 3047) | func (m *StatusRequest) GetVerbose() bool {
method Marshal (line 8002) | func (m *StatusRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8012) | func (m *StatusRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10040) | func (m *StatusRequest) Size() (n int) {
method String (line 11411) | func (this *StatusRequest) String() string {
method Unmarshal (line 23480) | func (m *StatusRequest) Unmarshal(dAtA []byte) error {
type StatusResponse (line 3054) | type StatusResponse struct
method Reset (line 3064) | func (m *StatusResponse) Reset() { *m = StatusRespo...
method ProtoMessage (line 3065) | func (*StatusResponse) ProtoMessage() {}
method Descriptor (line 3066) | func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescr...
method GetStatus (line 3068) | func (m *StatusResponse) GetStatus() *RuntimeStatus {
method GetInfo (line 3075) | func (m *StatusResponse) GetInfo() map[string]string {
method Marshal (line 8030) | func (m *StatusResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8040) | func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10049) | func (m *StatusResponse) Size() (n int) {
method String (line 11421) | func (this *StatusResponse) String() string {
method Unmarshal (line 23550) | func (m *StatusResponse) Unmarshal(dAtA []byte) error {
type ImageFsInfoRequest (line 3082) | type ImageFsInfoRequest struct
method Reset (line 3085) | func (m *ImageFsInfoRequest) Reset() { *m = ImageFs...
method ProtoMessage (line 3086) | func (*ImageFsInfoRequest) ProtoMessage() {}
method Descriptor (line 3087) | func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { return fileD...
method Marshal (line 8075) | func (m *ImageFsInfoRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8085) | func (m *ImageFsInfoRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10067) | func (m *ImageFsInfoRequest) Size() (n int) {
method String (line 11442) | func (this *ImageFsInfoRequest) String() string {
method Unmarshal (line 23749) | func (m *ImageFsInfoRequest) Unmarshal(dAtA []byte) error {
type UInt64Value (line 3090) | type UInt64Value struct
method Reset (line 3095) | func (m *UInt64Value) Reset() { *m = UInt64Value{} }
method ProtoMessage (line 3096) | func (*UInt64Value) ProtoMessage() {}
method Descriptor (line 3097) | func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescript...
method GetValue (line 3099) | func (m *UInt64Value) GetValue() uint64 {
method Marshal (line 8093) | func (m *UInt64Value) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8103) | func (m *UInt64Value) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10073) | func (m *UInt64Value) Size() (n int) {
method String (line 11451) | func (this *UInt64Value) String() string {
method Unmarshal (line 23799) | func (m *UInt64Value) Unmarshal(dAtA []byte) error {
type StorageIdentifier (line 3107) | type StorageIdentifier struct
method Reset (line 3112) | func (m *StorageIdentifier) Reset() { *m = StorageI...
method ProtoMessage (line 3113) | func (*StorageIdentifier) ProtoMessage() {}
method Descriptor (line 3114) | func (*StorageIdentifier) Descriptor() ([]byte, []int) { return fileDe...
method GetUuid (line 3116) | func (m *StorageIdentifier) GetUuid() string {
method Marshal (line 8116) | func (m *StorageIdentifier) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8126) | func (m *StorageIdentifier) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10082) | func (m *StorageIdentifier) Size() (n int) {
method String (line 11461) | func (this *StorageIdentifier) String() string {
method Unmarshal (line 23868) | func (m *StorageIdentifier) Unmarshal(dAtA []byte) error {
type FilesystemUsage (line 3124) | type FilesystemUsage struct
method Reset (line 3139) | func (m *FilesystemUsage) Reset() { *m = Filesystem...
method ProtoMessage (line 3140) | func (*FilesystemUsage) ProtoMessage() {}
method Descriptor (line 3141) | func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDesc...
method GetTimestamp (line 3143) | func (m *FilesystemUsage) GetTimestamp() int64 {
method GetStorageId (line 3150) | func (m *FilesystemUsage) GetStorageId() *StorageIdentifier {
method GetUsedBytes (line 3157) | func (m *FilesystemUsage) GetUsedBytes() *UInt64Value {
method GetInodesUsed (line 3164) | func (m *FilesystemUsage) GetInodesUsed() *UInt64Value {
method Marshal (line 8140) | func (m *FilesystemUsage) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8150) | func (m *FilesystemUsage) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10092) | func (m *FilesystemUsage) Size() (n int) {
method String (line 11471) | func (this *FilesystemUsage) String() string {
method Unmarshal (line 23947) | func (m *FilesystemUsage) Unmarshal(dAtA []byte) error {
type ImageFsInfoResponse (line 3171) | type ImageFsInfoResponse struct
method Reset (line 3176) | func (m *ImageFsInfoResponse) Reset() { *m = ImageF...
method ProtoMessage (line 3177) | func (*ImageFsInfoResponse) ProtoMessage() {}
method Descriptor (line 3178) | func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return file...
method GetImageFilesystems (line 3180) | func (m *ImageFsInfoResponse) GetImageFilesystems() []*FilesystemUsage {
method Marshal (line 8193) | func (m *ImageFsInfoResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8203) | func (m *ImageFsInfoResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10113) | func (m *ImageFsInfoResponse) Size() (n int) {
method String (line 11484) | func (this *ImageFsInfoResponse) String() string {
method Unmarshal (line 24115) | func (m *ImageFsInfoResponse) Unmarshal(dAtA []byte) error {
type ContainerStatsRequest (line 3187) | type ContainerStatsRequest struct
method Reset (line 3192) | func (m *ContainerStatsRequest) Reset() { *m = Cont...
method ProtoMessage (line 3193) | func (*ContainerStatsRequest) ProtoMessage() {}
method Descriptor (line 3194) | func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fi...
method GetContainerId (line 3196) | func (m *ContainerStatsRequest) GetContainerId() string {
method Marshal (line 8223) | func (m *ContainerStatsRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8233) | func (m *ContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10125) | func (m *ContainerStatsRequest) Size() (n int) {
method String (line 11494) | func (this *ContainerStatsRequest) String() string {
method Unmarshal (line 24196) | func (m *ContainerStatsRequest) Unmarshal(dAtA []byte) error {
type ContainerStatsResponse (line 3203) | type ContainerStatsResponse struct
method Reset (line 3208) | func (m *ContainerStatsResponse) Reset() { *m = Con...
method ProtoMessage (line 3209) | func (*ContainerStatsResponse) ProtoMessage() {}
method Descriptor (line 3210) | func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return f...
method GetStats (line 3212) | func (m *ContainerStatsResponse) GetStats() *ContainerStats {
method Marshal (line 8247) | func (m *ContainerStatsResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8257) | func (m *ContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10135) | func (m *ContainerStatsResponse) Size() (n int) {
method String (line 11504) | func (this *ContainerStatsResponse) String() string {
method Unmarshal (line 24275) | func (m *ContainerStatsResponse) Unmarshal(dAtA []byte) error {
type ListContainerStatsRequest (line 3219) | type ListContainerStatsRequest struct
method Reset (line 3224) | func (m *ListContainerStatsRequest) Reset() { *m = ...
method ProtoMessage (line 3225) | func (*ListContainerStatsRequest) ProtoMessage() {}
method Descriptor (line 3226) | func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { retur...
method GetFilter (line 3228) | func (m *ListContainerStatsRequest) GetFilter() *ContainerStatsFilter {
method Marshal (line 8275) | func (m *ListContainerStatsRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8285) | func (m *ListContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10145) | func (m *ListContainerStatsRequest) Size() (n int) {
method String (line 11514) | func (this *ListContainerStatsRequest) String() string {
method Unmarshal (line 24358) | func (m *ListContainerStatsRequest) Unmarshal(dAtA []byte) error {
type ContainerStatsFilter (line 3237) | type ContainerStatsFilter struct
method Reset (line 3248) | func (m *ContainerStatsFilter) Reset() { *m = Conta...
method ProtoMessage (line 3249) | func (*ContainerStatsFilter) ProtoMessage() {}
method Descriptor (line 3250) | func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fil...
method GetId (line 3252) | func (m *ContainerStatsFilter) GetId() string {
method GetPodSandboxId (line 3259) | func (m *ContainerStatsFilter) GetPodSandboxId() string {
method GetLabelSelector (line 3266) | func (m *ContainerStatsFilter) GetLabelSelector() map[string]string {
method Marshal (line 8303) | func (m *ContainerStatsFilter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8313) | func (m *ContainerStatsFilter) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10155) | func (m *ContainerStatsFilter) Size() (n int) {
method String (line 11524) | func (this *ContainerStatsFilter) String() string {
method Unmarshal (line 24441) | func (m *ContainerStatsFilter) Unmarshal(dAtA []byte) error {
type ListContainerStatsResponse (line 3273) | type ListContainerStatsResponse struct
method Reset (line 3278) | func (m *ListContainerStatsResponse) Reset() { *m =...
method ProtoMessage (line 3279) | func (*ListContainerStatsResponse) ProtoMessage() {}
method Descriptor (line 3280) | func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { retu...
method GetStats (line 3282) | func (m *ListContainerStatsResponse) GetStats() []*ContainerStats {
method Marshal (line 8350) | func (m *ListContainerStatsResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8360) | func (m *ListContainerStatsResponse) MarshalTo(dAtA []byte) (int, erro...
method Size (line 10177) | func (m *ListContainerStatsResponse) Size() (n int) {
method String (line 11546) | func (this *ListContainerStatsResponse) String() string {
method Unmarshal (line 24665) | func (m *ListContainerStatsResponse) Unmarshal(dAtA []byte) error {
type ContainerAttributes (line 3290) | type ContainerAttributes struct
method Reset (line 3304) | func (m *ContainerAttributes) Reset() { *m = Contai...
method ProtoMessage (line 3305) | func (*ContainerAttributes) ProtoMessage() {}
method Descriptor (line 3306) | func (*ContainerAttributes) Descriptor() ([]byte, []int) { return file...
method GetId (line 3308) | func (m *ContainerAttributes) GetId() string {
method GetMetadata (line 3315) | func (m *ContainerAttributes) GetMetadata() *ContainerMetadata {
method GetLabels (line 3322) | func (m *ContainerAttributes) GetLabels() map[string]string {
method GetAnnotations (line 3329) | func (m *ContainerAttributes) GetAnnotations() map[string]string {
method Marshal (line 8380) | func (m *ContainerAttributes) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8390) | func (m *ContainerAttributes) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10189) | func (m *ContainerAttributes) Size() (n int) {
method String (line 11556) | func (this *ContainerAttributes) String() string {
method Unmarshal (line 24746) | func (m *ContainerAttributes) Unmarshal(dAtA []byte) error {
type ContainerStats (line 3337) | type ContainerStats struct
method Reset (line 3348) | func (m *ContainerStats) Reset() { *m = ContainerSt...
method ProtoMessage (line 3349) | func (*ContainerStats) ProtoMessage() {}
method Descriptor (line 3350) | func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescr...
method GetAttributes (line 3352) | func (m *ContainerStats) GetAttributes() *ContainerAttributes {
method GetCpu (line 3359) | func (m *ContainerStats) GetCpu() *CpuUsage {
method GetMemory (line 3366) | func (m *ContainerStats) GetMemory() *MemoryUsage {
method GetWritableLayer (line 3373) | func (m *ContainerStats) GetWritableLayer() *FilesystemUsage {
method Marshal (line 8448) | func (m *ContainerStats) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8458) | func (m *ContainerStats) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10219) | func (m *ContainerStats) Size() (n int) {
method String (line 11589) | func (this *ContainerStats) String() string {
method Unmarshal (line 25090) | func (m *ContainerStats) Unmarshal(dAtA []byte) error {
type CpuUsage (line 3381) | type CpuUsage struct
method Reset (line 3388) | func (m *CpuUsage) Reset() { *m = CpuUsage{} }
method ProtoMessage (line 3389) | func (*CpuUsage) ProtoMessage() {}
method Descriptor (line 3390) | func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorA...
method GetTimestamp (line 3392) | func (m *CpuUsage) GetTimestamp() int64 {
method GetUsageCoreNanoSeconds (line 3399) | func (m *CpuUsage) GetUsageCoreNanoSeconds() *UInt64Value {
method Marshal (line 8506) | func (m *CpuUsage) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8516) | func (m *CpuUsage) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10241) | func (m *CpuUsage) Size() (n int) {
method String (line 11602) | func (this *CpuUsage) String() string {
method Unmarshal (line 25272) | func (m *CpuUsage) Unmarshal(dAtA []byte) error {
type MemoryUsage (line 3407) | type MemoryUsage struct
method Reset (line 3414) | func (m *MemoryUsage) Reset() { *m = MemoryUsage{} }
method ProtoMessage (line 3415) | func (*MemoryUsage) ProtoMessage() {}
method Descriptor (line 3416) | func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescript...
method GetTimestamp (line 3418) | func (m *MemoryUsage) GetTimestamp() int64 {
method GetWorkingSetBytes (line 3425) | func (m *MemoryUsage) GetWorkingSetBytes() *UInt64Value {
method Marshal (line 8539) | func (m *MemoryUsage) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8549) | func (m *MemoryUsage) MarshalTo(dAtA []byte) (int, error) {
method Size (line 10254) | func (m *MemoryUsage) Size() (n int) {
method String (line 11613) | func (this *MemoryUsage) String() string {
method Unmarshal (line 25374) | func (m *MemoryUsage) Unmarshal(dAtA []byte) error {
function init (line 3432) | func init() {
constant _ (line 3542) | _ = grpc.SupportPackageIsVersion4
type RuntimeServiceClient (line 3546) | type RuntimeServiceClient interface
type runtimeServiceClient (line 3612) | type runtimeServiceClient struct
method Version (line 3620) | func (c *runtimeServiceClient) Version(ctx context.Context, in *Versio...
method RunPodSandbox (line 3629) | func (c *runtimeServiceClient) RunPodSandbox(ctx context.Context, in *...
method StopPodSandbox (line 3638) | func (c *runtimeServiceClient) StopPodSandbox(ctx context.Context, in ...
method RemovePodSandbox (line 3647) | func (c *runtimeServiceClient) RemovePodSandbox(ctx context.Context, i...
method PodSandboxStatus (line 3656) | func (c *runtimeServiceClient) PodSandboxStatus(ctx context.Context, i...
method ListPodSandbox (line 3665) | func (c *runtimeServiceClient) ListPodSandbox(ctx context.Context, in ...
method CreateContainer (line 3674) | func (c *runtimeServiceClient) CreateContainer(ctx context.Context, in...
method StartContainer (line 3683) | func (c *runtimeServiceClient) StartContainer(ctx context.Context, in ...
method StopContainer (line 3692) | func (c *runtimeServiceClient) StopContainer(ctx context.Context, in *...
method RemoveContainer (line 3701) | func (c *runtimeServiceClient) RemoveContainer(ctx context.Context, in...
method ListContainers (line 3710) | func (c *runtimeServiceClient) ListContainers(ctx context.Context, in ...
method ContainerStatus (line 3719) | func (c *runtimeServiceClient) ContainerStatus(ctx context.Context, in...
method UpdateContainerResources (line 3728) | func (c *runtimeServiceClient) UpdateContainerResources(ctx context.Co...
method ExecSync (line 3737) | func (c *runtimeServiceClient) ExecSync(ctx context.Context, in *ExecS...
method Exec (line 3746) | func (c *runtimeServiceClient) Exec(ctx context.Context, in *ExecReque...
method Attach (line 3755) | func (c *runtimeServiceClient) Attach(ctx context.Context, in *AttachR...
method PortForward (line 3764) | func (c *runtimeServiceClient) PortForward(ctx context.Context, in *Po...
method ContainerStats (line 3773) | func (c *runtimeServiceClient) ContainerStats(ctx context.Context, in ...
method ListContainerStats (line 3782) | func (c *runtimeServiceClient) ListContainerStats(ctx context.Context,...
method UpdateRuntimeConfig (line 3791) | func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context...
method Status (line 3800) | func (c *runtimeServiceClient) Status(ctx context.Context, in *StatusR...
function NewRuntimeServiceClient (line 3616) | func NewRuntimeServiceClient(cc *grpc.ClientConn) RuntimeServiceClient {
type RuntimeServiceServer (line 3811) | type RuntimeServiceServer interface
function RegisterRuntimeServiceServer (line 3877) | func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServ...
function _RuntimeService_Version_Handler (line 3881) | func _RuntimeService_Version_Handler(srv interface{}, ctx context.Contex...
function _RuntimeService_RunPodSandbox_Handler (line 3899) | func _RuntimeService_RunPodSandbox_Handler(srv interface{}, ctx context....
function _RuntimeService_StopPodSandbox_Handler (line 3917) | func _RuntimeService_StopPodSandbox_Handler(srv interface{}, ctx context...
function _RuntimeService_RemovePodSandbox_Handler (line 3935) | func _RuntimeService_RemovePodSandbox_Handler(srv interface{}, ctx conte...
function _RuntimeService_PodSandboxStatus_Handler (line 3953) | func _RuntimeService_PodSandboxStatus_Handler(srv interface{}, ctx conte...
function _RuntimeService_ListPodSandbox_Handler (line 3971) | func _RuntimeService_ListPodSandbox_Handler(srv interface{}, ctx context...
function _RuntimeService_CreateContainer_Handler (line 3989) | func _RuntimeService_CreateContainer_Handler(srv interface{}, ctx contex...
function _RuntimeService_StartContainer_Handler (line 4007) | func _RuntimeService_StartContainer_Handler(srv interface{}, ctx context...
function _RuntimeService_StopContainer_Handler (line 4025) | func _RuntimeService_StopContainer_Handler(srv interface{}, ctx context....
function _RuntimeService_RemoveContainer_Handler (line 4043) | func _RuntimeService_RemoveContainer_Handler(srv interface{}, ctx contex...
function _RuntimeService_ListContainers_Handler (line 4061) | func _RuntimeService_ListContainers_Handler(srv interface{}, ctx context...
function _RuntimeService_ContainerStatus_Handler (line 4079) | func _RuntimeService_ContainerStatus_Handler(srv interface{}, ctx contex...
function _RuntimeService_UpdateContainerResources_Handler (line 4097) | func _RuntimeService_UpdateContainerResources_Handler(srv interface{}, c...
function _RuntimeService_ExecSync_Handler (line 4115) | func _RuntimeService_ExecSync_Handler(srv interface{}, ctx context.Conte...
function _RuntimeService_Exec_Handler (line 4133) | func _RuntimeService_Exec_Handler(srv interface{}, ctx context.Context, ...
function _RuntimeService_Attach_Handler (line 4151) | func _RuntimeService_Attach_Handler(srv interface{}, ctx context.Context...
function _RuntimeService_PortForward_Handler (line 4169) | func _RuntimeService_PortForward_Handler(srv interface{}, ctx context.Co...
function _RuntimeService_ContainerStats_Handler (line 4187) | func _RuntimeService_ContainerStats_Handler(srv interface{}, ctx context...
function _RuntimeService_ListContainerStats_Handler (line 4205) | func _RuntimeService_ListContainerStats_Handler(srv interface{}, ctx con...
function _RuntimeService_UpdateRuntimeConfig_Handler (line 4223) | func _RuntimeService_UpdateRuntimeConfig_Handler(srv interface{}, ctx co...
function _RuntimeService_Status_Handler (line 4241) | func _RuntimeService_Status_Handler(srv interface{}, ctx context.Context...
type ImageServiceClient (line 4354) | type ImageServiceClient interface
type imageServiceClient (line 4371) | type imageServiceClient struct
method ListImages (line 4379) | func (c *imageServiceClient) ListImages(ctx context.Context, in *ListI...
method ImageStatus (line 4388) | func (c *imageServiceClient) ImageStatus(ctx context.Context, in *Imag...
method PullImage (line 4397) | func (c *imageServiceClient) PullImage(ctx context.Context, in *PullIm...
method RemoveImage (line 4406) | func (c *imageServiceClient) RemoveImage(ctx context.Context, in *Remo...
method ImageFsInfo (line 4415) | func (c *imageServiceClient) ImageFsInfo(ctx context.Context, in *Imag...
function NewImageServiceClient (line 4375) | func NewImageServiceClient(cc *grpc.ClientConn) ImageServiceClient {
type ImageServiceServer (line 4426) | type ImageServiceServer interface
function RegisterImageServiceServer (line 4443) | func RegisterImageServiceServer(s *grpc.Server, srv ImageServiceServer) {
function _ImageService_ListImages_Handler (line 4447) | func _ImageService_ListImages_Handler(srv interface{}, ctx context.Conte...
function _ImageService_ImageStatus_Handler (line 4465) | func _ImageService_ImageStatus_Handler(srv interface{}, ctx context.Cont...
function _ImageService_PullImage_Handler (line 4483) | func _ImageService_PullImage_Handler(srv interface{}, ctx context.Contex...
function _ImageService_RemoveImage_Handler (line 4501) | func _ImageService_RemoveImage_Handler(srv interface{}, ctx context.Cont...
function _ImageService_ImageFsInfo_Handler (line 4519) | func _ImageService_ImageFsInfo_Handler(srv interface{}, ctx context.Cont...
function encodeFixed64Api (line 8572) | func encodeFixed64Api(dAtA []byte, offset int, v uint64) int {
function encodeFixed32Api (line 8583) | func encodeFixed32Api(dAtA []byte, offset int, v uint32) int {
function encodeVarintApi (line 8590) | func encodeVarintApi(dAtA []byte, offset int, v uint64) int {
function sovApi (line 10267) | func sovApi(x uint64) (n int) {
function sozApi (line 10277) | func sozApi(x uint64) (n int) {
function valueToStringApi (line 11624) | func valueToStringApi(v interface{}) string {
function skipApi (line 25476) | func skipApi(dAtA []byte) (n int, err error) {
function init (line 25581) | func init() { proto.RegisterFile("api.proto", fileDescriptorApi) }
FILE: pkg/checkpoint/cri/v1alpha1/constants.go
constant RuntimeReady (line 24) | RuntimeReady = "RuntimeReady"
constant NetworkReady (line 26) | NetworkReady = "NetworkReady"
type LogStreamType (line 30) | type LogStreamType
constant Stdout (line 34) | Stdout LogStreamType = "stdout"
constant Stderr (line 36) | Stderr LogStreamType = "stderr"
type LogTag (line 46) | type LogTag
constant LogTagPartial (line 50) | LogTagPartial LogTag = "P"
constant LogTagFull (line 52) | LogTagFull LogTag = "F"
constant LogTagDelimiter (line 54) | LogTagDelimiter = ":"
FILE: pkg/checkpoint/cri/v1alpha2/api.pb.go
constant _ (line 47) | _ = proto.GoGoProtoPackageIsVersion2
type Protocol (line 49) | type Protocol
method String (line 69) | func (x Protocol) String() string {
method EnumDescriptor (line 73) | func (Protocol) EnumDescriptor() ([]byte, []int) {
constant Protocol_TCP (line 52) | Protocol_TCP Protocol = 0
constant Protocol_UDP (line 53) | Protocol_UDP Protocol = 1
constant Protocol_SCTP (line 54) | Protocol_SCTP Protocol = 2
type MountPropagation (line 77) | type MountPropagation
method String (line 101) | func (x MountPropagation) String() string {
method EnumDescriptor (line 105) | func (MountPropagation) EnumDescriptor() ([]byte, []int) {
constant MountPropagation_PROPAGATION_PRIVATE (line 81) | MountPropagation_PROPAGATION_PRIVATE MountPropagation = 0
constant MountPropagation_PROPAGATION_HOST_TO_CONTAINER (line 83) | MountPropagation_PROPAGATION_HOST_TO_CONTAINER MountPropagation = 1
constant MountPropagation_PROPAGATION_BIDIRECTIONAL (line 86) | MountPropagation_PROPAGATION_BIDIRECTIONAL MountPropagation = 2
type NamespaceMode (line 112) | type NamespaceMode
method String (line 141) | func (x NamespaceMode) String() string {
method EnumDescriptor (line 145) | func (NamespaceMode) EnumDescriptor() ([]byte, []int) {
constant NamespaceMode_POD (line 118) | NamespaceMode_POD NamespaceMode = 0
constant NamespaceMode_CONTAINER (line 122) | NamespaceMode_CONTAINER NamespaceMode = 1
constant NamespaceMode_NODE (line 126) | NamespaceMode_NODE NamespaceMode = 2
type PodSandboxState (line 149) | type PodSandboxState
method String (line 166) | func (x PodSandboxState) String() string {
method EnumDescriptor (line 170) | func (PodSandboxState) EnumDescriptor() ([]byte, []int) {
constant PodSandboxState_SANDBOX_READY (line 152) | PodSandboxState_SANDBOX_READY PodSandboxState = 0
constant PodSandboxState_SANDBOX_NOTREADY (line 153) | PodSandboxState_SANDBOX_NOTREADY PodSandboxState = 1
type ContainerState (line 174) | type ContainerState
method String (line 197) | func (x ContainerState) String() string {
method EnumDescriptor (line 201) | func (ContainerState) EnumDescriptor() ([]byte, []int) {
constant ContainerState_CONTAINER_CREATED (line 177) | ContainerState_CONTAINER_CREATED ContainerState = 0
constant ContainerState_CONTAINER_RUNNING (line 178) | ContainerState_CONTAINER_RUNNING ContainerState = 1
constant ContainerState_CONTAINER_EXITED (line 179) | ContainerState_CONTAINER_EXITED ContainerState = 2
constant ContainerState_CONTAINER_UNKNOWN (line 180) | ContainerState_CONTAINER_UNKNOWN ContainerState = 3
type VersionRequest (line 205) | type VersionRequest struct
method Reset (line 212) | func (m *VersionRequest) Reset() { *m = VersionRequest{} }
method ProtoMessage (line 213) | func (*VersionRequest) ProtoMessage() {}
method Descriptor (line 214) | func (*VersionRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 217) | func (m *VersionRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 220) | func (m *VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]...
method XXX_Merge (line 232) | func (m *VersionRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 235) | func (m *VersionRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 238) | func (m *VersionRequest) XXX_DiscardUnknown() {
method GetVersion (line 244) | func (m *VersionRequest) GetVersion() string {
method Marshal (line 8312) | func (m *VersionRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8322) | func (m *VersionRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8327) | func (m *VersionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13308) | func (m *VersionRequest) Size() (n int) {
method String (line 15405) | func (this *VersionRequest) String() string {
method Unmarshal (line 16890) | func (m *VersionRequest) Unmarshal(dAtA []byte) error {
type VersionResponse (line 251) | type VersionResponse struct
method Reset (line 266) | func (m *VersionResponse) Reset() { *m = VersionResponse{} }
method ProtoMessage (line 267) | func (*VersionResponse) ProtoMessage() {}
method Descriptor (line 268) | func (*VersionResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 271) | func (m *VersionResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 274) | func (m *VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([...
method XXX_Merge (line 286) | func (m *VersionResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 289) | func (m *VersionResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 292) | func (m *VersionResponse) XXX_DiscardUnknown() {
method GetVersion (line 298) | func (m *VersionResponse) GetVersion() string {
method GetRuntimeName (line 305) | func (m *VersionResponse) GetRuntimeName() string {
method GetRuntimeVersion (line 312) | func (m *VersionResponse) GetRuntimeVersion() string {
method GetRuntimeApiVersion (line 319) | func (m *VersionResponse) GetRuntimeApiVersion() string {
method Marshal (line 8342) | func (m *VersionResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8352) | func (m *VersionResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8357) | func (m *VersionResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro...
method Size (line 13321) | func (m *VersionResponse) Size() (n int) {
method String (line 15415) | func (this *VersionResponse) String() string {
method Unmarshal (line 16975) | func (m *VersionResponse) Unmarshal(dAtA []byte) error {
type DNSConfig (line 327) | type DNSConfig struct
method Reset (line 339) | func (m *DNSConfig) Reset() { *m = DNSConfig{} }
method ProtoMessage (line 340) | func (*DNSConfig) ProtoMessage() {}
method Descriptor (line 341) | func (*DNSConfig) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 344) | func (m *DNSConfig) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 347) | func (m *DNSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte,...
method XXX_Merge (line 359) | func (m *DNSConfig) XXX_Merge(src proto.Message) {
method XXX_Size (line 362) | func (m *DNSConfig) XXX_Size() int {
method XXX_DiscardUnknown (line 365) | func (m *DNSConfig) XXX_DiscardUnknown() {
method GetServers (line 371) | func (m *DNSConfig) GetServers() []string {
method GetSearches (line 378) | func (m *DNSConfig) GetSearches() []string {
method GetOptions (line 385) | func (m *DNSConfig) GetOptions() []string {
method Marshal (line 8393) | func (m *DNSConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8403) | func (m *DNSConfig) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8408) | func (m *DNSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13346) | func (m *DNSConfig) Size() (n int) {
method String (line 15428) | func (this *DNSConfig) String() string {
method Unmarshal (line 17156) | func (m *DNSConfig) Unmarshal(dAtA []byte) error {
type PortMapping (line 393) | type PortMapping struct
method Reset (line 406) | func (m *PortMapping) Reset() { *m = PortMapping{} }
method ProtoMessage (line 407) | func (*PortMapping) ProtoMessage() {}
method Descriptor (line 408) | func (*PortMapping) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 411) | func (m *PortMapping) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 414) | func (m *PortMapping) XXX_Marshal(b []byte, deterministic bool) ([]byt...
method XXX_Merge (line 426) | func (m *PortMapping) XXX_Merge(src proto.Message) {
method XXX_Size (line 429) | func (m *PortMapping) XXX_Size() int {
method XXX_DiscardUnknown (line 432) | func (m *PortMapping) XXX_DiscardUnknown() {
method GetProtocol (line 438) | func (m *PortMapping) GetProtocol() Protocol {
method GetContainerPort (line 445) | func (m *PortMapping) GetContainerPort() int32 {
method GetHostPort (line 452) | func (m *PortMapping) GetHostPort() int32 {
method GetHostIp (line 459) | func (m *PortMapping) GetHostIp() string {
method Marshal (line 8443) | func (m *PortMapping) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8453) | func (m *PortMapping) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8458) | func (m *PortMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13373) | func (m *PortMapping) Size() (n int) {
method String (line 15440) | func (this *PortMapping) String() string {
method Unmarshal (line 17305) | func (m *PortMapping) Unmarshal(dAtA []byte) error {
type Mount (line 467) | type Mount struct
method Reset (line 484) | func (m *Mount) Reset() { *m = Mount{} }
method ProtoMessage (line 485) | func (*Mount) ProtoMessage() {}
method Descriptor (line 486) | func (*Mount) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 489) | func (m *Mount) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 492) | func (m *Mount) XXX_Marshal(b []byte, deterministic bool) ([]byte, err...
method XXX_Merge (line 504) | func (m *Mount) XXX_Merge(src proto.Message) {
method XXX_Size (line 507) | func (m *Mount) XXX_Size() int {
method XXX_DiscardUnknown (line 510) | func (m *Mount) XXX_DiscardUnknown() {
method GetContainerPath (line 516) | func (m *Mount) GetContainerPath() string {
method GetHostPath (line 523) | func (m *Mount) GetHostPath() string {
method GetReadonly (line 530) | func (m *Mount) GetReadonly() bool {
method GetSelinuxRelabel (line 537) | func (m *Mount) GetSelinuxRelabel() bool {
method GetPropagation (line 544) | func (m *Mount) GetPropagation() MountPropagation {
method Marshal (line 8488) | func (m *Mount) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8498) | func (m *Mount) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8503) | func (m *Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13395) | func (m *Mount) Size() (n int) {
method String (line 15453) | func (this *Mount) String() string {
method Unmarshal (line 17447) | func (m *Mount) Unmarshal(dAtA []byte) error {
type NamespaceOption (line 552) | type NamespaceOption struct
method Reset (line 570) | func (m *NamespaceOption) Reset() { *m = NamespaceOption{} }
method ProtoMessage (line 571) | func (*NamespaceOption) ProtoMessage() {}
method Descriptor (line 572) | func (*NamespaceOption) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 575) | func (m *NamespaceOption) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 578) | func (m *NamespaceOption) XXX_Marshal(b []byte, deterministic bool) ([...
method XXX_Merge (line 590) | func (m *NamespaceOption) XXX_Merge(src proto.Message) {
method XXX_Size (line 593) | func (m *NamespaceOption) XXX_Size() int {
method XXX_DiscardUnknown (line 596) | func (m *NamespaceOption) XXX_DiscardUnknown() {
method GetNetwork (line 602) | func (m *NamespaceOption) GetNetwork() NamespaceMode {
method GetPid (line 609) | func (m *NamespaceOption) GetPid() NamespaceMode {
method GetIpc (line 616) | func (m *NamespaceOption) GetIpc() NamespaceMode {
method Marshal (line 8550) | func (m *NamespaceOption) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8560) | func (m *NamespaceOption) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8565) | func (m *NamespaceOption) MarshalToSizedBuffer(dAtA []byte) (int, erro...
method Size (line 13421) | func (m *NamespaceOption) Size() (n int) {
method String (line 15467) | func (this *NamespaceOption) String() string {
method Unmarshal (line 17623) | func (m *NamespaceOption) Unmarshal(dAtA []byte) error {
type Int64Value (line 624) | type Int64Value struct
method Reset (line 631) | func (m *Int64Value) Reset() { *m = Int64Value{} }
method ProtoMessage (line 632) | func (*Int64Value) ProtoMessage() {}
method Descriptor (line 633) | func (*Int64Value) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 636) | func (m *Int64Value) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 639) | func (m *Int64Value) XXX_Marshal(b []byte, deterministic bool) ([]byte...
method XXX_Merge (line 651) | func (m *Int64Value) XXX_Merge(src proto.Message) {
method XXX_Size (line 654) | func (m *Int64Value) XXX_Size() int {
method XXX_DiscardUnknown (line 657) | func (m *Int64Value) XXX_DiscardUnknown() {
method GetValue (line 663) | func (m *Int64Value) GetValue() int64 {
method Marshal (line 8588) | func (m *Int64Value) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8598) | func (m *Int64Value) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8603) | func (m *Int64Value) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13439) | func (m *Int64Value) Size() (n int) {
method String (line 15479) | func (this *Int64Value) String() string {
method Unmarshal (line 17733) | func (m *Int64Value) Unmarshal(dAtA []byte) error {
type LinuxSandboxSecurityContext (line 675) | type LinuxSandboxSecurityContext struct
method Reset (line 708) | func (m *LinuxSandboxSecurityContext) Reset() { *m = LinuxSandbox...
method ProtoMessage (line 709) | func (*LinuxSandboxSecurityContext) ProtoMessage() {}
method Descriptor (line 710) | func (*LinuxSandboxSecurityContext) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 713) | func (m *LinuxSandboxSecurityContext) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 716) | func (m *LinuxSandboxSecurityContext) XXX_Marshal(b []byte, determinis...
method XXX_Merge (line 728) | func (m *LinuxSandboxSecurityContext) XXX_Merge(src proto.Message) {
method XXX_Size (line 731) | func (m *LinuxSandboxSecurityContext) XXX_Size() int {
method XXX_DiscardUnknown (line 734) | func (m *LinuxSandboxSecurityContext) XXX_DiscardUnknown() {
method GetNamespaceOptions (line 740) | func (m *LinuxSandboxSecurityContext) GetNamespaceOptions() *Namespace...
method GetSelinuxOptions (line 747) | func (m *LinuxSandboxSecurityContext) GetSelinuxOptions() *SELinuxOpti...
method GetRunAsUser (line 754) | func (m *LinuxSandboxSecurityContext) GetRunAsUser() *Int64Value {
method GetRunAsGroup (line 761) | func (m *LinuxSandboxSecurityContext) GetRunAsGroup() *Int64Value {
method GetReadonlyRootfs (line 768) | func (m *LinuxSandboxSecurityContext) GetReadonlyRootfs() bool {
method GetSupplementalGroups (line 775) | func (m *LinuxSandboxSecurityContext) GetSupplementalGroups() []int64 {
method GetPrivileged (line 782) | func (m *LinuxSandboxSecurityContext) GetPrivileged() bool {
method GetSeccompProfilePath (line 789) | func (m *LinuxSandboxSecurityContext) GetSeccompProfilePath() string {
method Marshal (line 8616) | func (m *LinuxSandboxSecurityContext) Marshal() (dAtA []byte, err erro...
method MarshalTo (line 8626) | func (m *LinuxSandboxSecurityContext) MarshalTo(dAtA []byte) (int, err...
method MarshalToSizedBuffer (line 8631) | func (m *LinuxSandboxSecurityContext) MarshalToSizedBuffer(dAtA []byte...
method Size (line 13451) | func (m *LinuxSandboxSecurityContext) Size() (n int) {
method String (line 15489) | func (this *LinuxSandboxSecurityContext) String() string {
method Unmarshal (line 17805) | func (m *LinuxSandboxSecurityContext) Unmarshal(dAtA []byte) error {
type LinuxPodSandboxConfig (line 798) | type LinuxPodSandboxConfig struct
method Reset (line 811) | func (m *LinuxPodSandboxConfig) Reset() { *m = LinuxPodSandboxCon...
method ProtoMessage (line 812) | func (*LinuxPodSandboxConfig) ProtoMessage() {}
method Descriptor (line 813) | func (*LinuxPodSandboxConfig) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 816) | func (m *LinuxPodSandboxConfig) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 819) | func (m *LinuxPodSandboxConfig) XXX_Marshal(b []byte, deterministic bo...
method XXX_Merge (line 831) | func (m *LinuxPodSandboxConfig) XXX_Merge(src proto.Message) {
method XXX_Size (line 834) | func (m *LinuxPodSandboxConfig) XXX_Size() int {
method XXX_DiscardUnknown (line 837) | func (m *LinuxPodSandboxConfig) XXX_DiscardUnknown() {
method GetCgroupParent (line 843) | func (m *LinuxPodSandboxConfig) GetCgroupParent() string {
method GetSecurityContext (line 850) | func (m *LinuxPodSandboxConfig) GetSecurityContext() *LinuxSandboxSecu...
method GetSysctls (line 857) | func (m *LinuxPodSandboxConfig) GetSysctls() map[string]string {
method Marshal (line 8733) | func (m *LinuxPodSandboxConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8743) | func (m *LinuxPodSandboxConfig) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8748) | func (m *LinuxPodSandboxConfig) MarshalToSizedBuffer(dAtA []byte) (int...
method Size (line 13493) | func (m *LinuxPodSandboxConfig) Size() (n int) {
method String (line 15506) | func (this *LinuxPodSandboxConfig) String() string {
method Unmarshal (line 18150) | func (m *LinuxPodSandboxConfig) Unmarshal(dAtA []byte) error {
type PodSandboxMetadata (line 868) | type PodSandboxMetadata struct
method Reset (line 881) | func (m *PodSandboxMetadata) Reset() { *m = PodSandboxMetadata{} }
method ProtoMessage (line 882) | func (*PodSandboxMetadata) ProtoMessage() {}
method Descriptor (line 883) | func (*PodSandboxMetadata) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 886) | func (m *PodSandboxMetadata) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 889) | func (m *PodSandboxMetadata) XXX_Marshal(b []byte, deterministic bool)...
method XXX_Merge (line 901) | func (m *PodSandboxMetadata) XXX_Merge(src proto.Message) {
method XXX_Size (line 904) | func (m *PodSandboxMetadata) XXX_Size() int {
method XXX_DiscardUnknown (line 907) | func (m *PodSandboxMetadata) XXX_DiscardUnknown() {
method GetName (line 913) | func (m *PodSandboxMetadata) GetName() string {
method GetUid (line 920) | func (m *PodSandboxMetadata) GetUid() string {
method GetNamespace (line 927) | func (m *PodSandboxMetadata) GetNamespace() string {
method GetAttempt (line 934) | func (m *PodSandboxMetadata) GetAttempt() uint32 {
method Marshal (line 8794) | func (m *PodSandboxMetadata) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8804) | func (m *PodSandboxMetadata) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8809) | func (m *PodSandboxMetadata) MarshalToSizedBuffer(dAtA []byte) (int, e...
method Size (line 13518) | func (m *PodSandboxMetadata) Size() (n int) {
method String (line 15528) | func (this *PodSandboxMetadata) String() string {
method Unmarshal (line 18398) | func (m *PodSandboxMetadata) Unmarshal(dAtA []byte) error {
type PodSandboxConfig (line 943) | type PodSandboxConfig struct
method Reset (line 997) | func (m *PodSandboxConfig) Reset() { *m = PodSandboxConfig{} }
method ProtoMessage (line 998) | func (*PodSandboxConfig) ProtoMessage() {}
method Descriptor (line 999) | func (*PodSandboxConfig) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1002) | func (m *PodSandboxConfig) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1005) | func (m *PodSandboxConfig) XXX_Marshal(b []byte, deterministic bool) (...
method XXX_Merge (line 1017) | func (m *PodSandboxConfig) XXX_Merge(src proto.Message) {
method XXX_Size (line 1020) | func (m *PodSandboxConfig) XXX_Size() int {
method XXX_DiscardUnknown (line 1023) | func (m *PodSandboxConfig) XXX_DiscardUnknown() {
method GetMetadata (line 1029) | func (m *PodSandboxConfig) GetMetadata() *PodSandboxMetadata {
method GetHostname (line 1036) | func (m *PodSandboxConfig) GetHostname() string {
method GetLogDirectory (line 1043) | func (m *PodSandboxConfig) GetLogDirectory() string {
method GetDnsConfig (line 1050) | func (m *PodSandboxConfig) GetDnsConfig() *DNSConfig {
method GetPortMappings (line 1057) | func (m *PodSandboxConfig) GetPortMappings() []*PortMapping {
method GetLabels (line 1064) | func (m *PodSandboxConfig) GetLabels() map[string]string {
method GetAnnotations (line 1071) | func (m *PodSandboxConfig) GetAnnotations() map[string]string {
method GetLinux (line 1078) | func (m *PodSandboxConfig) GetLinux() *LinuxPodSandboxConfig {
method Marshal (line 8843) | func (m *PodSandboxConfig) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8853) | func (m *PodSandboxConfig) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8858) | func (m *PodSandboxConfig) MarshalToSizedBuffer(dAtA []byte) (int, err...
method Size (line 13542) | func (m *PodSandboxConfig) Size() (n int) {
method String (line 15541) | func (this *PodSandboxConfig) String() string {
method Unmarshal (line 18566) | func (m *PodSandboxConfig) Unmarshal(dAtA []byte) error {
type RunPodSandboxRequest (line 1085) | type RunPodSandboxRequest struct
method Reset (line 1098) | func (m *RunPodSandboxRequest) Reset() { *m = RunPodSandboxReques...
method ProtoMessage (line 1099) | func (*RunPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 1100) | func (*RunPodSandboxRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1103) | func (m *RunPodSandboxRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1106) | func (m *RunPodSandboxRequest) XXX_Marshal(b []byte, deterministic boo...
method XXX_Merge (line 1118) | func (m *RunPodSandboxRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 1121) | func (m *RunPodSandboxRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 1124) | func (m *RunPodSandboxRequest) XXX_DiscardUnknown() {
method GetConfig (line 1130) | func (m *RunPodSandboxRequest) GetConfig() *PodSandboxConfig {
method GetRuntimeHandler (line 1137) | func (m *RunPodSandboxRequest) GetRuntimeHandler() string {
method Marshal (line 8968) | func (m *RunPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 8978) | func (m *RunPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 8983) | func (m *RunPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int,...
method Size (line 13593) | func (m *RunPodSandboxRequest) Size() (n int) {
method String (line 15583) | func (this *RunPodSandboxRequest) String() string {
method Unmarshal (line 19079) | func (m *RunPodSandboxRequest) Unmarshal(dAtA []byte) error {
type RunPodSandboxResponse (line 1144) | type RunPodSandboxResponse struct
method Reset (line 1151) | func (m *RunPodSandboxResponse) Reset() { *m = RunPodSandboxRespo...
method ProtoMessage (line 1152) | func (*RunPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 1153) | func (*RunPodSandboxResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1156) | func (m *RunPodSandboxResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1159) | func (m *RunPodSandboxResponse) XXX_Marshal(b []byte, deterministic bo...
method XXX_Merge (line 1171) | func (m *RunPodSandboxResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 1174) | func (m *RunPodSandboxResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 1177) | func (m *RunPodSandboxResponse) XXX_DiscardUnknown() {
method GetPodSandboxId (line 1183) | func (m *RunPodSandboxResponse) GetPodSandboxId() string {
method Marshal (line 9010) | func (m *RunPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9020) | func (m *RunPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9025) | func (m *RunPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (int...
method Size (line 13610) | func (m *RunPodSandboxResponse) Size() (n int) {
method String (line 15594) | func (this *RunPodSandboxResponse) String() string {
method Unmarshal (line 19200) | func (m *RunPodSandboxResponse) Unmarshal(dAtA []byte) error {
type StopPodSandboxRequest (line 1190) | type StopPodSandboxRequest struct
method Reset (line 1197) | func (m *StopPodSandboxRequest) Reset() { *m = StopPodSandboxRequ...
method ProtoMessage (line 1198) | func (*StopPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 1199) | func (*StopPodSandboxRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1202) | func (m *StopPodSandboxRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1205) | func (m *StopPodSandboxRequest) XXX_Marshal(b []byte, deterministic bo...
method XXX_Merge (line 1217) | func (m *StopPodSandboxRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 1220) | func (m *StopPodSandboxRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 1223) | func (m *StopPodSandboxRequest) XXX_DiscardUnknown() {
method GetPodSandboxId (line 1229) | func (m *StopPodSandboxRequest) GetPodSandboxId() string {
method Marshal (line 9040) | func (m *StopPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9050) | func (m *StopPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9055) | func (m *StopPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int...
method Size (line 13623) | func (m *StopPodSandboxRequest) Size() (n int) {
method String (line 15604) | func (this *StopPodSandboxRequest) String() string {
method Unmarshal (line 19285) | func (m *StopPodSandboxRequest) Unmarshal(dAtA []byte) error {
type StopPodSandboxResponse (line 1236) | type StopPodSandboxResponse struct
method Reset (line 1241) | func (m *StopPodSandboxResponse) Reset() { *m = StopPodSandboxRes...
method ProtoMessage (line 1242) | func (*StopPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 1243) | func (*StopPodSandboxResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1246) | func (m *StopPodSandboxResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1249) | func (m *StopPodSandboxResponse) XXX_Marshal(b []byte, deterministic b...
method XXX_Merge (line 1261) | func (m *StopPodSandboxResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 1264) | func (m *StopPodSandboxResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 1267) | func (m *StopPodSandboxResponse) XXX_DiscardUnknown() {
method Marshal (line 9070) | func (m *StopPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9080) | func (m *StopPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9085) | func (m *StopPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (in...
method Size (line 13636) | func (m *StopPodSandboxResponse) Size() (n int) {
method String (line 15614) | func (this *StopPodSandboxResponse) String() string {
method Unmarshal (line 19370) | func (m *StopPodSandboxResponse) Unmarshal(dAtA []byte) error {
type RemovePodSandboxRequest (line 1273) | type RemovePodSandboxRequest struct
method Reset (line 1280) | func (m *RemovePodSandboxRequest) Reset() { *m = RemovePodSandbox...
method ProtoMessage (line 1281) | func (*RemovePodSandboxRequest) ProtoMessage() {}
method Descriptor (line 1282) | func (*RemovePodSandboxRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1285) | func (m *RemovePodSandboxRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1288) | func (m *RemovePodSandboxRequest) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 1300) | func (m *RemovePodSandboxRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 1303) | func (m *RemovePodSandboxRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 1306) | func (m *RemovePodSandboxRequest) XXX_DiscardUnknown() {
method GetPodSandboxId (line 1312) | func (m *RemovePodSandboxRequest) GetPodSandboxId() string {
method Marshal (line 9093) | func (m *RemovePodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9103) | func (m *RemovePodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9108) | func (m *RemovePodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (i...
method Size (line 13645) | func (m *RemovePodSandboxRequest) Size() (n int) {
method String (line 15623) | func (this *RemovePodSandboxRequest) String() string {
method Unmarshal (line 19423) | func (m *RemovePodSandboxRequest) Unmarshal(dAtA []byte) error {
type RemovePodSandboxResponse (line 1319) | type RemovePodSandboxResponse struct
method Reset (line 1324) | func (m *RemovePodSandboxResponse) Reset() { *m = RemovePodSandbo...
method ProtoMessage (line 1325) | func (*RemovePodSandboxResponse) ProtoMessage() {}
method Descriptor (line 1326) | func (*RemovePodSandboxResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1329) | func (m *RemovePodSandboxResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1332) | func (m *RemovePodSandboxResponse) XXX_Marshal(b []byte, deterministic...
method XXX_Merge (line 1344) | func (m *RemovePodSandboxResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 1347) | func (m *RemovePodSandboxResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 1350) | func (m *RemovePodSandboxResponse) XXX_DiscardUnknown() {
method Marshal (line 9123) | func (m *RemovePodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9133) | func (m *RemovePodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9138) | func (m *RemovePodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (...
method Size (line 13658) | func (m *RemovePodSandboxResponse) Size() (n int) {
method String (line 15633) | func (this *RemovePodSandboxResponse) String() string {
method Unmarshal (line 19508) | func (m *RemovePodSandboxResponse) Unmarshal(dAtA []byte) error {
type PodSandboxStatusRequest (line 1356) | type PodSandboxStatusRequest struct
method Reset (line 1365) | func (m *PodSandboxStatusRequest) Reset() { *m = PodSandboxStatus...
method ProtoMessage (line 1366) | func (*PodSandboxStatusRequest) ProtoMessage() {}
method Descriptor (line 1367) | func (*PodSandboxStatusRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1370) | func (m *PodSandboxStatusRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1373) | func (m *PodSandboxStatusRequest) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 1385) | func (m *PodSandboxStatusRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 1388) | func (m *PodSandboxStatusRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 1391) | func (m *PodSandboxStatusRequest) XXX_DiscardUnknown() {
method GetPodSandboxId (line 1397) | func (m *PodSandboxStatusRequest) GetPodSandboxId() string {
method GetVerbose (line 1404) | func (m *PodSandboxStatusRequest) GetVerbose() bool {
method Marshal (line 9146) | func (m *PodSandboxStatusRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9156) | func (m *PodSandboxStatusRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9161) | func (m *PodSandboxStatusRequest) MarshalToSizedBuffer(dAtA []byte) (i...
method Size (line 13667) | func (m *PodSandboxStatusRequest) Size() (n int) {
method String (line 15642) | func (this *PodSandboxStatusRequest) String() string {
method Unmarshal (line 19561) | func (m *PodSandboxStatusRequest) Unmarshal(dAtA []byte) error {
type PodIP (line 1412) | type PodIP struct
method Reset (line 1419) | func (m *PodIP) Reset() { *m = PodIP{} }
method ProtoMessage (line 1420) | func (*PodIP) ProtoMessage() {}
method Descriptor (line 1421) | func (*PodIP) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1424) | func (m *PodIP) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1427) | func (m *PodIP) XXX_Marshal(b []byte, deterministic bool) ([]byte, err...
method XXX_Merge (line 1439) | func (m *PodIP) XXX_Merge(src proto.Message) {
method XXX_Size (line 1442) | func (m *PodIP) XXX_Size() int {
method XXX_DiscardUnknown (line 1445) | func (m *PodIP) XXX_DiscardUnknown() {
method GetIp (line 1451) | func (m *PodIP) GetIp() string {
method Marshal (line 9186) | func (m *PodIP) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9196) | func (m *PodIP) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9201) | func (m *PodIP) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13683) | func (m *PodIP) Size() (n int) {
method String (line 15653) | func (this *PodIP) String() string {
method Unmarshal (line 19666) | func (m *PodIP) Unmarshal(dAtA []byte) error {
type PodSandboxNetworkStatus (line 1459) | type PodSandboxNetworkStatus struct
method Reset (line 1468) | func (m *PodSandboxNetworkStatus) Reset() { *m = PodSandboxNetwor...
method ProtoMessage (line 1469) | func (*PodSandboxNetworkStatus) ProtoMessage() {}
method Descriptor (line 1470) | func (*PodSandboxNetworkStatus) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1473) | func (m *PodSandboxNetworkStatus) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1476) | func (m *PodSandboxNetworkStatus) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 1488) | func (m *PodSandboxNetworkStatus) XXX_Merge(src proto.Message) {
method XXX_Size (line 1491) | func (m *PodSandboxNetworkStatus) XXX_Size() int {
method XXX_DiscardUnknown (line 1494) | func (m *PodSandboxNetworkStatus) XXX_DiscardUnknown() {
method GetIp (line 1500) | func (m *PodSandboxNetworkStatus) GetIp() string {
method GetAdditionalIps (line 1507) | func (m *PodSandboxNetworkStatus) GetAdditionalIps() []*PodIP {
method Marshal (line 9216) | func (m *PodSandboxNetworkStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9226) | func (m *PodSandboxNetworkStatus) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9231) | func (m *PodSandboxNetworkStatus) MarshalToSizedBuffer(dAtA []byte) (i...
method Size (line 13696) | func (m *PodSandboxNetworkStatus) Size() (n int) {
method String (line 15663) | func (this *PodSandboxNetworkStatus) String() string {
method Unmarshal (line 19751) | func (m *PodSandboxNetworkStatus) Unmarshal(dAtA []byte) error {
type Namespace (line 1515) | type Namespace struct
method Reset (line 1522) | func (m *Namespace) Reset() { *m = Namespace{} }
method ProtoMessage (line 1523) | func (*Namespace) ProtoMessage() {}
method Descriptor (line 1524) | func (*Namespace) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1527) | func (m *Namespace) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1530) | func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte,...
method XXX_Merge (line 1542) | func (m *Namespace) XXX_Merge(src proto.Message) {
method XXX_Size (line 1545) | func (m *Namespace) XXX_Size() int {
method XXX_DiscardUnknown (line 1548) | func (m *Namespace) XXX_DiscardUnknown() {
method GetOptions (line 1554) | func (m *Namespace) GetOptions() *NamespaceOption {
method Marshal (line 9260) | func (m *Namespace) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9270) | func (m *Namespace) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9275) | func (m *Namespace) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13715) | func (m *Namespace) Size() (n int) {
method String (line 15679) | func (this *Namespace) String() string {
method Unmarshal (line 19870) | func (m *Namespace) Unmarshal(dAtA []byte) error {
type LinuxPodSandboxStatus (line 1562) | type LinuxPodSandboxStatus struct
method Reset (line 1569) | func (m *LinuxPodSandboxStatus) Reset() { *m = LinuxPodSandboxSta...
method ProtoMessage (line 1570) | func (*LinuxPodSandboxStatus) ProtoMessage() {}
method Descriptor (line 1571) | func (*LinuxPodSandboxStatus) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1574) | func (m *LinuxPodSandboxStatus) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1577) | func (m *LinuxPodSandboxStatus) XXX_Marshal(b []byte, deterministic bo...
method XXX_Merge (line 1589) | func (m *LinuxPodSandboxStatus) XXX_Merge(src proto.Message) {
method XXX_Size (line 1592) | func (m *LinuxPodSandboxStatus) XXX_Size() int {
method XXX_DiscardUnknown (line 1595) | func (m *LinuxPodSandboxStatus) XXX_DiscardUnknown() {
method GetNamespaces (line 1601) | func (m *LinuxPodSandboxStatus) GetNamespaces() *Namespace {
method Marshal (line 9295) | func (m *LinuxPodSandboxStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9305) | func (m *LinuxPodSandboxStatus) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9310) | func (m *LinuxPodSandboxStatus) MarshalToSizedBuffer(dAtA []byte) (int...
method Size (line 13728) | func (m *LinuxPodSandboxStatus) Size() (n int) {
method String (line 15689) | func (this *LinuxPodSandboxStatus) String() string {
method Unmarshal (line 19959) | func (m *LinuxPodSandboxStatus) Unmarshal(dAtA []byte) error {
type PodSandboxStatus (line 1609) | type PodSandboxStatus struct
method Reset (line 1635) | func (m *PodSandboxStatus) Reset() { *m = PodSandboxStatus{} }
method ProtoMessage (line 1636) | func (*PodSandboxStatus) ProtoMessage() {}
method Descriptor (line 1637) | func (*PodSandboxStatus) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1640) | func (m *PodSandboxStatus) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1643) | func (m *PodSandboxStatus) XXX_Marshal(b []byte, deterministic bool) (...
method XXX_Merge (line 1655) | func (m *PodSandboxStatus) XXX_Merge(src proto.Message) {
method XXX_Size (line 1658) | func (m *PodSandboxStatus) XXX_Size() int {
method XXX_DiscardUnknown (line 1661) | func (m *PodSandboxStatus) XXX_DiscardUnknown() {
method GetId (line 1667) | func (m *PodSandboxStatus) GetId() string {
method GetMetadata (line 1674) | func (m *PodSandboxStatus) GetMetadata() *PodSandboxMetadata {
method GetState (line 1681) | func (m *PodSandboxStatus) GetState() PodSandboxState {
method GetCreatedAt (line 1688) | func (m *PodSandboxStatus) GetCreatedAt() int64 {
method GetNetwork (line 1695) | func (m *PodSandboxStatus) GetNetwork() *PodSandboxNetworkStatus {
method GetLinux (line 1702) | func (m *PodSandboxStatus) GetLinux() *LinuxPodSandboxStatus {
method GetLabels (line 1709) | func (m *PodSandboxStatus) GetLabels() map[string]string {
method GetAnnotations (line 1716) | func (m *PodSandboxStatus) GetAnnotations() map[string]string {
method GetRuntimeHandler (line 1723) | func (m *PodSandboxStatus) GetRuntimeHandler() string {
method Marshal (line 9330) | func (m *PodSandboxStatus) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9340) | func (m *PodSandboxStatus) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9345) | func (m *PodSandboxStatus) MarshalToSizedBuffer(dAtA []byte) (int, err...
method Size (line 13741) | func (m *PodSandboxStatus) Size() (n int) {
method String (line 15699) | func (this *PodSandboxStatus) String() string {
method Unmarshal (line 20048) | func (m *PodSandboxStatus) Unmarshal(dAtA []byte) error {
type PodSandboxStatusResponse (line 1730) | type PodSandboxStatusResponse struct
method Reset (line 1742) | func (m *PodSandboxStatusResponse) Reset() { *m = PodSandboxStatu...
method ProtoMessage (line 1743) | func (*PodSandboxStatusResponse) ProtoMessage() {}
method Descriptor (line 1744) | func (*PodSandboxStatusResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1747) | func (m *PodSandboxStatusResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1750) | func (m *PodSandboxStatusResponse) XXX_Marshal(b []byte, deterministic...
method XXX_Merge (line 1762) | func (m *PodSandboxStatusResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 1765) | func (m *PodSandboxStatusResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 1768) | func (m *PodSandboxStatusResponse) XXX_DiscardUnknown() {
method GetStatus (line 1774) | func (m *PodSandboxStatusResponse) GetStatus() *PodSandboxStatus {
method GetInfo (line 1781) | func (m *PodSandboxStatusResponse) GetInfo() map[string]string {
method Marshal (line 9451) | func (m *PodSandboxStatusResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9461) | func (m *PodSandboxStatusResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9466) | func (m *PodSandboxStatusResponse) MarshalToSizedBuffer(dAtA []byte) (...
method Size (line 13792) | func (m *PodSandboxStatusResponse) Size() (n int) {
method String (line 15737) | func (this *PodSandboxStatusResponse) String() string {
method Unmarshal (line 20565) | func (m *PodSandboxStatusResponse) Unmarshal(dAtA []byte) error {
type PodSandboxStateValue (line 1789) | type PodSandboxStateValue struct
method Reset (line 1796) | func (m *PodSandboxStateValue) Reset() { *m = PodSandboxStateValu...
method ProtoMessage (line 1797) | func (*PodSandboxStateValue) ProtoMessage() {}
method Descriptor (line 1798) | func (*PodSandboxStateValue) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1801) | func (m *PodSandboxStateValue) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1804) | func (m *PodSandboxStateValue) XXX_Marshal(b []byte, deterministic boo...
method XXX_Merge (line 1816) | func (m *PodSandboxStateValue) XXX_Merge(src proto.Message) {
method XXX_Size (line 1819) | func (m *PodSandboxStateValue) XXX_Size() int {
method XXX_DiscardUnknown (line 1822) | func (m *PodSandboxStateValue) XXX_DiscardUnknown() {
method GetState (line 1828) | func (m *PodSandboxStateValue) GetState() PodSandboxState {
method Marshal (line 9505) | func (m *PodSandboxStateValue) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9515) | func (m *PodSandboxStateValue) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9520) | func (m *PodSandboxStateValue) MarshalToSizedBuffer(dAtA []byte) (int,...
method Size (line 13813) | func (m *PodSandboxStateValue) Size() (n int) {
method String (line 15758) | func (this *PodSandboxStateValue) String() string {
method Unmarshal (line 20781) | func (m *PodSandboxStateValue) Unmarshal(dAtA []byte) error {
type PodSandboxFilter (line 1837) | type PodSandboxFilter struct
method Reset (line 1850) | func (m *PodSandboxFilter) Reset() { *m = PodSandboxFilter{} }
method ProtoMessage (line 1851) | func (*PodSandboxFilter) ProtoMessage() {}
method Descriptor (line 1852) | func (*PodSandboxFilter) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1855) | func (m *PodSandboxFilter) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1858) | func (m *PodSandboxFilter) XXX_Marshal(b []byte, deterministic bool) (...
method XXX_Merge (line 1870) | func (m *PodSandboxFilter) XXX_Merge(src proto.Message) {
method XXX_Size (line 1873) | func (m *PodSandboxFilter) XXX_Size() int {
method XXX_DiscardUnknown (line 1876) | func (m *PodSandboxFilter) XXX_DiscardUnknown() {
method GetId (line 1882) | func (m *PodSandboxFilter) GetId() string {
method GetState (line 1889) | func (m *PodSandboxFilter) GetState() *PodSandboxStateValue {
method GetLabelSelector (line 1896) | func (m *PodSandboxFilter) GetLabelSelector() map[string]string {
method Marshal (line 9533) | func (m *PodSandboxFilter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9543) | func (m *PodSandboxFilter) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9548) | func (m *PodSandboxFilter) MarshalToSizedBuffer(dAtA []byte) (int, err...
method Size (line 13825) | func (m *PodSandboxFilter) Size() (n int) {
method String (line 15768) | func (this *PodSandboxFilter) String() string {
method Unmarshal (line 20853) | func (m *PodSandboxFilter) Unmarshal(dAtA []byte) error {
type ListPodSandboxRequest (line 1903) | type ListPodSandboxRequest struct
method Reset (line 1910) | func (m *ListPodSandboxRequest) Reset() { *m = ListPodSandboxRequ...
method ProtoMessage (line 1911) | func (*ListPodSandboxRequest) ProtoMessage() {}
method Descriptor (line 1912) | func (*ListPodSandboxRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1915) | func (m *ListPodSandboxRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1918) | func (m *ListPodSandboxRequest) XXX_Marshal(b []byte, deterministic bo...
method XXX_Merge (line 1930) | func (m *ListPodSandboxRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 1933) | func (m *ListPodSandboxRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 1936) | func (m *ListPodSandboxRequest) XXX_DiscardUnknown() {
method GetFilter (line 1942) | func (m *ListPodSandboxRequest) GetFilter() *PodSandboxFilter {
method Marshal (line 9594) | func (m *ListPodSandboxRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9604) | func (m *ListPodSandboxRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9609) | func (m *ListPodSandboxRequest) MarshalToSizedBuffer(dAtA []byte) (int...
method Size (line 13850) | func (m *ListPodSandboxRequest) Size() (n int) {
method String (line 15790) | func (this *ListPodSandboxRequest) String() string {
method Unmarshal (line 21101) | func (m *ListPodSandboxRequest) Unmarshal(dAtA []byte) error {
type PodSandbox (line 1950) | type PodSandbox struct
method Reset (line 1972) | func (m *PodSandbox) Reset() { *m = PodSandbox{} }
method ProtoMessage (line 1973) | func (*PodSandbox) ProtoMessage() {}
method Descriptor (line 1974) | func (*PodSandbox) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1977) | func (m *PodSandbox) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1980) | func (m *PodSandbox) XXX_Marshal(b []byte, deterministic bool) ([]byte...
method XXX_Merge (line 1992) | func (m *PodSandbox) XXX_Merge(src proto.Message) {
method XXX_Size (line 1995) | func (m *PodSandbox) XXX_Size() int {
method XXX_DiscardUnknown (line 1998) | func (m *PodSandbox) XXX_DiscardUnknown() {
method GetId (line 2004) | func (m *PodSandbox) GetId() string {
method GetMetadata (line 2011) | func (m *PodSandbox) GetMetadata() *PodSandboxMetadata {
method GetState (line 2018) | func (m *PodSandbox) GetState() PodSandboxState {
method GetCreatedAt (line 2025) | func (m *PodSandbox) GetCreatedAt() int64 {
method GetLabels (line 2032) | func (m *PodSandbox) GetLabels() map[string]string {
method GetAnnotations (line 2039) | func (m *PodSandbox) GetAnnotations() map[string]string {
method GetRuntimeHandler (line 2046) | func (m *PodSandbox) GetRuntimeHandler() string {
method Marshal (line 9629) | func (m *PodSandbox) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9639) | func (m *PodSandbox) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9644) | func (m *PodSandbox) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13863) | func (m *PodSandbox) Size() (n int) {
method String (line 15800) | func (this *PodSandbox) String() string {
method Unmarshal (line 21190) | func (m *PodSandbox) Unmarshal(dAtA []byte) error {
type ListPodSandboxResponse (line 2053) | type ListPodSandboxResponse struct
method Reset (line 2060) | func (m *ListPodSandboxResponse) Reset() { *m = ListPodSandboxRes...
method ProtoMessage (line 2061) | func (*ListPodSandboxResponse) ProtoMessage() {}
method Descriptor (line 2062) | func (*ListPodSandboxResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 2065) | func (m *ListPodSandboxResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 2068) | func (m *ListPodSandboxResponse) XXX_Marshal(b []byte, deterministic b...
method XXX_Merge (line 2080) | func (m *ListPodSandboxResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 2083) | func (m *ListPodSandboxResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 2086) | func (m *ListPodSandboxResponse) XXX_DiscardUnknown() {
method GetItems (line 2092) | func (m *ListPodSandboxResponse) GetItems() []*PodSandbox {
method Marshal (line 9726) | func (m *ListPodSandboxResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9736) | func (m *ListPodSandboxResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9741) | func (m *ListPodSandboxResponse) MarshalToSizedBuffer(dAtA []byte) (in...
method Size (line 13906) | func (m *ListPodSandboxResponse) Size() (n int) {
method String (line 15836) | func (this *ListPodSandboxResponse) String() string {
method Unmarshal (line 21635) | func (m *ListPodSandboxResponse) Unmarshal(dAtA []byte) error {
type ImageSpec (line 2102) | type ImageSpec struct
method Reset (line 2108) | func (m *ImageSpec) Reset() { *m = ImageSpec{} }
method ProtoMessage (line 2109) | func (*ImageSpec) ProtoMessage() {}
method Descriptor (line 2110) | func (*ImageSpec) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 2113) | func (m *ImageSpec) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 2116) | func (m *ImageSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte,...
method XXX_Merge (line 2128) | func (m *ImageSpec) XXX_Merge(src proto.Message) {
method XXX_Size (line 2131) | func (m *ImageSpec) XXX_Size() int {
method XXX_DiscardUnknown (line 2134) | func (m *ImageSpec) XXX_DiscardUnknown() {
method GetImage (line 2140) | func (m *ImageSpec) GetImage() string {
method Marshal (line 9763) | func (m *ImageSpec) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9773) | func (m *ImageSpec) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9778) | func (m *ImageSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13921) | func (m *ImageSpec) Size() (n int) {
method String (line 15851) | func (this *ImageSpec) String() string {
method Unmarshal (line 21722) | func (m *ImageSpec) Unmarshal(dAtA []byte) error {
type KeyValue (line 2147) | type KeyValue struct
method Reset (line 2154) | func (m *KeyValue) Reset() { *m = KeyValue{} }
method ProtoMessage (line 2155) | func (*KeyValue) ProtoMessage() {}
method Descriptor (line 2156) | func (*KeyValue) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 2159) | func (m *KeyValue) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 2162) | func (m *KeyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, ...
method XXX_Merge (line 2174) | func (m *KeyValue) XXX_Merge(src proto.Message) {
method XXX_Size (line 2177) | func (m *KeyValue) XXX_Size() int {
method XXX_DiscardUnknown (line 2180) | func (m *KeyValue) XXX_DiscardUnknown() {
method GetKey (line 2186) | func (m *KeyValue) GetKey() string {
method GetValue (line 2193) | func (m *KeyValue) GetValue() string {
method Marshal (line 9793) | func (m *KeyValue) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9803) | func (m *KeyValue) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9808) | func (m *KeyValue) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 13934) | func (m *KeyValue) Size() (n int) {
method String (line 15861) | func (this *KeyValue) String() string {
method Unmarshal (line 21807) | func (m *KeyValue) Unmarshal(dAtA []byte) error {
type LinuxContainerResources (line 2204) | type LinuxContainerResources struct
method Reset (line 2223) | func (m *LinuxContainerResources) Reset() { *m = LinuxContainerRe...
method ProtoMessage (line 2224) | func (*LinuxContainerResources) ProtoMessage() {}
method Descriptor (line 2225) | func (*LinuxContainerResources) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 2228) | func (m *LinuxContainerResources) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 2231) | func (m *LinuxContainerResources) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 2243) | func (m *LinuxContainerResources) XXX_Merge(src proto.Message) {
method XXX_Size (line 2246) | func (m *LinuxContainerResources) XXX_Size() int {
method XXX_DiscardUnknown (line 2249) | func (m *LinuxContainerResources) XXX_DiscardUnknown() {
method GetCpuPeriod (line 2255) | func (m *LinuxContainerResources) GetCpuPeriod() int64 {
method GetCpuQuota (line 2262) | func (m *LinuxContainerResources) GetCpuQuota() int64 {
method GetCpuShares (line 2269) | func (m *LinuxContainerResources) GetCpuShares() int64 {
method GetMemoryLimitInBytes (line 2276) | func (m *LinuxContainerResources) GetMemoryLimitInBytes() int64 {
method GetOomScoreAdj (line 2283) | func (m *LinuxContainerResources) GetOomScoreAdj() int64 {
method GetCpusetCpus (line 2290) | func (m *LinuxContainerResources) GetCpusetCpus() string {
method GetCpusetMems (line 2297) | func (m *LinuxContainerResources) GetCpusetMems() string {
method Marshal (line 9830) | func (m *LinuxContainerResources) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 9840) | func (m *LinuxContainerResources) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 9845) | func (m *LinuxContainerResources) MarshalToSizedBuffer(dAtA []byte) (i...
method Size (line 13951) | func (m *LinuxContainerResources) Size() (n int) {
method String (line 15872) | func (this *LinuxContainerResources) String() string {
method Unmarshal (line 21924) | func (m *LinuxContainerResources) Unmarshal(dAtA []byte) error {
type SELinuxOption (line 2305) | type SELinuxOption struct
method Reset (line 2314) | func (m *SELinuxOption) Reset() { *m = SELinuxOption{} }
method ProtoMessage (line 2315) | func (*SELinuxOption) ProtoMessage() {}
method Descriptor (line 2316) | func (*SELinuxOption) Descriptor() ([]byte, []int) {
method XX
Copy disabled (too large)
Download .json
Condensed preview — 1777 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (28,875K chars).
[
{
"path": ".gitignore",
"chars": 289,
"preview": "cmd/bootkube/bootkube\n*.so\n\n_output\n_pluton_temp\nvendor-v[0-9].[0-9].[0-9]/\n\nhack/*/.vagrant/\nhack/*/cluster/\nhack/*/ssh"
},
{
"path": ".travis.yml",
"chars": 228,
"preview": "language: go\nbefore_script:\n - wget https://releases.hashicorp.com/terraform/0.11.3/terraform_0.11.3_linux_amd64.zip\n "
},
{
"path": "CONTRIBUTING.md",
"chars": 1588,
"preview": "# Contributing guidelines\n\n## How to become a contributor and submit your own code\n\n### Contributor License Agreements\n\n"
},
{
"path": "Documentation/alpha-features.md",
"chars": 951,
"preview": "# Alpha Features\n\nTracking document for alpha features that bootkube installed clusters may make use of.\n\nWe track these"
},
{
"path": "Documentation/design-principles.md",
"chars": 3389,
"preview": "# Design Principles\n\nThere are exceptions to these principles, but these are general guidelines the project strives to a"
},
{
"path": "Documentation/development.md",
"chars": 2077,
"preview": "# Bootkube Development\n\n## Requirements\n\n* Go 1.10+\n\n## Building\n\nFirst, clone the repo into the proper location in your"
},
{
"path": "Documentation/disaster-recovery.md",
"chars": 5784,
"preview": "# Disaster Recovery\n\nSelf-hosted Kubernetes clusters are vulnerable to the following catastrophic\nfailure scenarios:\n\n- "
},
{
"path": "Documentation/network-requirements.md",
"chars": 1972,
"preview": "# Requirements\n\n## Ports\n\nThe information below describes a minimum set of port allocations used by Kubernetes component"
},
{
"path": "Documentation/root-requirements.md",
"chars": 996,
"preview": "# Information about services running as root\n\nRunning services as a non-root user is typically better for security, sinc"
},
{
"path": "Documentation/upgrading.md",
"chars": 7415,
"preview": "# Upgrading self-hosted Kubernetes\n\n\"Self-hosted\" Kubernetes clusters run the apiserver, scheduler, controller-manager, "
},
{
"path": "Documentation/users-integrations.md",
"chars": 941,
"preview": "# Users and Integrations\n\nThis document tracks projects, integrations, and use cases for bootkube. [Join the community]("
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 3113,
"preview": "export CGO_ENABLED:=0\nexport GOARCH:=amd64\nexport PATH:=$(PATH):$(PWD)\n\nLOCAL_OS:=$(shell uname | tr A-Z a-z)\nGOFILES:=$"
},
{
"path": "NOTICE",
"chars": 126,
"preview": "CoreOS Project\nCopyright 2015 CoreOS, Inc\n\nThis product includes software developed at CoreOS, Inc.\n(http://www.coreos.c"
},
{
"path": "OWNERS",
"chars": 190,
"preview": "# See the OWNERS file documentation:\n# https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md"
},
{
"path": "OWNERS_ALIASES",
"chars": 165,
"preview": "# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md\n\naliases:\n sig-cluster-lifecycle-leads"
},
{
"path": "README.md",
"chars": 3670,
"preview": "# Bootkube\n\n[](https://travis-ci.o"
},
{
"path": "RELEASING.md",
"chars": 4030,
"preview": "# Preparing a bootkube release\n\n## Versioning Notes\n\n### Bootkube Versioning\n\nHistorically, we bump the minor version wh"
},
{
"path": "ROADMAP.md",
"chars": 940,
"preview": "# Bootkube Roadmap\n\n## v1.0.0 targets\n\n- [ ] Recovery from etcd-backup part of e2e testing (https://github.com/kubernete"
},
{
"path": "SECURITY_CONTACTS",
"chars": 587,
"preview": "# Defined below are the security contacts for this repo.\n#\n# They are the contact point for the Product Security Team to"
},
{
"path": "bill-of-materials.json",
"chars": 6290,
"preview": "[\n {\n \"project\": \"github.com/coreos/etcd\",\n \"licenses\": [\n {\n \"type\": \"Apache License 2.0\",\n \""
},
{
"path": "build/README.md",
"chars": 824,
"preview": "## Build Release Images\n\nBuild release binaries + images\n\n```\nBUILD_IMAGE=bootkube PUSH_IMAGE=true ./build/build-image.s"
},
{
"path": "build/build-image.sh",
"chars": 437,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nBUILD_IMAGE=${BUILD_IMAGE:-}\nPUSH_IMAGE=${PUSH_IMAGE:-false}\n\nif [ -z \"${BUILD_IM"
},
{
"path": "build/build-release.sh",
"chars": 242,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nBOOTKUBE_ROOT=$(git rev-parse --show-toplevel)\nGOLANG_IMAGE=${GOLANG_IMAGE:-golan"
},
{
"path": "build/git-version.sh",
"chars": 90,
"preview": "#!/bin/sh\n\nDESCRIPTION=$(git describe --abbrev=100 --dirty) &&\necho \"${DESCRIPTION##*-g}\"\n"
},
{
"path": "cmd/bootkube/main.go",
"chars": 830,
"preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/kubernetes-sigs/bootkube/pkg/util\"\n"
},
{
"path": "cmd/bootkube/recover.go",
"chars": 5448,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"strings\""
},
{
"path": "cmd/bootkube/render.go",
"chars": 1414,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"plugin\"\n\n\tbootkubeplugin \"github.com/kubernetes-sigs/bootkube/pkg/plugin\"\n\t\"github"
},
{
"path": "cmd/bootkube/start.go",
"chars": 2375,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/kubernetes-sigs/bootkube/pkg"
},
{
"path": "cmd/checkpoint/README.md",
"chars": 4138,
"preview": "# Checkpoint\n\n## Description\n\n`checkpoint` is a utility application which will manage \"checkpoints\" of pods scheduled to"
},
{
"path": "cmd/checkpoint/main.go",
"chars": 4344,
"preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\t\"k8s.io/client-go/tools/clien"
},
{
"path": "cmd/render/plugin/default/asset/asset.go",
"chars": 13739,
"preview": "package asset\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"pat"
},
{
"path": "cmd/render/plugin/default/asset/asset_test.go",
"chars": 3024,
"preview": "package asset\n\nimport (\n\t\"net\"\n\t\"strings\"\n\t\"testing\"\n)\n\ntype f struct {\n\tM string\n}\n\nfunc (f *f) String() string {\n\tretu"
},
{
"path": "cmd/render/plugin/default/asset/images.go",
"chars": 564,
"preview": "package asset\n\n// DefaultImages are the defualt images bootkube components use.\nvar DefaultImages = ImageVersions{\n\tEtcd"
},
{
"path": "cmd/render/plugin/default/asset/internal/templates.go",
"chars": 44410,
"preview": "// Package internal holds asset templates used by bootkube.\npackage internal\n\nvar AdminKubeConfigTemplate = []byte(`apiV"
},
{
"path": "cmd/render/plugin/default/asset/k8s.go",
"chars": 12108,
"preview": "package asset\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"text/template\"\n\n\t\"github.co"
},
{
"path": "cmd/render/plugin/default/asset/tls.go",
"chars": 7322,
"preview": "package asset\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"net\"\n\t\"net/url\"\n\n\t\"github.com/pborman/uuid\"\n\n\t\"github.com/kuberne"
},
{
"path": "cmd/render/plugin/default/main.go",
"chars": 11790,
"preview": "package main\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/url\"\n\t\"strings\"\n\n"
},
{
"path": "cmd/render/plugin/default/render_test.go",
"chars": 819,
"preview": "package main\n\nimport (\n\t\"net\"\n\t\"testing\"\n)\n\nfunc TestOffsetIP(t *testing.T) {\n\tcases := []struct {\n\t\tinput string\n\t\to"
},
{
"path": "code-of-conduct.md",
"chars": 148,
"preview": "# Kubernetes Community Code of Conduct\n\nPlease refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/co"
},
{
"path": "e2e/README.md",
"chars": 436,
"preview": "## Bootkube E2E Testing\n\nThis is the beginnings of E2E testing for the bootkube repo using the standard go testing harne"
},
{
"path": "e2e/checkpointer_test.go",
"chars": 15239,
"preview": "package e2e\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/kubernetes-sigs/boo"
},
{
"path": "e2e/deleteapi_test.go",
"chars": 1451,
"preview": "package e2e\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n)\n\nfunc TestD"
},
{
"path": "e2e/internal/e2eutil/testworkload/nginx_workload.go",
"chars": 7923,
"preview": "package testworkload\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\tbatchv1 \"k8s.io/api/batch/v1\"\n\t\"k8s"
},
{
"path": "e2e/internal/e2eutil/utils/utils.go",
"chars": 605,
"preview": "package utils\n\nimport (\n\t\"time\"\n)\n\nconst (\n\t// NodeRoleMasterLabel defines the master node's label.\n\tNodeRoleMasterLabel"
},
{
"path": "e2e/main_test.go",
"chars": 3862,
"preview": "package e2e\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"math/rand\"\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"k8s.io/api/core/v1\"\n\t\"k8"
},
{
"path": "e2e/network_test.go",
"chars": 5472,
"preview": "package e2e\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/kubernetes-sigs/bootkube/e2e/interna"
},
{
"path": "e2e/node_test.go",
"chars": 2550,
"preview": "package e2e\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/me"
},
{
"path": "e2e/reboot_test.go",
"chars": 3786,
"preview": "package e2e\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"k8s.io/api/core/v1\"\n\tmet"
},
{
"path": "e2e/required_imports.go",
"chars": 99,
"preview": "package e2e\n\nimport (\n\t_ \"github.com/kubernetes-sigs/bootkube/e2e/internal/e2eutil/testworkload\"\n)\n"
},
{
"path": "e2e/smoke_test.go",
"chars": 502,
"preview": "package e2e\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/kubernetes-sigs/bootkube/e2e/internal/e2eutil/testworkload\"\n)\n\nfu"
},
{
"path": "e2e/ssh_client_test.go",
"chars": 3279,
"preview": "package e2e\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\n\t\"golang.org/x/crypto/ssh\"\n\t\"golang.org/x/crypto"
},
{
"path": "go.mod",
"chars": 1691,
"preview": "module github.com/kubernetes-sigs/bootkube\n\ngo 1.13\n\nrequire (\n\tgithub.com/coreos/go-systemd v0.0.0-20190719114852-fd7a8"
},
{
"path": "go.sum",
"chars": 52504,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "hack/jenkins/README.md",
"chars": 3419,
"preview": "# hack/jenkins\n\nJob configurations, pipelines, scripts, and docker images used for `bootkube` validation.\n\n### Overvew\n\n"
},
{
"path": "hack/jenkins/images/bootkube-e2e/Dockerfile",
"chars": 645,
"preview": "FROM ubuntu:xenial\n\nRUN apt-get update && apt-get upgrade -y && \\\n apt-get install -y unzip wget curl git make jq ope"
},
{
"path": "hack/jenkins/jobs/bootkube_conformance_cncf.groovy",
"chars": 775,
"preview": "// META\nrepo = \"kubernetes-incubator/bootkube\"\n\n// CONFIG\norg_whitelist = ['coreos', 'coreos-inc']\njob_admins = ['ericch"
},
{
"path": "hack/jenkins/jobs/bootkube_e2e.groovy",
"chars": 2062,
"preview": "// META\nrepo = \"kubernetes-incubator/bootkube\"\n\n// CONFIG\norg_whitelist = ['coreos', 'coreos-inc']\njob_admins = ['colemi"
},
{
"path": "hack/jenkins/pipelines/bootkube-conformance/Jenkinsfile",
"chars": 3010,
"preview": "// Declarative Pipeline used by `bootkube-conformance` job\n\ndef bash(String cmd) { sh(\"#/usr/bin/env bash\\nset -euo pipe"
},
{
"path": "hack/jenkins/pipelines/bootkube-e2e/Jenkinsfile",
"chars": 3354,
"preview": "// Declarative Pipeline (used by `bootkube-e2e-*` jobs)\n\ndef bash(String cmd) { sh(\"#/usr/bin/env bash\\nset -euo pipefai"
},
{
"path": "hack/jenkins/scripts/conformance.sh",
"chars": 5960,
"preview": "#!/bin/bash\nset -euo pipefail\n\nexport KUBECONFIG=\"${KUBECONFIG:-\"${DIR}/../../quickstart/cluster/auth/kubeconfig\"}\"\nexpo"
},
{
"path": "hack/jenkins/scripts/e2e.sh",
"chars": 331,
"preview": "#!/usr/bin/env bash\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nset -x\nset -euo pipefail\n\ncd \"${DIR}/../../."
},
{
"path": "hack/jenkins/scripts/gather-logs.sh",
"chars": 439,
"preview": "#!/usr/bin/env bash\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nset -x\nset -euo pipefail\n\nexport IDENT=\"${ID"
},
{
"path": "hack/jenkins/scripts/tqs-down.sh",
"chars": 1703,
"preview": "#!/usr/bin/env bash\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nset -x\nset -euo pipefail\n\nexport TERRAFORM=\""
},
{
"path": "hack/jenkins/scripts/tqs-up.sh",
"chars": 1654,
"preview": "#!/usr/bin/env bash\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nset -x\nset -euo pipefail\n\nexport TERRAFORM=\""
},
{
"path": "hack/multi-node/README.md",
"chars": 552,
"preview": "# Hack / Dev multi-node build\n\n**Note: All scripts are assumed to be ran from this directory.**\n\n## Quickstart\n\nThis wil"
},
{
"path": "hack/multi-node/Vagrantfile",
"chars": 6808,
"preview": "# -*- mode: ruby -*-\n# # vi: set ft=ruby :\n\nrequire 'fileutils'\nrequire 'open-uri'\nrequire 'tempfile'\nrequire 'yaml'\n\nVa"
},
{
"path": "hack/multi-node/bootkube-test-recovery",
"chars": 1371,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nGLOG_v=${GLOG_v:-1}\nHOST=${HOST:-c1}\n\nif [ ! -d \"cluster\" ]; then\n echo \"Need so"
},
{
"path": "hack/multi-node/bootkube-up",
"chars": 1564,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nGLOG_v=${GLOG_v:-1}\n\nun=\"$(uname)\"\nlocal_os=\"linux\"\nif [ ${un} == 'Darwin' ]; the"
},
{
"path": "hack/multi-node/conformance-test.sh",
"chars": 258,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nssh_key=\"$(vagrant ssh-config c1 | awk '/IdentityFile/ {print $2}' | tr -d '\"')\"\n"
},
{
"path": "hack/multi-node/etcd-cloud-config.yaml",
"chars": 1245,
"preview": "#cloud-config\n\ncoreos:\n update:\n reboot-strategy: \"off\"\n\n units:\n\n - name: etcd-member.service\n enable: true\n "
},
{
"path": "hack/multi-node/user-data.sample",
"chars": 2403,
"preview": "#cloud-config\n\ncoreos:\n units:\n - name: kubelet.service\n enable: true\n command: start\n content: |\n "
},
{
"path": "hack/quickstart/.gitignore",
"chars": 9,
"preview": "cluster/\n"
},
{
"path": "hack/quickstart/copylogs.sh",
"chars": 568,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\n# copies logs from the remote machine to a local temporary directory\n\nREMOTE_HOST"
},
{
"path": "hack/quickstart/init-master.sh",
"chars": 6906,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\nset -x\n\nREMOTE_HOST=$1\nREMOTE_PORT=${REMOTE_PORT:-22}\nREMOTE_USER=${REMOTE_USER:-c"
},
{
"path": "hack/quickstart/init-node.sh",
"chars": 3293,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nREMOTE_HOST=$1\nKUBECONFIG=$2\nREMOTE_PORT=${REMOTE_PORT:-22}\nREMOTE_USER=${REMOTE_"
},
{
"path": "hack/quickstart/kubelet.service",
"chars": 2330,
"preview": "[Service]\nEnvironmentFile=-/etc/kubernetes/kubelet.env\nEnvironment=KUBELET_IMAGE_URL=docker://k8s.gcr.io/hyperkube\nEnvir"
},
{
"path": "hack/quickstart/quickstart-aws.md",
"chars": 2736,
"preview": "## AWS Quickstart\n\n### Choose a cluster prefix\n\nThis can be changed to identify separate clusters.\n\n```\nexport CLUSTER_P"
},
{
"path": "hack/quickstart/quickstart-gce.md",
"chars": 1853,
"preview": "## GCE Quickstart\n\n### Choose a cluster prefix\n\nThis can be changed to identify separate clusters.\n\n```\nexport CLUSTER_P"
},
{
"path": "hack/quickstart/test.sh",
"chars": 148,
"preview": "\n#!/usr/bin/env bash\nset -euo pipefail\n\nexport SSH_OPTS=${SSH_OPTS:-}\" -o UserKnownHostsFile=/dev/null -o StrictHostKeyC"
},
{
"path": "hack/scripts/gatherlogs",
"chars": 843,
"preview": "#!/bin/bash\n\n# dependencies\n# jq\n# docker\n# journalctl\n\nset -euo pipefail\n\nLOGS_DIR=${LOGS_DIR:-logs}\n\nrm -rf ${LO"
},
{
"path": "hack/single-node/README.md",
"chars": 369,
"preview": "# Hack / Dev single-node build\n\n**Note: All scripts are assumed to be ran from this directory.**\n\n## Quickstart\n\nThis wi"
},
{
"path": "hack/single-node/Vagrantfile",
"chars": 3441,
"preview": "# -*- mode: ruby -*-\n# # vi: set ft=ruby :\n\nrequire 'fileutils'\nrequire 'open-uri'\nrequire 'tempfile'\nrequire 'yaml'\n\n$u"
},
{
"path": "hack/single-node/bootkube-up",
"chars": 1317,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nGLOG_v=${GLOG_v:-1}\n\nun=\"$(uname)\"\nlocal_os=\"linux\"\nif [ ${un} == 'Darwin' ]; the"
},
{
"path": "hack/single-node/conformance-test.sh",
"chars": 252,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nssh_key=\"$(vagrant ssh-config | awk '/IdentityFile/ {print $2}' | tr -d '\"')\"\nssh"
},
{
"path": "hack/single-node/user-data-etcd.sample",
"chars": 1194,
"preview": " - name: etcd-member.service\n enable: true\n drop-ins:\n - name: 10-version.conf\n content: |\n"
},
{
"path": "hack/single-node/user-data.sample",
"chars": 2335,
"preview": "#cloud-config\n\ncoreos:\n units:\n - name: kubelet.service\n enable: true\n command: start\n content: |\n "
},
{
"path": "hack/terraform-quickstart/README.md",
"chars": 491,
"preview": "## Terraform-quickstart\nThis directory provides a basic way to use terraform to setup compute resources on AWS. It was w"
},
{
"path": "hack/terraform-quickstart/copylogs.sh",
"chars": 783,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nexport WORKER_IPS=`terraform output -json worker_ips | jq -r '.value[]'`\nexport M"
},
{
"path": "hack/terraform-quickstart/environment_default.txt",
"chars": 0,
"preview": ""
},
{
"path": "hack/terraform-quickstart/environment_e2e.txt",
"chars": 45,
"preview": "KUBELET_MINIMUM_CONTAINER_TTL_DURATION=30m0s\n"
},
{
"path": "hack/terraform-quickstart/genlogs.sh",
"chars": 649,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nexport WORKER_IPS=`terraform output -json worker_ips | jq -r '.value[]'`\nexport M"
},
{
"path": "hack/terraform-quickstart/iam.tf",
"chars": 848,
"preview": "resource \"aws_iam_instance_profile\" \"bk_profile\" {\n name_prefix = \"bootkube_e2e_profile\"\n role = \"${aws_iam_rol"
},
{
"path": "hack/terraform-quickstart/main.tf",
"chars": 4029,
"preview": "locals {\n default_keys = [\"Name\", \"kubernetes.io/cluster/${var.kubernetes_id}\"]\n default_values = [\"${var.resource_o"
},
{
"path": "hack/terraform-quickstart/network.tf",
"chars": 1729,
"preview": "resource \"aws_vpc\" \"main\" {\n cidr_block = \"10.8.0.0/16\"\n\n tags {\n Name = \"${var.resource_owner}\"\n }\n}\n\ndata \"aws_a"
},
{
"path": "hack/terraform-quickstart/outputs.tf",
"chars": 309,
"preview": "output \"bootstrap_node_ip\" {\n value = \"${aws_instance.bootstrap_node.public_ip}\"\n}\n\noutput \"worker_ips\" {\n value = [\"$"
},
{
"path": "hack/terraform-quickstart/run-conformance.sh",
"chars": 591,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\n# This is a small shim to run the conformance runner script in\n# /hack/tests/conf"
},
{
"path": "hack/terraform-quickstart/start-cluster.sh",
"chars": 1327,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nexport BOOTSTRAP_IP=`terraform output bootstrap_node_ip`\nexport WORKER_IPS=`terra"
},
{
"path": "hack/terraform-quickstart/terraform.tfvars.example",
"chars": 95,
"preview": "access_key_id = \"\"\naccess_key = \"\"\nresource_owner = \"bootkube_example_terraform\"\nssh_key = \"\"\n\n"
},
{
"path": "hack/terraform-quickstart/variables.tf",
"chars": 1196,
"preview": "variable \"access_key_id\" {\n type = \"string\"\n}\n\nvariable \"access_key\" {\n type = \"string\"\n}\n\nvariable \"kubernetes_id\" {\n"
},
{
"path": "hack/tests/conformance-gce.sh",
"chars": 5335,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\n# DESCRIPTION:\n#\n# This script is meant to launch GCE nodes, run bootkube to boot"
},
{
"path": "hack/tests/conformance-test.sh",
"chars": 1709,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nCONFORMANCE_REPO=${CONFORMANCE_REPO:-github.com/kubernetes/kubernetes}\nCONFORMANC"
},
{
"path": "image/bootkube/Dockerfile",
"chars": 38,
"preview": "FROM scratch\n\nCOPY bootkube /bootkube\n"
},
{
"path": "image/bootkube/build-image.sh",
"chars": 588,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nIMAGE_REPO=${IMAGE_REPO:-quay.io/coreos/bootkube}\n\nreadonly BOOTKUBE_ROOT=$(git r"
},
{
"path": "image/checkpoint/Dockerfile",
"chars": 41,
"preview": "FROM alpine\n\nCOPY checkpoint /checkpoint\n"
},
{
"path": "image/checkpoint/build-image.sh",
"chars": 642,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nIMAGE_REPO=${IMAGE_REPO:-quay.io/coreos/pod-checkpointer}\n\nreadonly BOOTKUBE_ROOT"
},
{
"path": "pkg/bootkube/bootkube.go",
"chars": 2137,
"preview": "package bootkube\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t\"github.com/kubernetes-sigs/bootkube/cmd/render/plugin/defa"
},
{
"path": "pkg/bootkube/bootstrap.go",
"chars": 3451,
"preview": "package bootkube\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/kubernetes-sigs/bootkube/cmd/render/plu"
},
{
"path": "pkg/bootkube/bootstrap_test.go",
"chars": 5282,
"preview": "package bootkube\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/kubernetes-sigs/bootk"
},
{
"path": "pkg/bootkube/create.go",
"chars": 12040,
"preview": "package bootkube\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\""
},
{
"path": "pkg/bootkube/create_test.go",
"chars": 3414,
"preview": "package bootkube\n\nimport (\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestParseManifests(t *testing.T) {\n\ttests := []struc"
},
{
"path": "pkg/bootkube/status.go",
"chars": 5516,
"preview": "package bootkube\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\tcorev1 \"k8s.io/ap"
},
{
"path": "pkg/checkpoint/apiserver.go",
"chars": 805,
"preview": "package checkpoint\n\nimport (\n\t\"context\"\n\n\t\"github.com/golang/glog\"\n\tv1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery"
},
{
"path": "pkg/checkpoint/checkpoint.go",
"chars": 5249,
"preview": "// Package checkpoint provides libraries that are used by the pod-checkpointer utility to checkpoint\n// pods on a node. "
},
{
"path": "pkg/checkpoint/config_map.go",
"chars": 2472,
"preview": "package checkpoint\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s"
},
{
"path": "pkg/checkpoint/cri/README.md",
"chars": 396,
"preview": "# Vendored CRI APIs\n\nWe copy generated CRI APIs for a couple reasons:\n* When CRI promotes a version, it sometimes delete"
},
{
"path": "pkg/checkpoint/cri/v1alpha1/api.pb.go",
"chars": 645533,
"preview": "/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
},
{
"path": "pkg/checkpoint/cri/v1alpha1/constants.go",
"chars": 1907,
"preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
},
{
"path": "pkg/checkpoint/cri/v1alpha2/api.pb.go",
"chars": 834635,
"preview": "/*\nCopyright The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/checkpoint/cri/v1alpha2/constants.go",
"chars": 1908,
"preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
},
{
"path": "pkg/checkpoint/internal/README.md",
"chars": 263,
"preview": "Copied from pkg/kubelet/util to prevent importing kubernetes\n\n```\nwget https://raw.githubusercontent.com/kubernetes/kube"
},
{
"path": "pkg/checkpoint/internal/util.go",
"chars": 852,
"preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
},
{
"path": "pkg/checkpoint/internal/util_unix.go",
"chars": 2994,
"preview": "// +build freebsd linux darwin\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2."
},
{
"path": "pkg/checkpoint/kubelet.go",
"chars": 2476,
"preview": "package checkpoint\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k"
},
{
"path": "pkg/checkpoint/manifest.go",
"chars": 3129,
"preview": "package checkpoint\n\nimport (\n\t\"bytes\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/golang/glog\"\n\tcorev1 "
},
{
"path": "pkg/checkpoint/pod.go",
"chars": 6181,
"preview": "package checkpoint\n\nimport (\n\t\"errors\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/golang/glog\"\n\tcorev1 \"k8s.io/api/core/v"
},
{
"path": "pkg/checkpoint/pod_test.go",
"chars": 13523,
"preview": "package checkpoint\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"k8s.io/api/core/v1\"\n\tapiequality \"k8s.io/apimachinery/pkg/api/equality"
},
{
"path": "pkg/checkpoint/process.go",
"chars": 11013,
"preview": "package checkpoint\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\t\"k8s.io/api/core/v1\"\n"
},
{
"path": "pkg/checkpoint/process_test.go",
"chars": 13359,
"preview": "package checkpoint\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/"
},
{
"path": "pkg/checkpoint/runtime_service.go",
"chars": 6339,
"preview": "package checkpoint\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\t\"google.golang.org/grpc\"\n\t\"k8s.io/api/core/v"
},
{
"path": "pkg/checkpoint/secret.go",
"chars": 2360,
"preview": "package checkpoint\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s"
},
{
"path": "pkg/checkpoint/state.go",
"chars": 10816,
"preview": "package checkpoint\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n)\n\n// apiCondition represents information returne"
},
{
"path": "pkg/checkpoint/state_test.go",
"chars": 1875,
"preview": "package checkpoint\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tallAPIConditions []apiCondition\n)\n\nfunc init() {\n\tc"
},
{
"path": "pkg/plugin/plugin.go",
"chars": 348,
"preview": "package plugin\n\n// Options represents the set of options that are common to all plugins.\ntype Options struct {\n\tAssetDir"
},
{
"path": "pkg/recovery/apiserver.go",
"chars": 1660,
"preview": "package recovery\n\nimport (\n\t\"context\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"k"
},
{
"path": "pkg/recovery/etcd.go",
"chars": 5053,
"preview": "// The etcd backend fetches control plane objects directly from etcd. This is adapted heavily from\n// kubernetes/staging"
},
{
"path": "pkg/recovery/etcd_template.go",
"chars": 4646,
"preview": "package recovery\n\nvar recoveryEtcdTemplate = []byte(`apiVersion: v1\nkind: Pod\nmetadata:\n name: recovery-etcd\n namespac"
},
{
"path": "pkg/recovery/recover.go",
"chars": 12319,
"preview": "// Package recovery provides tooling to help with control plane disaster recovery. Recover() uses a\n// Backend to extrac"
},
{
"path": "pkg/recovery/recover_test.go",
"chars": 13427,
"preview": "package recovery\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/kubernetes-sigs/bootkube/cmd/render/plugin/default/asset\""
},
{
"path": "pkg/recovery/util.go",
"chars": 1026,
"preview": "package recovery\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"k8s.io/apimachinery/pkg/conversion\"\n\t\"k8s.io/apimachinery/pkg/runtime\"\n)"
},
{
"path": "pkg/tlsutil/tlsutil.go",
"chars": 3501,
"preview": "package tlsutil\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"ma"
},
{
"path": "pkg/util/log.go",
"chars": 522,
"preview": "package util\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/golang/glog\"\n\t\"k8s.io/apimachinery/pkg/util/wait\"\n)\n\ntype Gl"
},
{
"path": "pkg/version/version.go",
"chars": 45,
"preview": "package version\n\nvar Version string = \"none\"\n"
},
{
"path": "vendor/github.com/coreos/etcd/LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "vendor/github.com/coreos/etcd/NOTICE",
"chars": 126,
"preview": "CoreOS Project\nCopyright 2014 CoreOS, Inc\n\nThis product includes software developed at CoreOS, Inc.\n(http://www.coreos.c"
},
{
"path": "vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go",
"chars": 19024,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: auth.proto\n\n/*\n\tPackage authpb is a generated protocol buf"
},
{
"path": "vendor/github.com/coreos/etcd/auth/authpb/auth.proto",
"chars": 739,
"preview": "syntax = \"proto3\";\npackage authpb;\n\nimport \"gogoproto/gogo.proto\";\n\noption (gogoproto.marshaler_all) = true;\noption (gog"
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/README.md",
"chars": 2756,
"preview": "# etcd/clientv3\n\n[](https://godoc.org/"
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/auth.go",
"chars": 9435,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/client.go",
"chars": 14579,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/cluster.go",
"chars": 3407,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/compact_op.go",
"chars": 1517,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/compare.go",
"chars": 3723,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/config.go",
"chars": 2845,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/doc.go",
"chars": 3334,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/health_balancer.go",
"chars": 15195,
"preview": "// Copyright 2017 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/kv.go",
"chars": 5720,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/lease.go",
"chars": 15529,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/logger.go",
"chars": 4842,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/maintenance.go",
"chars": 6613,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/op.go",
"chars": 15957,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/options.go",
"chars": 1974,
"preview": "// Copyright 2017 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/ready_wait.go",
"chars": 955,
"preview": "// Copyright 2017 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/retry.go",
"chars": 17677,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/sort.go",
"chars": 888,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/txn.go",
"chars": 3115,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/clientv3/watch.go",
"chars": 21033,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go",
"chars": 713,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go",
"chars": 11262,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go",
"chars": 695,
"preview": "// Copyright 2016 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go",
"chars": 24733,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: etcdserver.proto\n\n/*\n\tPackage etcdserverpb is a generated "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.proto",
"chars": 1515,
"preview": "syntax = \"proto2\";\npackage etcdserverpb;\n\nimport \"gogoproto/gogo.proto\";\n\noption (gogoproto.marshaler_all) = true;\noptio"
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go",
"chars": 55039,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: raft_internal.proto\n\npackage etcdserverpb\n\nimport (\n\t\"fmt\""
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.proto",
"chars": 2316,
"preview": "syntax = \"proto3\";\npackage etcdserverpb;\n\nimport \"gogoproto/gogo.proto\";\nimport \"etcdserver.proto\";\nimport \"rpc.proto\";\n"
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal_stringer.go",
"chars": 6229,
"preview": "// Copyright 2018 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go",
"chars": 465222,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: rpc.proto\n\npackage etcdserverpb\n\nimport (\n\t\"fmt\"\n\n\tproto \""
},
{
"path": "vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto",
"chars": 32682,
"preview": "syntax = \"proto3\";\npackage etcdserverpb;\n\nimport \"gogoproto/gogo.proto\";\nimport \"etcd/mvcc/mvccpb/kv.proto\";\nimport \"etc"
},
{
"path": "vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go",
"chars": 17598,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: kv.proto\n\n/*\n\tPackage mvccpb is a generated protocol buffe"
},
{
"path": "vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.proto",
"chars": 1647,
"preview": "syntax = \"proto3\";\npackage mvccpb;\n\nimport \"gogoproto/gogo.proto\";\n\noption (gogoproto.marshaler_all) = true;\noption (gog"
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/doc.go",
"chars": 696,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/id.go",
"chars": 1297,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/set.go",
"chars": 3820,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/slice.go",
"chars": 869,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/urls.go",
"chars": 2026,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/coreos/etcd/pkg/types/urlsmap.go",
"chars": 2740,
"preview": "// Copyright 2015 The etcd Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not "
},
{
"path": "vendor/github.com/davecgh/go-spew/LICENSE",
"chars": 766,
"preview": "ISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/bypass.go",
"chars": 4715,
"preview": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this sof"
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/bypasssafe.go",
"chars": 1741,
"preview": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this sof"
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/common.go",
"chars": 10364,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/config.go",
"chars": 12842,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/doc.go",
"chars": 8527,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/dump.go",
"chars": 13794,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/format.go",
"chars": 11314,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/spew.go",
"chars": 5969,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/ghodss/yaml/.gitignore",
"chars": 232,
"preview": "# OSX leaves these everywhere on SMB shares\n._*\n\n# Eclipse files\n.classpath\n.project\n.settings/**\n\n# Emacs save files\n*~"
},
{
"path": "vendor/github.com/ghodss/yaml/.travis.yml",
"chars": 66,
"preview": "language: go\ngo:\n - 1.3\n - 1.4\nscript:\n - go test\n - go build\n"
},
{
"path": "vendor/github.com/ghodss/yaml/LICENSE",
"chars": 2557,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Sam Ghods\n\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "vendor/github.com/ghodss/yaml/README.md",
"chars": 3188,
"preview": "# YAML marshaling and unmarshaling support for Go\n\n[](https://trav"
},
{
"path": "vendor/github.com/ghodss/yaml/fields.go",
"chars": 12721,
"preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/ghodss/yaml/yaml.go",
"chars": 8489,
"preview": "package yaml\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"gopkg.in/yaml.v2\"\n)\n\n// Marshals the ob"
}
]
// ... and 1577 more files (download for full content)
About this extraction
This page contains the full source code of the kubernetes-sigs/bootkube GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1777 files (25.4 MB), approximately 6.8M tokens, and a symbol index with 143730 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.