From 6cd10d4f8724b550cffce581a965d132f3b448fb Mon Sep 17 00:00:00 2001 From: Julian Strobl Date: Mon, 11 Jan 2016 15:26:44 +0100 Subject: [PATCH 01/18] add container names kubectl logs output Present a list of container names one can choose from. --- pkg/registry/pod/strategy.go | 26 ++++++++++++++++++++++---- pkg/registry/pod/strategy_test.go | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/registry/pod/strategy.go b/pkg/registry/pod/strategy.go index 4e957fd1eb7..ffdeb988ef1 100644 --- a/pkg/registry/pod/strategy.go +++ b/pkg/registry/pod/strategy.go @@ -22,6 +22,7 @@ import ( "net/http" "net/url" "strconv" + "strings" "time" "k8s.io/kubernetes/pkg/api" @@ -231,6 +232,15 @@ func ResourceLocation(getter ResourceGetter, rt http.RoundTripper, ctx api.Conte return loc, rt, nil } +// getContainerNames returns a formatted string containing the container names +func getContainerNames(pod *api.Pod) string { + names := []string{} + for _, c := range pod.Spec.Containers { + names = append(names, c.Name) + } + return strings.Join(names, " ") +} + // LogLocation returns the log URL for a pod container. If opts.Container is blank // and only one container is present in the pod, that container is used. func LogLocation( @@ -249,10 +259,14 @@ func LogLocation( // If a container was provided, it must be valid container := opts.Container if len(container) == 0 { - if len(pod.Spec.Containers) == 1 { + switch len(pod.Spec.Containers) { + case 1: container = pod.Spec.Containers[0].Name - } else { + case 0: return nil, nil, errors.NewBadRequest(fmt.Sprintf("a container name must be specified for pod %s", name)) + default: + containerNames := getContainerNames(pod) + return nil, nil, errors.NewBadRequest(fmt.Sprintf("a container name must be specified for pod %s, choose one of: [%s]", name, containerNames)) } } else { if !podHasContainerWithName(pod, container) { @@ -386,10 +400,14 @@ func streamLocation( // Try to figure out a container // If a container was provided, it must be valid if container == "" { - if len(pod.Spec.Containers) == 1 { + switch len(pod.Spec.Containers) { + case 1: container = pod.Spec.Containers[0].Name - } else { + case 0: return nil, nil, errors.NewBadRequest(fmt.Sprintf("a container name must be specified for pod %s", name)) + default: + containerNames := getContainerNames(pod) + return nil, nil, errors.NewBadRequest(fmt.Sprintf("a container name must be specified for pod %s, choose one of: [%s]", name, containerNames)) } } else { if !podHasContainerWithName(pod, container) { diff --git a/pkg/registry/pod/strategy_test.go b/pkg/registry/pod/strategy_test.go index 17e746dd9b2..08ed1680e18 100644 --- a/pkg/registry/pod/strategy_test.go +++ b/pkg/registry/pod/strategy_test.go @@ -129,7 +129,7 @@ func TestCheckLogLocation(t *testing.T) { Status: api.PodStatus{}, }, opts: &api.PodLogOptions{}, - expectedErr: errors.NewBadRequest("a container name must be specified for pod test"), + expectedErr: errors.NewBadRequest("a container name must be specified for pod test, choose one of: [container1 container2]"), }, { in: &api.Pod{ From 43e45bbe5ae86b49a9c2c288ebd59b839c80169c Mon Sep 17 00:00:00 2001 From: Aaron Crickenberger Date: Fri, 29 Jan 2016 12:14:55 -0800 Subject: [PATCH 02/18] Copy-paste on-call docs out of wiki Changed links to docs/wiki where appropriate. No content changes aside from explicitly calling out FAQ's as living in the wiki. Ran `hack/update-generated-docs.sh` --- docs/devel/README.md | 2 + docs/devel/on-call-build-cop.md | 105 +++++++++++++++++++++++++++++ docs/devel/on-call-rotations.md | 52 ++++++++++++++ docs/devel/on-call-user-support.md | 83 +++++++++++++++++++++++ docs/devel/pull-requests.md | 2 +- 5 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 docs/devel/on-call-build-cop.md create mode 100644 docs/devel/on-call-rotations.md create mode 100644 docs/devel/on-call-user-support.md diff --git a/docs/devel/README.md b/docs/devel/README.md index 8a01a8d65c7..4a0498884dc 100644 --- a/docs/devel/README.md +++ b/docs/devel/README.md @@ -48,6 +48,8 @@ Guide](../admin/README.md). * **Pull Request Process** ([pull-requests.md](pull-requests.md)): When and why pull requests are closed. +* **Kubernetes On-Call Rotations** ([on-call-rotations.md](on-call-rotations.md)): Descriptions of on-call rotations for build and end-user support + * **Faster PR reviews** ([faster_reviews.md](faster_reviews.md)): How to get faster PR reviews. * **Getting Recent Builds** ([getting-builds.md](getting-builds.md)): How to get recent builds including the latest builds that pass CI. diff --git a/docs/devel/on-call-build-cop.md b/docs/devel/on-call-build-cop.md new file mode 100644 index 00000000000..7530963ec65 --- /dev/null +++ b/docs/devel/on-call-build-cop.md @@ -0,0 +1,105 @@ + + + + +WARNING +WARNING +WARNING +WARNING +WARNING + +

PLEASE NOTE: This document applies to the HEAD of the source tree

+ +If you are using a released version of Kubernetes, you should +refer to the docs that go with that version. + +Documentation for other releases can be found at +[releases.k8s.io](http://releases.k8s.io). + +-- + + + + +Kubernetes "Github and Build-cop" Rotation +========================================== + +Preqrequisites +-------------- + +* Ensure you have [write access to http://github.com/kubernetes/kubernetes](https://github.com/orgs/kubernetes/teams/kubernetes-maintainers) + * Test your admin access by e.g. adding a label to an issue. + +Traffic sources and responsibilities +------------------------------------ + +* GitHub [https://github.com/kubernetes/kubernetes/issues](https://github.com/kubernetes/kubernetes/issues) and [https://github.com/kubernetes/kubernetes/pulls](https://github.com/kubernetes/kubernetes/pulls): Your job is to be the first responder to all new issues and PRs. If you are not equipped to do this (which is fine!), it is your job to seek guidance! + * Support issues should be closed and redirected to Stackoverflow (see example response below). + * All incoming issues should be tagged with a team label (team/{api,ux,control-plane,node,cluster,csi,redhat,mesosphere,gke,release-infra,test-infra,none}); for issues that overlap teams, you can use multiple team labels + * There is a related concept of "Github teams" which allow you to @ mention a set of people; feel free to @ mention a Github team if you wish, but this is not a substitute for adding a team/* label, which is required + * [Google teams](https://github.com/orgs/kubernetes/teams?utf8=%E2%9C%93&query=goog-) + * [Redhat teams](https://github.com/orgs/kubernetes/teams?utf8=%E2%9C%93&query=rh-) + * [SIGs](https://github.com/orgs/kubernetes/teams?utf8=%E2%9C%93&query=sig-) + * If the issue is reporting broken builds, broken e2e tests, or other obvious P0 issues, label the issue with priority/P0 and assign it to someone. This is the only situation in which you should add a priority/* label + * non-P0 issues do not need a reviewer assigned initially + * Assign any issues related to Vagrant to @derekwaynecarr (and @mention him in the issue) + * All incoming PRs should be assigned a reviewer. + * unless it is a WIP (Work in Progress), RFC (Request for Comments), or design proposal. + * An auto-assigner [should do this for you] (https://github.com/kubernetes/kubernetes/pull/12365/files) + * When in doubt, choose a TL or team maintainer of the most relevant team; they can delegate + * Keep in mind that you can @ mention people in an issue/PR to bring it to their attention without assigning it to them. You can also @ mention github teams, such as @kubernetes/goog-ux or @kubernetes/kubectl + * If you need help triaging an issue or PR, consult with (or assign it to) @brendandburns, @thockin, @bgrant0607, @quinton-hoole, @davidopp, @dchen1107, @lavalamp (all U.S. Pacific Time) or @fgrzadkowski (Central European Time). + * At the beginning of your shift, please add team/* labels to any issues that have fallen through the cracks and don't have one. Likewise, be fair to the next person in rotation: try to ensure that every issue that gets filed while you are on duty is handled. The Github query to find issues with no team/* label is: [here](https://github.com/kubernetes/kubernetes/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+-label%3Ateam%2Fcontrol-plane+-label%3Ateam%2Fmesosphere+-label%3Ateam%2Fredhat+-label%3Ateam%2Frelease-infra+-label%3Ateam%2Fnone+-label%3Ateam%2Fnode+-label%3Ateam%2Fcluster+-label%3Ateam%2Fux+-label%3Ateam%2Fcsi+-label%3Ateam%2Fapi+-label%3Ateam%2Ftest-infra+). + +Example response for support issues: + + Please re-post your question to [stackoverflow](http://stackoverflow.com/questions/tagged/kubernetes). + + We are trying to consolidate the channels to which questions for help/support are posted so that we can improve our efficiency in responding to your requests, and to make it easier for you to find answers to frequently asked questions and how to address common use cases. + + We regularly see messages posted in multiple forums, with the full response thread only in one place or, worse, spread across multiple forums. Also, the large volume of support issues on github is making it difficult for us to use issues to identify real bugs. + + The Kubernetes team scans stackoverflow on a regular basis, and will try to ensure your questions don't go unanswered. + + Before posting a new question, please search stackoverflow for answers to similar questions, and also familiarize yourself with: + * [the user guide](http://kubernetes.io/v1.0/) + * [the troubleshooting guide](http://kubernetes.io/v1.0/docs/troubleshooting.html) + + Again, thanks for using Kubernetes. + + The Kubernetes Team + +Build-copping +------------- + +* The [merge-bot submit queue](http://submit-queue.k8s.io/) ([source](https://github.com/kubernetes/contrib/tree/master/submit-queue)) should auto-merge all eligible PRs for you once they've passed all the relevant checks mentioned below and all [critical e2e tests] (https://goto.google.com/k8s-test/view/Critical%20Builds/) are passing. If the merge-bot been disabled for some reason, or tests are failing, you might need to do some manual merging to get things back on track. +* Once a day or so, look at the [flaky test builds](https://goto.google.com/k8s-test/view/Flaky/); if they are timing out, clusters are failing to start, or tests are consistently failing (instead of just flaking), file an issue to get things back on track. +* Jobs that are not in [critical e2e tests] (https://goto.google.com/k8s-test/view/Critical%20Builds/) or [flaky test builds](https://goto.google.com/k8s-test/view/Flaky/) are not your responsibility to monitor. The `Test owner:` in the job description will be automatically emailed if the job is failing. +* If you are a weekday oncall, ensure that PRs confirming to the following pre-requisites are being merged at a reasonable rate: + * [Have been LGTMd](https://github.com/kubernetes/kubernetes/labels/lgtm) + * Pass Travis and Shippable. + * Author has signed CLA if applicable. +* If you are a weekend oncall, [never merge PRs manually](collab.md), instead add the label "lgtm" to the PRs once they have been LGTMd and passed Travis and Shippable; this will cause merge-bot to merge them automatically (or make them easy to find by the next oncall, who will merge them). +* When the build is broken, roll back the PRs responsible ASAP +* When E2E tests are unstable, a "merge freeze" may be instituted. During a merge freeze: + * Oncall should slowly merge LGTMd changes throughout the day while monitoring E2E to ensure stability. + * Ideally the E2E run should be green, but some tests are flaky and can fail randomly (not as a result of a particular change). + * If a large number of tests fail, or tests that normally pass fail, that is an indication that one or more of the PR(s) in that build might be problematic (and should be reverted). + * Use the Test Results Analyzer to see individual test history over time. +* Flake mitigation + * Tests that flake (fail a small percentage of the time) need an issue filed against them. Please read [this](https://github.com/kubernetes/kubernetes/blob/doc-flaky-test/docs/devel/flaky-tests.md#filing-issues-for-flaky-tests); the build cop is expected to file issues for any flaky tests they encounter. + * It's reasonable to manually merge PRs that fix a flake or otherwise mitigate it. + +Contact information +------------------- + +[@k8s-oncall](https://github.com/k8s-oncall) will reach the current person on call. + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/on-call-build-cop.md?pixel)]() + diff --git a/docs/devel/on-call-rotations.md b/docs/devel/on-call-rotations.md new file mode 100644 index 00000000000..9544db5102c --- /dev/null +++ b/docs/devel/on-call-rotations.md @@ -0,0 +1,52 @@ + + + + +WARNING +WARNING +WARNING +WARNING +WARNING + +

PLEASE NOTE: This document applies to the HEAD of the source tree

+ +If you are using a released version of Kubernetes, you should +refer to the docs that go with that version. + +Documentation for other releases can be found at +[releases.k8s.io](http://releases.k8s.io). + +-- + + + + +Kubernetes On-Call Rotations +==================== + +Kubernetes "first responder" rotations +-------------------------------------- + +Kubernetes has generated a lot of public traffic: email, pull-requests, bugs, etc. So much traffic that it's becoming impossible to keep up with it all! This is a fantastic problem to have. In order to be sure that SOMEONE, but not EVERYONE on the team is paying attention to public traffic, we have instituted two "first responder" rotations, listed below. Please read this page before proceeding to the pages linked below, which are specific to each rotation. + +Please also read our [notes on OSS collaboration](collab.md), particularly the bits about hours. Specifically, each rotation is expected to be active primarily during work hours, less so off hours. + +During regular workday work hours of your shift, your primary responsibility is to monitor the traffic sources specific to your rotation. You can check traffic in the evenings if you feel so inclined, but it is not expected to be as highly focused as work hours. For weekends, you should check traffic very occasionally (e.g. once or twice a day). Again, it is not expected to be as highly focused as workdays. It is assumed that over time, everyone will get weekday and weekend shifts, so the workload will balance out. + +If you can not serve your shift, and you know this ahead of time, it is your responsibility to find someone to cover and to change the rotation. If you have an emergency, your responsibilities fall on the primary of the other rotation, who acts as your secondary. If you need help to cover all of the tasks, partners with oncall rotations (e.g., [Redhat](https://github.com/orgs/kubernetes/teams/rh-oncall)). + +If you are not on duty you DO NOT need to do these things. You are free to focus on "real work". + +Note that Kubernetes will occasionally enter code slush/freeze, prior to milestones. When it does, there might be changes in the instructions (assigning milestones, for instance). + +* [Github and Build Cop Rotation](on-call-build-cop.md) +* [User Support Rotation](on-call-user-support.md) + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/on-call-rotations.md?pixel)]() + diff --git a/docs/devel/on-call-user-support.md b/docs/devel/on-call-user-support.md new file mode 100644 index 00000000000..ceea9c76a18 --- /dev/null +++ b/docs/devel/on-call-user-support.md @@ -0,0 +1,83 @@ + + + + +WARNING +WARNING +WARNING +WARNING +WARNING + +

PLEASE NOTE: This document applies to the HEAD of the source tree

+ +If you are using a released version of Kubernetes, you should +refer to the docs that go with that version. + +Documentation for other releases can be found at +[releases.k8s.io](http://releases.k8s.io). + +-- + + + + +Kubernetes "User Support" Rotation +================================== + +Traffic sources and responsibilities +------------------------------------ + +* [StackOverflow](http://stackoverflow.com/questions/tagged/kubernetes) and [ServerFault](http://serverfault.com/questions/tagged/google-kubernetes): Respond to any thread that has no responses and is more than 6 hours old (over time we will lengthen this timeout to allow community responses). If you are not equipped to respond, it is your job to redirect to someone who can. + * [Query for unanswered Kubernetes StackOverflow questions](http://stackoverflow.com/search?q=%5Bkubernetes%5D+answers%3A0) + * [Query for unanswered Kubernetes ServerFault questions](http://serverfault.com/questions/tagged/google-kubernetes?sort=unanswered&pageSize=15) + * Direct poorly formulated questions to [stackoverflow's tips about how to ask](http://stackoverflow.com/help/how-to-ask) + * Direct off-topic questions to [stackoverflow's policy](http://stackoverflow.com/help/on-topic) +* [Slack](https://kubernetes.slack.com) ([registration](http://slack.k8s.io)): Your job is to be on Slack, watching for questions and answering or redirecting as needed. Also check out the [Slack Archive](http://kubernetes.slackarchive.io/). +* [Email/Groups](https://groups.google.com/forum/#!forum/google-containers): Respond to any thread that has no responses and is more than 6 hours old (over time we will lengthen this timeout to allow community responses). If you are not equipped to respond, it is your job to redirect to someone who can. +* [Legacy] [IRC](irc://irc.freenode.net/#google-containers) (irc.freenode.net #google-containers): watch IRC for questions and try to redirect users to Slack. Also check out the [IRC logs](https://botbot.me/freenode/google-containers/). + +In general, try to direct support questions to: + +1. Documentation, such as the [user guide](../user-guide/README.md) and [troubleshooting guide](../troubleshooting.md) +2. Stackoverflow + +If you see questions on a forum other than Stackoverflow, try to redirect them to Stackoverflow. Example response: + + Please re-post your question to [stackoverflow](http://stackoverflow.com/questions/tagged/kubernetes). + + We are trying to consolidate the channels to which questions for help/support are posted so that we can improve our efficiency in responding to your requests, and to make it easier for you to find answers to frequently asked questions and how to address common use cases. + + We regularly see messages posted in multiple forums, with the full response thread only in one place or, worse, spread across multiple forums. Also, the large volume of support issues on github is making it difficult for us to use issues to identify real bugs. + + The Kubernetes team scans stackoverflow on a regular basis, and will try to ensure your questions don't go unanswered. + + Before posting a new question, please search stackoverflow for answers to similar questions, and also familiarize yourself with: + * [the user guide](http://kubernetes.io/v1.1/) + * [the troubleshooting guide](http://kubernetes.io/v1.1/docs/troubleshooting.html) + + Again, thanks for using Kubernetes. + + The Kubernetes Team + +If you answer a question (in any of the above forums) that you think might be useful for someone else in the future, *please add it to one of the FAQs in the wiki*: +* [User FAQ](https://github.com/kubernetes/kubernetes/wiki/User-FAQ) +* [Developer FAQ](https://github.com/kubernetes/kubernetes/wiki/Developer-FAQ) +* [Debugging FAQ](https://github.com/kubernetes/kubernetes/wiki/Debugging-FAQ). + +Getting it into the FAQ is more important than polish. Please indicate the date it was added, so people can judge the likelihood that it is out-of-date (and please correct any FAQ entries that you see contain out-of-date information). + +Contact information +------------------- + +[@k8s-support-oncall](https://github.com/k8s-support-oncall) will reach the current person on call. + + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/on-call-user-support.md?pixel)]() + diff --git a/docs/devel/pull-requests.md b/docs/devel/pull-requests.md index eaffce237d6..5394d5740ce 100644 --- a/docs/devel/pull-requests.md +++ b/docs/devel/pull-requests.md @@ -53,7 +53,7 @@ Life of a Pull Request Unless in the last few weeks of a milestone when we need to reduce churn and stabilize, we aim to be always accepting pull requests. -Either the [on call](https://github.com/kubernetes/kubernetes/wiki/Kubernetes-on-call-rotations) manually or the [github "munger"](https://github.com/kubernetes/contrib/tree/master/mungegithub) submit-queue plugin automatically will manage merging PRs. +Either the [on call](on-call-rotations.md) manually or the [github "munger"](https://github.com/kubernetes/contrib/tree/master/mungegithub) submit-queue plugin automatically will manage merging PRs. There are several requirements for the submit-queue to work: * Author must have signed CLA ("cla: yes" label added to PR) From d52855cab40a306aaeec7851cb0a5b01c5e19a02 Mon Sep 17 00:00:00 2001 From: Aaron Crickenberger Date: Fri, 29 Jan 2016 12:19:46 -0800 Subject: [PATCH 03/18] Link how-to-doc.md in devel/README.md --- docs/devel/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/devel/README.md b/docs/devel/README.md index 4a0498884dc..4128e00179e 100644 --- a/docs/devel/README.md +++ b/docs/devel/README.md @@ -75,6 +75,9 @@ Guide](../admin/README.md). * **Coding Conventions** ([coding-conventions.md](coding-conventions.md)): Coding style advice for contributors. +* **Document Conventions** ([how-to-doc.md](how-to-doc.md)) + Document style advice for contributors. + * **Running a cluster locally** ([running-locally.md](running-locally.md)): A fast and lightweight local cluster deployment for developement. From e3f4e823bae76331d0d3314e076ff9bafbf48dd3 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 31 Jan 2016 01:03:05 -0500 Subject: [PATCH 04/18] Allow the Kubelet Docker container prefix to be changed Enables running multiple Kubelets on the same instance for testing and for node bootstrapping experimentation --- pkg/kubelet/dockertools/docker.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/dockertools/docker.go b/pkg/kubelet/dockertools/docker.go index 8d499c4db70..91f6ba1ae74 100644 --- a/pkg/kubelet/dockertools/docker.go +++ b/pkg/kubelet/dockertools/docker.go @@ -81,6 +81,17 @@ type KubeletContainerName struct { ContainerName string } +// containerNamePrefix is used to identify the containers on the node managed by this +// process. +var containerNamePrefix = "k8s" + +// SetContainerNamePrefix allows the container prefix name for this process to be changed. +// This is intended to support testing and bootstrapping experimentation. It cannot be +// changed once the Kubelet starts. +func SetContainerNamePrefix(prefix string) { + containerNamePrefix = prefix +} + // DockerPuller is an abstract interface for testability. It abstracts image pull operations. type DockerPuller interface { Pull(image string, secrets []api.Secret) error @@ -209,8 +220,6 @@ func (p throttledDockerPuller) IsImagePresent(name string) (bool, error) { return p.puller.IsImagePresent(name) } -const containerNamePrefix = "k8s" - // Creates a name which can be reversed to identify both full pod name and container name. func BuildDockerName(dockerName KubeletContainerName, container *api.Container) (string, string) { containerName := dockerName.ContainerName + "." + strconv.FormatUint(kubecontainer.HashContainer(container), 16) From df1f164b34e7a63cd244c761392dbed405cea5d3 Mon Sep 17 00:00:00 2001 From: Vishnu kannan Date: Tue, 26 Jan 2016 12:29:10 -0800 Subject: [PATCH 05/18] Do not fail container creation if the contaienr exits before applyting oom score adjust. Signed-off-by: Vishnu kannan --- pkg/kubelet/dockertools/manager.go | 51 ++++++++++++++++++++---------- pkg/util/oom/oom_linux.go | 33 +++++++++++++------ pkg/util/procfs/procfs.go | 4 +++ 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/pkg/kubelet/dockertools/manager.go b/pkg/kubelet/dockertools/manager.go index 259480dbaac..5380c507467 100644 --- a/pkg/kubelet/dockertools/manager.go +++ b/pkg/kubelet/dockertools/manager.go @@ -1520,6 +1520,38 @@ func containerAndPodFromLabels(inspect *docker.Container) (pod *api.Pod, contain return } +func (dm *DockerManager) applyOOMScoreAdj(container *api.Container, containerInfo *docker.Container) error { + cgroupName, err := dm.procFs.GetFullContainerName(containerInfo.State.Pid) + if err != nil { + if err == os.ErrNotExist { + // Container exited. We cannot do anything about it. Ignore this error. + glog.V(2).Infof("Failed to apply OOM score adj on container %q with ID %q. Init process does not exist.", containerInfo.Name, containerInfo.ID) + return nil + } + return err + } + // Set OOM score of the container based on the priority of the container. + // Processes in lower-priority pods should be killed first if the system runs out of memory. + // The main pod infrastructure container is considered high priority, since if it is killed the + // whole pod will die. + // TODO: Cache this value. + var oomScoreAdj int + if containerInfo.Name == PodInfraContainerName { + oomScoreAdj = qos.PodInfraOOMAdj + } else { + oomScoreAdj = qos.GetContainerOOMScoreAdjust(container, int64(dm.machineInfo.MemoryCapacity)) + } + if err = dm.oomAdjuster.ApplyOOMScoreAdjContainer(cgroupName, oomScoreAdj, 5); err != nil { + if err == os.ErrNotExist { + // Container exited. We cannot do anything about it. Ignore this error. + glog.V(2).Infof("Failed to apply OOM score adj on container %q with ID %q. Init process does not exist.", containerInfo.Name, containerInfo.ID) + return nil + } + return err + } + return nil +} + // Run a single container from a pod. Returns the docker container ID // If do not need to pass labels, just pass nil. func (dm *DockerManager) runContainerInPod(pod *api.Pod, container *api.Container, netMode, ipcMode, pidMode string, restartCount int) (kubecontainer.ContainerID, error) { @@ -1581,24 +1613,9 @@ func (dm *DockerManager) runContainerInPod(pod *api.Pod, container *api.Containe return kubecontainer.ContainerID{}, fmt.Errorf("can't get init PID for container %q", id) } - // Set OOM score of the container based on the priority of the container. - // Processes in lower-priority pods should be killed first if the system runs out of memory. - // The main pod infrastructure container is considered high priority, since if it is killed the - // whole pod will die. - var oomScoreAdj int - if container.Name == PodInfraContainerName { - oomScoreAdj = qos.PodInfraOOMAdj - } else { - oomScoreAdj = qos.GetContainerOOMScoreAdjust(container, int64(dm.machineInfo.MemoryCapacity)) + if err := dm.applyOOMScoreAdj(container, containerInfo); err != nil { + return kubecontainer.ContainerID{}, fmt.Errorf("failed to apply oom-score-adj to container %q- %v", err, containerInfo.Name) } - cgroupName, err := dm.procFs.GetFullContainerName(containerInfo.State.Pid) - if err != nil { - return kubecontainer.ContainerID{}, fmt.Errorf("GetFullContainerName: %v", err) - } - if err = dm.oomAdjuster.ApplyOOMScoreAdjContainer(cgroupName, oomScoreAdj, 5); err != nil { - return kubecontainer.ContainerID{}, fmt.Errorf("ApplyOOMScoreAdjContainer: %v", err) - } - // The addNDotsOption call appends the ndots option to the resolv.conf file generated by docker. // This resolv.conf file is shared by all containers of the same pod, and needs to be modified only once per pod. // we modify it when the pause container is created since it is the first container created in the pod since it holds diff --git a/pkg/util/oom/oom_linux.go b/pkg/util/oom/oom_linux.go index 9a89dbde261..5503bad8c2c 100644 --- a/pkg/util/oom/oom_linux.go +++ b/pkg/util/oom/oom_linux.go @@ -21,6 +21,7 @@ package oom import ( "fmt" "io/ioutil" + "os" "path" "strconv" @@ -48,7 +49,18 @@ func getPids(cgroupName string) ([]int, error) { return fsManager.GetPids() } +func syscallNotExists(err error) bool { + if err == nil { + return false + } + if e, ok := err.(*os.SyscallError); ok && os.IsNotExist(e) { + return true + } + return false +} + // Writes 'value' to /proc//oom_score_adj. PID = 0 means self +// Returns os.ErrNotExist if the `pid` does not exist. func applyOOMScoreAdj(pid int, oomScoreAdj int) error { if pid < 0 { return fmt.Errorf("invalid PID %d specified for oom_score_adj", pid) @@ -61,20 +73,18 @@ func applyOOMScoreAdj(pid int, oomScoreAdj int) error { pidStr = strconv.Itoa(pid) } - oomScoreAdjPath := path.Join("/proc", pidStr, "oom_score_adj") maxTries := 2 + oomScoreAdjPath := path.Join("/proc", pidStr, "oom_score_adj") + value := strconv.Itoa(oomScoreAdj) var err error for i := 0; i < maxTries; i++ { - _, readErr := ioutil.ReadFile(oomScoreAdjPath) - if readErr != nil { - err = fmt.Errorf("failed to read oom_score_adj: %v", readErr) - } else if writeErr := ioutil.WriteFile(oomScoreAdjPath, []byte(strconv.Itoa(oomScoreAdj)), 0700); writeErr != nil { - err = fmt.Errorf("failed to set oom_score_adj to %d: %v", oomScoreAdj, writeErr) - } else { - return nil + if err = ioutil.WriteFile(oomScoreAdjPath, []byte(value), 0700); err != nil { + if syscallNotExists(err) { + return os.ErrNotExist + } + err = fmt.Errorf("failed to apply oom-score-adj to pid %d (%v)", err) } } - return err } @@ -86,6 +96,10 @@ func (oomAdjuster *OOMAdjuster) applyOOMScoreAdjContainer(cgroupName string, oom continueAdjusting := false pidList, err := oomAdjuster.pidLister(cgroupName) if err != nil { + if syscallNotExists(err) { + // Nothing to do since the container doesn't exist anymore. + return os.ErrNotExist + } continueAdjusting = true glog.Errorf("Error getting process list for cgroup %s: %+v", cgroupName, err) } else if len(pidList) == 0 { @@ -97,6 +111,7 @@ func (oomAdjuster *OOMAdjuster) applyOOMScoreAdjContainer(cgroupName string, oom if err = oomAdjuster.ApplyOOMScoreAdj(pid, oomScoreAdj); err == nil { adjustedProcessSet[pid] = true } + // Processes can come and go while we try to apply oom score adjust value. So ignore errors here. } } } diff --git a/pkg/util/procfs/procfs.go b/pkg/util/procfs/procfs.go index c0a45725fbf..cc432255fb2 100644 --- a/pkg/util/procfs/procfs.go +++ b/pkg/util/procfs/procfs.go @@ -19,6 +19,7 @@ package procfs import ( "fmt" "io/ioutil" + "os" "path" "strconv" "strings" @@ -48,6 +49,9 @@ func (pfs *ProcFS) GetFullContainerName(pid int) (string, error) { filePath := path.Join("/proc", strconv.Itoa(pid), "cgroup") content, err := ioutil.ReadFile(filePath) if err != nil { + if e, ok := err.(*os.SyscallError); ok && os.IsNotExist(e) { + return "", os.ErrNotExist + } return "", err } return containerNameFromProcCgroup(string(content)) From 41ba8ced6de04d8e13e58975f7ad38dcd6ceb28d Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 2 Feb 2016 15:58:06 -0800 Subject: [PATCH 06/18] Dont log errors on proxy leftover cleanup --- cmd/kube-proxy/app/server.go | 8 +++---- pkg/proxy/iptables/proxier.go | 33 ++++++++++++++++---------- pkg/proxy/userspace/proxier.go | 42 ++++++++++++++++++++++------------ pkg/util/iptables/iptables.go | 14 ++++++++++++ 4 files changed, 67 insertions(+), 30 deletions(-) diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 427aa7f33fd..4eebb611399 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -190,7 +190,7 @@ func NewProxyServerDefault(config *options.ProxyServerConfig) (*ProxyServer, err proxyMode := getProxyMode(string(config.Mode), client.Nodes(), hostname, iptInterface) if proxyMode == proxyModeIptables { - glog.V(2).Info("Using iptables Proxier.") + glog.V(0).Info("Using iptables Proxier.") proxierIptables, err := iptables.NewProxier(iptInterface, execer, config.IPTablesSyncPeriod.Duration, config.MasqueradeAll) if err != nil { glog.Fatalf("Unable to create proxier: %v", err) @@ -198,10 +198,10 @@ func NewProxyServerDefault(config *options.ProxyServerConfig) (*ProxyServer, err proxier = proxierIptables endpointsHandler = proxierIptables // No turning back. Remove artifacts that might still exist from the userspace Proxier. - glog.V(2).Info("Tearing down userspace rules. Errors here are acceptable.") + glog.V(0).Info("Tearing down userspace rules.") userspace.CleanupLeftovers(iptInterface) } else { - glog.V(2).Info("Using userspace Proxier.") + glog.V(0).Info("Using userspace Proxier.") // This is a proxy.LoadBalancer which NewProxier needs but has methods we don't need for // our config.EndpointsConfigHandler. loadBalancer := userspace.NewLoadBalancerRR() @@ -221,7 +221,7 @@ func NewProxyServerDefault(config *options.ProxyServerConfig) (*ProxyServer, err } proxier = proxierUserspace // Remove artifacts from the pure-iptables Proxier. - glog.V(2).Info("Tearing down pure-iptables proxy rules. Errors here are acceptable.") + glog.V(0).Info("Tearing down pure-iptables proxy rules.") iptables.CleanupLeftovers(iptInterface) } iptInterface.AddReloadFunc(proxier.Sync) diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index ee0603520d9..71463d2ac69 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -115,8 +115,7 @@ type serviceInfo struct { loadBalancerStatus api.LoadBalancerStatus sessionAffinityType api.ServiceAffinity stickyMaxAgeSeconds int - // Deprecated, but required for back-compat (including e2e) - externalIPs []string + externalIPs []string } // returns a new serviceInfo struct @@ -196,18 +195,24 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { //TODO: actually tear down all rules and chains. args := []string{"-m", "comment", "--comment", "kubernetes service portals", "-j", string(iptablesServicesChain)} if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainOutput, args...); err != nil { - glog.Errorf("Error removing pure-iptables proxy rule: %v", err) - encounteredError = true + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing pure-iptables proxy rule: %v", err) + encounteredError = true + } } if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPrerouting, args...); err != nil { - glog.Errorf("Error removing pure-iptables proxy rule: %v", err) - encounteredError = true + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing pure-iptables proxy rule: %v", err) + encounteredError = true + } } args = []string{"-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", "-m", "mark", "--mark", iptablesMasqueradeMark, "-j", "MASQUERADE"} if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { - glog.Errorf("Error removing pure-iptables proxy rule: %v", err) - encounteredError = true + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing pure-iptables proxy rule: %v", err) + encounteredError = true + } } // flush and delete chains. @@ -215,12 +220,16 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { for _, c := range chains { // flush chain, then if sucessful delete, delete will fail if flush fails. if err := ipt.FlushChain(utiliptables.TableNAT, c); err != nil { - glog.Errorf("Error flushing pure-iptables proxy chain: %v", err) - encounteredError = true + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error flushing pure-iptables proxy chain: %v", err) + encounteredError = true + } } else { if err = ipt.DeleteChain(utiliptables.TableNAT, c); err != nil { - glog.Errorf("Error deleting pure-iptables proxy chain: %v", err) - encounteredError = true + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error deleting pure-iptables proxy chain: %v", err) + encounteredError = true + } } } } diff --git a/pkg/proxy/userspace/proxier.go b/pkg/proxy/userspace/proxier.go index 35a6b7585b2..76ba794811d 100644 --- a/pkg/proxy/userspace/proxier.go +++ b/pkg/proxy/userspace/proxier.go @@ -196,27 +196,37 @@ func CleanupLeftovers(ipt iptables.Interface) (encounteredError bool) { // Delete Rules first, then Flush and Delete Chains args := []string{"-m", "comment", "--comment", "handle ClusterIPs; NOTE: this must be before the NodePort rules"} if err := ipt.DeleteRule(iptables.TableNAT, iptables.ChainOutput, append(args, "-j", string(iptablesHostPortalChain))...); err != nil { - glog.Errorf("Error removing userspace rule: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error removing userspace rule: %v", err) + encounteredError = true + } } if err := ipt.DeleteRule(iptables.TableNAT, iptables.ChainPrerouting, append(args, "-j", string(iptablesContainerPortalChain))...); err != nil { - glog.Errorf("Error removing userspace rule: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error removing userspace rule: %v", err) + encounteredError = true + } } args = []string{"-m", "addrtype", "--dst-type", "LOCAL"} args = append(args, "-m", "comment", "--comment", "handle service NodePorts; NOTE: this must be the last rule in the chain") if err := ipt.DeleteRule(iptables.TableNAT, iptables.ChainOutput, append(args, "-j", string(iptablesHostNodePortChain))...); err != nil { - glog.Errorf("Error removing userspace rule: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error removing userspace rule: %v", err) + encounteredError = true + } } if err := ipt.DeleteRule(iptables.TableNAT, iptables.ChainPrerouting, append(args, "-j", string(iptablesContainerNodePortChain))...); err != nil { - glog.Errorf("Error removing userspace rule: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error removing userspace rule: %v", err) + encounteredError = true + } } args = []string{"-m", "comment", "--comment", "Ensure that non-local NodePort traffic can flow"} if err := ipt.DeleteRule(iptables.TableFilter, iptables.ChainInput, append(args, "-j", string(iptablesNonLocalNodePortChain))...); err != nil { - glog.Errorf("Error removing userspace rule: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error removing userspace rule: %v", err) + encounteredError = true + } } // flush and delete chains. @@ -228,12 +238,16 @@ func CleanupLeftovers(ipt iptables.Interface) (encounteredError bool) { for _, c := range chains { // flush chain, then if successful delete, delete will fail if flush fails. if err := ipt.FlushChain(table, c); err != nil { - glog.Errorf("Error flushing userspace chain: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error flushing userspace chain: %v", err) + encounteredError = true + } } else { if err = ipt.DeleteChain(table, c); err != nil { - glog.Errorf("Error deleting userspace chain: %v", err) - encounteredError = true + if !iptables.IsNotFoundError(err) { + glog.Errorf("Error deleting userspace chain: %v", err) + encounteredError = true + } } } } diff --git a/pkg/util/iptables/iptables.go b/pkg/util/iptables/iptables.go index 4329dcc3f5d..1a0f181e946 100644 --- a/pkg/util/iptables/iptables.go +++ b/pkg/util/iptables/iptables.go @@ -576,3 +576,17 @@ func (runner *runner) reload() { f() } } + +// IsNotFoundError returns true if the error indicates "not found". It parses +// the error string looking for known values, which is imperfect but works in +// practice. +func IsNotFoundError(err error) bool { + es := err.Error() + if strings.Contains(es, "No such file or directory") { + return true + } + if strings.Contains(es, "No chain/target/match by that name") { + return true + } + return false +} From 107c5f7813916060e3b8d09f442f1525a04f074d Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 2 Feb 2016 17:34:48 -0800 Subject: [PATCH 07/18] Put all masquerade mark logic into new chains This allows us to use the MARK-MASQ chain as a subroutine, rather than encoding the mark in many places. Having a KUBE-POSTROUTING chain means we can flush and rebuild it atomically. This makes followon work to change the mark significantly easier. --- pkg/proxy/iptables/proxier.go | 247 +++++++++++++++++++++------------- 1 file changed, 156 insertions(+), 91 deletions(-) diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 71463d2ac69..ae8c7842f4d 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -54,10 +54,16 @@ import ( const iptablesMinVersion = utiliptables.MinCheckVersion // the services chain -const iptablesServicesChain utiliptables.Chain = "KUBE-SERVICES" +const kubeServicesChain utiliptables.Chain = "KUBE-SERVICES" // the nodeports chain -const iptablesNodePortsChain utiliptables.Chain = "KUBE-NODEPORTS" +const kubeNodePortsChain utiliptables.Chain = "KUBE-NODEPORTS" + +// the kubernetes postrouting chain +const kubePostroutingChain utiliptables.Chain = "KUBE-POSTROUTING" + +// the mark-for-masquerade chain +const kubeMarkMasqChain utiliptables.Chain = "KUBE-MARK-MASQ" // the mark we apply to traffic needing SNAT const iptablesMasqueradeMark = "0x4d415351" @@ -193,7 +199,10 @@ func NewProxier(ipt utiliptables.Interface, exec utilexec.Interface, syncPeriod // It returns true if an error was encountered. Errors are logged. func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { //TODO: actually tear down all rules and chains. - args := []string{"-m", "comment", "--comment", "kubernetes service portals", "-j", string(iptablesServicesChain)} + args := []string{ + "-m", "comment", "--comment", "kubernetes service portals", + "-j", string(kubeServicesChain), + } if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainOutput, args...); err != nil { if !utiliptables.IsNotFoundError(err) { glog.Errorf("Error removing pure-iptables proxy rule: %v", err) @@ -207,7 +216,10 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { } } - args = []string{"-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", "-m", "mark", "--mark", iptablesMasqueradeMark, "-j", "MASQUERADE"} + args = []string{ + "-m", "comment", "--comment", "kubernetes postrouting rules", + "-j", string(kubePostroutingChain), + } if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { if !utiliptables.IsNotFoundError(err) { glog.Errorf("Error removing pure-iptables proxy rule: %v", err) @@ -216,7 +228,7 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { } // flush and delete chains. - chains := []utiliptables.Chain{iptablesServicesChain, iptablesNodePortsChain} + chains := []utiliptables.Chain{kubeServicesChain, kubeNodePortsChain, kubePostroutingChain, kubeMarkMasqChain} for _, c := range chains { // flush chain, then if sucessful delete, delete will fail if flush fails. if err := ipt.FlushChain(utiliptables.TableNAT, c); err != nil { @@ -233,6 +245,21 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { } } } + + // Clean up the older SNAT rule which was directly in POSTROUTING. + // TODO(thockin): Remove this for v1.3 or v1.4. + args = []string{ + "-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", + "-m", "mark", "--mark", iptablesMasqueradeMark, + "-j", "MASQUERADE", + } + if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing old-style SNAT rule: %v", err) + encounteredError = true + } + } + return encounteredError } @@ -479,37 +506,45 @@ func (proxier *Proxier) syncProxyRules() { } glog.V(3).Infof("Syncing iptables rules") - // Ensure main chains and rules are installed. - tablesNeedServicesChain := []utiliptables.Table{utiliptables.TableFilter, utiliptables.TableNAT} - for _, table := range tablesNeedServicesChain { - if _, err := proxier.iptables.EnsureChain(table, iptablesServicesChain); err != nil { - glog.Errorf("Failed to ensure that %s chain %s exists: %v", table, iptablesServicesChain, err) - return - } - } - // Link the services chain. - tableChainsNeedJumpServices := []struct { - table utiliptables.Table - chain utiliptables.Chain - }{ - {utiliptables.TableFilter, utiliptables.ChainOutput}, - {utiliptables.TableNAT, utiliptables.ChainOutput}, - {utiliptables.TableNAT, utiliptables.ChainPrerouting}, - } - comment := "kubernetes service portals" - args := []string{"-m", "comment", "--comment", comment, "-j", string(iptablesServicesChain)} - for _, tc := range tableChainsNeedJumpServices { - if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, tc.table, tc.chain, args...); err != nil { - glog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", tc.table, tc.chain, iptablesServicesChain, err) - return - } - } - // Link the output rules. + // Create and link the kube services chain. { - comment := "kubernetes service traffic requiring SNAT" - args := []string{"-m", "comment", "--comment", comment, "-m", "mark", "--mark", iptablesMasqueradeMark, "-j", "MASQUERADE"} - if _, err := proxier.iptables.EnsureRule(utiliptables.Append, utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { - glog.Errorf("Failed to ensure that chain %s obeys MASQUERADE mark: %v", utiliptables.ChainPostrouting, err) + tablesNeedServicesChain := []utiliptables.Table{utiliptables.TableFilter, utiliptables.TableNAT} + for _, table := range tablesNeedServicesChain { + if _, err := proxier.iptables.EnsureChain(table, kubeServicesChain); err != nil { + glog.Errorf("Failed to ensure that %s chain %s exists: %v", table, kubeServicesChain, err) + return + } + } + + tableChainsNeedJumpServices := []struct { + table utiliptables.Table + chain utiliptables.Chain + }{ + {utiliptables.TableFilter, utiliptables.ChainOutput}, + {utiliptables.TableNAT, utiliptables.ChainOutput}, + {utiliptables.TableNAT, utiliptables.ChainPrerouting}, + } + comment := "kubernetes service portals" + args := []string{"-m", "comment", "--comment", comment, "-j", string(kubeServicesChain)} + for _, tc := range tableChainsNeedJumpServices { + if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, tc.table, tc.chain, args...); err != nil { + glog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", tc.table, tc.chain, kubeServicesChain, err) + return + } + } + } + + // Create and link the kube postrouting chain. + { + if _, err := proxier.iptables.EnsureChain(utiliptables.TableNAT, kubePostroutingChain); err != nil { + glog.Errorf("Failed to ensure that %s chain %s exists: %v", utiliptables.TableNAT, kubePostroutingChain, err) + return + } + + comment := "kubernetes postrouting rules" + args := []string{"-m", "comment", "--comment", comment, "-j", string(kubePostroutingChain)} + if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { + glog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", utiliptables.TableNAT, utiliptables.ChainPostrouting, kubeServicesChain, err) return } } @@ -542,24 +577,52 @@ func (proxier *Proxier) syncProxyRules() { writeLine(natChains, "*nat") // Make sure we keep stats for the top-level chains, if they existed - // (which they should have because we created them above). - if chain, ok := existingFilterChains[iptablesServicesChain]; ok { + // (which most should have because we created them above). + if chain, ok := existingFilterChains[kubeServicesChain]; ok { writeLine(filterChains, chain) } else { - writeLine(filterChains, makeChainLine(iptablesServicesChain)) + writeLine(filterChains, makeChainLine(kubeServicesChain)) } - if chain, ok := existingNATChains[iptablesServicesChain]; ok { + if chain, ok := existingNATChains[kubeServicesChain]; ok { writeLine(natChains, chain) } else { - writeLine(natChains, makeChainLine(iptablesServicesChain)) + writeLine(natChains, makeChainLine(kubeServicesChain)) } - if chain, ok := existingNATChains[iptablesNodePortsChain]; ok { + if chain, ok := existingNATChains[kubeNodePortsChain]; ok { writeLine(natChains, chain) } else { - writeLine(natChains, makeChainLine(iptablesNodePortsChain)) + writeLine(natChains, makeChainLine(kubeNodePortsChain)) + } + if chain, ok := existingNATChains[kubePostroutingChain]; ok { + writeLine(natChains, chain) + } else { + writeLine(natChains, makeChainLine(kubePostroutingChain)) + } + if chain, ok := existingNATChains[kubeMarkMasqChain]; ok { + writeLine(natChains, chain) + } else { + writeLine(natChains, makeChainLine(kubeMarkMasqChain)) } - // Accumulate nat chains to keep. + // Install the kubernetes-specific postrouting rules. We use a whole chain for + // this so that it is easier to flush and change, for example if the mark + // value should ever change. + writeLine(natRules, []string{ + "-A", string(kubePostroutingChain), + "-m", "comment", "--comment", `"kubernetes service traffic requiring SNAT"`, + "-m", "mark", "--mark", iptablesMasqueradeMark, + "-j", "MASQUERADE", + }...) + + // Install the kubernetes-specific masquerade mark rule. We use a whole chain for + // this so that it is easier to flush and change, for example if the mark + // value should ever change. + writeLine(natRules, []string{ + "-A", string(kubeMarkMasqChain), + "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark), + }...) + + // Accumulate NAT chains to keep. activeNATChains := map[utiliptables.Chain]bool{} // use a map as a set // Accumulate new local ports that we have opened. @@ -580,18 +643,16 @@ func (proxier *Proxier) syncProxyRules() { // Capture the clusterIP. args := []string{ - "-A", string(iptablesServicesChain), - "-m", "comment", "--comment", fmt.Sprintf("\"%s cluster IP\"", svcName.String()), + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", fmt.Sprintf(`"%s cluster IP"`, svcName.String()), "-m", protocol, "-p", protocol, "-d", fmt.Sprintf("%s/32", svcInfo.clusterIP.String()), "--dport", fmt.Sprintf("%d", svcInfo.port), } if proxier.masqueradeAll { - writeLine(natRules, append(args, - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark))...) + writeLine(natRules, append(args, "-j", string(kubeMarkMasqChain))...) } - writeLine(natRules, append(args, - "-j", string(svcChain))...) + writeLine(natRules, append(args, "-j", string(svcChain))...) // Capture externalIPs. for _, externalIP := range svcInfo.externalIPs { @@ -619,15 +680,14 @@ func (proxier *Proxier) syncProxyRules() { } } // We're holding the port, so it's OK to install iptables rules. args := []string{ - "-A", string(iptablesServicesChain), - "-m", "comment", "--comment", fmt.Sprintf("\"%s external IP\"", svcName.String()), + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", fmt.Sprintf(`"%s external IP"`, svcName.String()), "-m", protocol, "-p", protocol, "-d", fmt.Sprintf("%s/32", externalIP), "--dport", fmt.Sprintf("%d", svcInfo.port), } // We have to SNAT packets to external IPs. - writeLine(natRules, append(args, - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark))...) + writeLine(natRules, append(args, "-j", string(kubeMarkMasqChain))...) // Allow traffic for external IPs that does not come from a bridge (i.e. not from a container) // nor from a local process to be forwarded to the service. @@ -636,30 +696,26 @@ func (proxier *Proxier) syncProxyRules() { externalTrafficOnlyArgs := append(args, "-m", "physdev", "!", "--physdev-is-in", "-m", "addrtype", "!", "--src-type", "LOCAL") - writeLine(natRules, append(externalTrafficOnlyArgs, - "-j", string(svcChain))...) + writeLine(natRules, append(externalTrafficOnlyArgs, "-j", string(svcChain))...) dstLocalOnlyArgs := append(args, "-m", "addrtype", "--dst-type", "LOCAL") // Allow traffic bound for external IPs that happen to be recognized as local IPs to stay local. // This covers cases like GCE load-balancers which get added to the local routing table. - writeLine(natRules, append(dstLocalOnlyArgs, - "-j", string(svcChain))...) + writeLine(natRules, append(dstLocalOnlyArgs, "-j", string(svcChain))...) } // Capture load-balancer ingress. for _, ingress := range svcInfo.loadBalancerStatus.Ingress { if ingress.IP != "" { args := []string{ - "-A", string(iptablesServicesChain), - "-m", "comment", "--comment", fmt.Sprintf("\"%s loadbalancer IP\"", svcName.String()), + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", fmt.Sprintf(`"%s loadbalancer IP"`, svcName.String()), "-m", protocol, "-p", protocol, "-d", fmt.Sprintf("%s/32", ingress.IP), "--dport", fmt.Sprintf("%d", svcInfo.port), } // We have to SNAT packets from external IPs. - writeLine(natRules, append(args, - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark))...) - writeLine(natRules, append(args, - "-j", string(svcChain))...) + writeLine(natRules, append(args, "-j", string(kubeMarkMasqChain))...) + writeLine(natRules, append(args, "-j", string(svcChain))...) } } @@ -685,27 +741,24 @@ func (proxier *Proxier) syncProxyRules() { } newLocalPorts[lp] = socket } // We're holding the port, so it's OK to install iptables rules. + + args := []string{ + "-A", string(kubeNodePortsChain), + "-m", "comment", "--comment", svcName.String(), + "-m", protocol, "-p", protocol, + "--dport", fmt.Sprintf("%d", svcInfo.nodePort), + } // Nodeports need SNAT. - writeLine(natRules, - "-A", string(iptablesNodePortsChain), - "-m", "comment", "--comment", svcName.String(), - "-m", protocol, "-p", protocol, - "--dport", fmt.Sprintf("%d", svcInfo.nodePort), - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark)) + writeLine(natRules, append(args, "-j", string(kubeMarkMasqChain))...) // Jump to the service chain. - writeLine(natRules, - "-A", string(iptablesNodePortsChain), - "-m", "comment", "--comment", svcName.String(), - "-m", protocol, "-p", protocol, - "--dport", fmt.Sprintf("%d", svcInfo.nodePort), - "-j", string(svcChain)) + writeLine(natRules, append(args, "-j", string(svcChain))...) } // If the service has no endpoints then reject packets. if len(proxier.endpointsMap[svcName]) == 0 { writeLine(filterRules, - "-A", string(iptablesServicesChain), - "-m", "comment", "--comment", fmt.Sprintf("\"%s has no endpoints\"", svcName.String()), + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcName.String()), "-m", protocol, "-p", protocol, "-d", fmt.Sprintf("%s/32", svcInfo.clusterIP.String()), "--dport", fmt.Sprintf("%d", svcInfo.port), @@ -775,16 +828,14 @@ func (proxier *Proxier) syncProxyRules() { // TODO: if we grow logic to get this node's pod CIDR, we can use it. writeLine(natRules, append(args, "-s", fmt.Sprintf("%s/32", strings.Split(endpoints[i], ":")[0]), - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark))...) + "-j", string(kubeMarkMasqChain))...) // Update client-affinity lists. if svcInfo.sessionAffinityType == api.ServiceAffinityClientIP { args = append(args, "-m", "recent", "--name", string(endpointChain), "--set") } // DNAT to final destination. - args = append(args, - "-m", protocol, "-p", protocol, - "-j", "DNAT", "--to-destination", endpoints[i]) + args = append(args, "-m", protocol, "-p", protocol, "-j", "DNAT", "--to-destination", endpoints[i]) writeLine(natRules, args...) } } @@ -808,10 +859,10 @@ func (proxier *Proxier) syncProxyRules() { // Finally, tail-call to the nodeports chain. This needs to be after all // other service portal rules. writeLine(natRules, - "-A", string(iptablesServicesChain), - "-m", "comment", "--comment", "\"kubernetes service nodeports; NOTE: this must be the last rule in this chain\"", + "-A", string(kubeServicesChain), + "-m", "comment", "--comment", `"kubernetes service nodeports; NOTE: this must be the last rule in this chain"`, "-m", "addrtype", "--dst-type", "LOCAL", - "-j", string(iptablesNodePortsChain)) + "-j", string(kubeNodePortsChain)) // Write the end-of-table markers. writeLine(filterRules, "COMMIT") @@ -832,14 +883,28 @@ func (proxier *Proxier) syncProxyRules() { glog.Errorf("Closing local port %s", k.String()) v.Close() } - } else { - // Close old local ports and save new ones. - for k, v := range proxier.portsMap { - if newLocalPorts[k] == nil { - v.Close() - } + return + } + + // Close old local ports and save new ones. + for k, v := range proxier.portsMap { + if newLocalPorts[k] == nil { + v.Close() + } + } + proxier.portsMap = newLocalPorts + + // Clean up the older SNAT rule which was directly in POSTROUTING. + // TODO(thockin): Remove this for v1.3 or v1.4. + args := []string{ + "-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", + "-m", "mark", "--mark", iptablesMasqueradeMark, + "-j", "MASQUERADE", + } + if err := proxier.iptables.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing old-style SNAT rule: %v", err) } - proxier.portsMap = newLocalPorts } } From 1e7db4a1747c050c637ac58dfad13f768f437767 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 2 Feb 2016 21:10:00 -0800 Subject: [PATCH 08/18] Implement proper cleanup in iptables proxy --- pkg/proxy/iptables/proxier.go | 89 ++++++++++++++++++++++++----------- pkg/util/iptables/iptables.go | 3 ++ 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index ae8c7842f4d..8d6e215e52b 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -198,24 +198,29 @@ func NewProxier(ipt utiliptables.Interface, exec utilexec.Interface, syncPeriod // CleanupLeftovers removes all iptables rules and chains created by the Proxier // It returns true if an error was encountered. Errors are logged. func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { - //TODO: actually tear down all rules and chains. + // Unlink the services chain. args := []string{ "-m", "comment", "--comment", "kubernetes service portals", "-j", string(kubeServicesChain), } - if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainOutput, args...); err != nil { - if !utiliptables.IsNotFoundError(err) { - glog.Errorf("Error removing pure-iptables proxy rule: %v", err) - encounteredError = true - } + tableChainsWithJumpServices := []struct { + table utiliptables.Table + chain utiliptables.Chain + }{ + {utiliptables.TableFilter, utiliptables.ChainOutput}, + {utiliptables.TableNAT, utiliptables.ChainOutput}, + {utiliptables.TableNAT, utiliptables.ChainPrerouting}, } - if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPrerouting, args...); err != nil { - if !utiliptables.IsNotFoundError(err) { - glog.Errorf("Error removing pure-iptables proxy rule: %v", err) - encounteredError = true + for _, tc := range tableChainsWithJumpServices { + if err := ipt.DeleteRule(tc.table, tc.chain, args...); err != nil { + if !utiliptables.IsNotFoundError(err) { + glog.Errorf("Error removing pure-iptables proxy rule: %v", err) + encounteredError = true + } } } + // Unlink the postrouting chain. args = []string{ "-m", "comment", "--comment", "kubernetes postrouting rules", "-j", string(kubePostroutingChain), @@ -227,23 +232,51 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { } } - // flush and delete chains. - chains := []utiliptables.Chain{kubeServicesChain, kubeNodePortsChain, kubePostroutingChain, kubeMarkMasqChain} - for _, c := range chains { - // flush chain, then if sucessful delete, delete will fail if flush fails. - if err := ipt.FlushChain(utiliptables.TableNAT, c); err != nil { - if !utiliptables.IsNotFoundError(err) { - glog.Errorf("Error flushing pure-iptables proxy chain: %v", err) - encounteredError = true + // Flush and remove all of our chains. + if iptablesSaveRaw, err := ipt.Save(utiliptables.TableNAT); err != nil { + glog.Errorf("Failed to execute iptables-save for %s: %v", utiliptables.TableNAT, err) + encounteredError = true + } else { + existingNATChains := getChainLines(utiliptables.TableNAT, iptablesSaveRaw) + natChains := bytes.NewBuffer(nil) + natRules := bytes.NewBuffer(nil) + writeLine(natChains, "*nat") + // Start with chains we know we need to remove. + for _, chain := range []utiliptables.Chain{kubeServicesChain, kubeNodePortsChain, kubePostroutingChain, kubeMarkMasqChain} { + if _, found := existingNATChains[chain]; found { + chainString := string(chain) + writeLine(natChains, existingNATChains[chain]) // flush + writeLine(natRules, "-X", chainString) // delete } - } else { - if err = ipt.DeleteChain(utiliptables.TableNAT, c); err != nil { - if !utiliptables.IsNotFoundError(err) { - glog.Errorf("Error deleting pure-iptables proxy chain: %v", err) - encounteredError = true - } + } + // Hunt for service and endpoint chains. + for chain := range existingNATChains { + chainString := string(chain) + if strings.HasPrefix(chainString, "KUBE-SVC-") || strings.HasPrefix(chainString, "KUBE-SEP-") { + writeLine(natChains, existingNATChains[chain]) // flush + writeLine(natRules, "-X", chainString) // delete } } + writeLine(natRules, "COMMIT") + natLines := append(natChains.Bytes(), natRules.Bytes()...) + // Write it. + err = ipt.Restore(utiliptables.TableNAT, natLines, utiliptables.NoFlushTables, utiliptables.RestoreCounters) + if err != nil { + glog.Errorf("Failed to execute iptables-restore for %s: %v", utiliptables.TableNAT, err) + encounteredError = true + } + } + { + filterBuf := bytes.NewBuffer(nil) + writeLine(filterBuf, "*filter") + writeLine(filterBuf, fmt.Sprintf(":%s - [0:0]", kubeServicesChain)) + writeLine(filterBuf, fmt.Sprintf("-X %s", kubeServicesChain)) + writeLine(filterBuf, "COMMIT") + // Write it. + if err := ipt.Restore(utiliptables.TableFilter, filterBuf.Bytes(), utiliptables.NoFlushTables, utiliptables.RestoreCounters); err != nil { + glog.Errorf("Failed to execute iptables-restore for %s: %v", utiliptables.TableFilter, err) + encounteredError = true + } } // Clean up the older SNAT rule which was directly in POSTROUTING. @@ -554,7 +587,7 @@ func (proxier *Proxier) syncProxyRules() { existingFilterChains := make(map[utiliptables.Chain]string) iptablesSaveRaw, err := proxier.iptables.Save(utiliptables.TableFilter) if err != nil { // if we failed to get any rules - glog.Errorf("Failed to execute iptables-save, syncing all rules. %s", err.Error()) + glog.Errorf("Failed to execute iptables-save, syncing all rules: %v", err) } else { // otherwise parse the output existingFilterChains = getChainLines(utiliptables.TableFilter, iptablesSaveRaw) } @@ -562,7 +595,7 @@ func (proxier *Proxier) syncProxyRules() { existingNATChains := make(map[utiliptables.Chain]string) iptablesSaveRaw, err = proxier.iptables.Save(utiliptables.TableNAT) if err != nil { // if we failed to get any rules - glog.Errorf("Failed to execute iptables-save, syncing all rules. %s", err.Error()) + glog.Errorf("Failed to execute iptables-save, syncing all rules: %v", err) } else { // otherwise parse the output existingNATChains = getChainLines(utiliptables.TableNAT, iptablesSaveRaw) } @@ -874,10 +907,10 @@ func (proxier *Proxier) syncProxyRules() { natLines := append(natChains.Bytes(), natRules.Bytes()...) lines := append(filterLines, natLines...) - glog.V(3).Infof("Syncing iptables rules: %s", lines) + glog.V(3).Infof("Restoring iptables rules: %s", lines) err = proxier.iptables.RestoreAll(lines, utiliptables.NoFlushTables, utiliptables.RestoreCounters) if err != nil { - glog.Errorf("Failed to sync iptables rules: %v", err) + glog.Errorf("Failed to execute iptables-restore: %v", err) // Revert new local ports. for k, v := range newLocalPorts { glog.Errorf("Closing local port %s", k.String()) diff --git a/pkg/util/iptables/iptables.go b/pkg/util/iptables/iptables.go index 1a0f181e946..801cc8bf726 100644 --- a/pkg/util/iptables/iptables.go +++ b/pkg/util/iptables/iptables.go @@ -296,6 +296,7 @@ func (runner *runner) Save(table Table) ([]byte, error) { // run and return args := []string{"-t", string(table)} + glog.V(4).Infof("running iptables-save %v", args) return runner.exec.Command(cmdIptablesSave, args...).CombinedOutput() } @@ -305,6 +306,7 @@ func (runner *runner) SaveAll() ([]byte, error) { defer runner.mu.Unlock() // run and return + glog.V(4).Infof("running iptables-save") return runner.exec.Command(cmdIptablesSave, []string{}...).CombinedOutput() } @@ -354,6 +356,7 @@ func (runner *runner) restoreInternal(args []string, data []byte, flush FlushFla return err } // run the command and return the output or an error including the output and error + glog.V(4).Infof("running iptables-restore %v", args) b, err := runner.exec.Command(cmdIptablesRestore, args...).CombinedOutput() if err != nil { return fmt.Errorf("%v (%s)", err, b) From 72e3193578452cd098924d139f51a067ae7e8af2 Mon Sep 17 00:00:00 2001 From: Paul Morie Date: Sun, 7 Feb 2016 15:37:34 -0500 Subject: [PATCH 09/18] Streamline secret docs and add env var doc --- docs/user-guide/secrets.md | 142 +++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 53 deletions(-) diff --git a/docs/user-guide/secrets.md b/docs/user-guide/secrets.md index e26421a0de3..2c6dd21079d 100644 --- a/docs/user-guide/secrets.md +++ b/docs/user-guide/secrets.md @@ -47,19 +47,20 @@ a docker image. See [Secrets design document](../design/secrets.md) for more inf - [Built-in Secrets](#built-in-secrets) - [Service Accounts Automatically Create and Attach Secrets with API Credentials](#service-accounts-automatically-create-and-attach-secrets-with-api-credentials) - [Creating your own Secrets](#creating-your-own-secrets) - - [Creating a Secret Using kubectl secret](#creating-a-secret-using-kubectl-secret) + - [Creating a Secret Using kubectl create secret](#creating-a-secret-using-kubectl-create-secret) - [Creating a Secret Manually](#creating-a-secret-manually) - [Decoding a Secret](#decoding-a-secret) - - [Manually specifying a Secret to be Mounted on a Pod](#manually-specifying-a-secret-to-be-mounted-on-a-pod) - [Using Secrets](#using-secrets) + - [Using Secrets as Files from a Pod](#using-secrets-as-files-from-a-pod) + - [Consuming Secret Values from Volumes](#consuming-secret-values-from-volumes) + - [Using Secrets as Environment Variables](#using-secrets-as-environment-variables) + - [Consuming Secret Values from Environment Variables](#consuming-secret-values-from-environment-variables) - [Using imagePullSecrets](#using-imagepullsecrets) - [Manually specifying an imagePullSecret](#manually-specifying-an-imagepullsecret) - [Arranging for imagePullSecrets to be Automatically Attached](#arranging-for-imagepullsecrets-to-be-automatically-attached) - - [Using Secrets as Files from a Pod](#using-secrets-as-files-from-a-pod) - [Automatic Mounting of Manually Created Secrets](#automatic-mounting-of-manually-created-secrets) - [Details](#details) - [Restrictions](#restrictions) - - [Consuming Secret Values](#consuming-secret-values) - [Secret and Pod Lifetime interaction](#secret-and-pod-lifetime-interaction) - [Use cases](#use-cases) - [Use-Case: Pod with ssh keys](#use-case-pod-with-ssh-keys) @@ -82,8 +83,8 @@ more control over how it is used, and reduces the risk of accidental exposure. Users can create secrets, and the system also creates some secrets. To use a secret, a pod needs to reference the secret. -A secret can be used with a pod in two ways: either as files in a [volume](volumes.md) mounted on one or more of -its containers, or used by kubelet when pulling images for the pod. +A secret can be used with a pod in two ways: as files in a [volume](volumes.md) mounted on one or more of +its containers, in environment variables, or used by kubelet when pulling images for the pod. ### Built-in Secrets @@ -102,7 +103,7 @@ information on how Service Accounts work. ### Creating your own Secrets -#### Creating a Secret Using kubectl secret +#### Creating a Secret Using kubectl create secret Say that some pods need to access a database. The username and password that the pods should use is in the files @@ -219,9 +220,22 @@ $ echo "MWYyZDFlMmU2N2RmCg==" | base64 -D 1f2d1e2e67df ``` -### Manually specifying a Secret to be Mounted on a Pod +### Using Secrets -Once the secret is created, you can create a pod that consumes that secret. +Secrets can be mounted as data volumes or be exposed as environment variables to +be used by a container in a pod. They can also be used by other parts of the +system, without being directly exposed to the pod. For example, they can hold +credentials that other parts of the system should use to interact with external +systems on your behalf. + +#### Using Secrets as Files from a Pod + +To consume a Secret in a volume in a Pod: + +1. Create a secret or use an existing one. Multiple pods can reference the same secret. +1. Modify your Pod definition to add a volume under `spec.volumes[]`. Name the volume anything, and have a `spec.volumes[].secret.secretName` field equal to the name of the secret object. +1. Add a `spec.containers[].volumeMounts[]` to each container that needs the secret. Specify `spec.containers[].volumeMounts[].readOnly = true` and `spec.containers[].volumeMounts[].mountPath` to an unused directory name where you would like the secrets to appear. +1. Modify your image and/or command line so that the the program looks for files in that directory. Each key in the secret `data` map becomes the filename under `mountPath`. This is an example of a pod that mounts a secret in a volume: @@ -253,22 +267,80 @@ This is an example of a pod that mounts a secret in a volume: } ``` -Each secret you want to use needs its own `spec.volumes`. +Each secret you want to use needs to be referred to in `spec.volumes`. If there are multiple containers in the pod, then each container needs its own `volumeMounts` block, but only one `spec.volumes` is needed per secret. -You can package many files into one secret, or use many secrets, -whichever is convenient. +You can package many files into one secret, or use many secrets, whichever is convenient. See another example of creating a secret and a pod that consumes that secret in a volume [here](secrets/). -### Using Secrets +##### Consuming Secret Values from Volumes -Secrets can be mounted as data volumes to be used by a container in a pod. -They can also be used by other parts of the system, without being directly -exposed to the pod. For example, they can hold credentials that other -parts of the system should use to interact with external systems on your behalf. +Inside the container that mounts a secret volume, the secret keys appear as +files and the secret values are base-64 decoded and stored inside these files. +This is the result of commands +executed inside the container from the example above: + +```console +$ ls /etc/foo/ +username +password +$ cat /etc/foo/username +admin +$ cat /etc/foo/password +1f2d1e2e67df +``` + +The program in a container is responsible for reading the secret(s) from the +files. + +#### Using Secrets as Environment Variables + +To use a secret in an environment variable in a pod: + +1. Create a secret or use an existing one. Multiple pods can reference the same secret. +1. Modify your Pod definition in each container that you wish to consume the value of a secret key to add an environment variable for each secret key you wish to consume. The environment variable that consumes the secret key should populate the secret's name and key in `env[x].valueFrom.secretKeyRef`. +1. Modify your image and/or command line so that the the program looks for values in the specified environment variabless + +This is an example of a pod that mounts a secret in a volume: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: secret-env-pod +spec: + containers: + - name: mycontainer + image: redis + env: + - name: SECRET_USERNAME + valueFrom: + secretKeyRef: + name: mysecret + key: username + - name: SECRET_PASSWORD + valueFrom: + secretKeyRef: + name: mysecret + key: password + restartPolicy: Never +``` + +##### Consuming Secret Values from Environment Variables + +Inside a container that consumes a secret in an environment variables, the secret keys appear as +normal environment variables containing the base-64 decoded values of the secret data. +This is the result of commands executed inside the container from the example above: + +```console +$ echo $SECRET_USERNAME +admin +$ cat /etc/foo/password +1f2d1e2e67df +``` #### Using imagePullSecrets @@ -288,17 +360,6 @@ field set to that of the service account. See [here](service-accounts.md#adding-imagepullsecrets-to-a-service-account) for a detailed explanation of that process. -#### Using Secrets as Files from a Pod - -To use a secret from a Pod: - -1. Create a secret or use an existing one. Multiple pods can reference the same secret. -1. Modify your Pod definition to add a volume under `spec.volumes[]`. Name the volume anything, and have a `spec.volumes[].secret.secretName` field equal to the name of the secret object. -1. Add a `spec.containers[].volumeMounts[]` to each container that needs the secret. Specify `spec.containers[].volumeMounts[].readOnly = true` and `spec.containers[].volumeMounts[].mountPath` to an unused directory name where you would like the secrets to appear. -1. Modify your image and/or command line so that the the program looks for files in that directory. Each key in the secret `data` map becomes the filename under `mountPath`. - -See the [Use Cases](#use-cases) section for detailed examples. - #### Automatic Mounting of Manually Created Secrets We plan to extend the service account behavior so that manually created @@ -328,31 +389,6 @@ controller. It does not include pods created via the kubelets `--manifest-url` flag, its `--config` flag, or its REST API (these are not common ways to create pods.) -### Consuming Secret Values - -Inside the container that mounts a secret volume, the secret keys appear as -files and the secret values are base-64 decoded and stored inside these files. -This is the result of commands -executed inside the container from the example above: - -```console -$ ls /etc/foo/ -username -password -$ cat /etc/foo/username -value-1 -$ cat /etc/foo/password -value-2 -``` - -The program in a container is responsible for reading the secret(s) from the -files. Currently, if a program expects a secret to be stored in an environment -variable, then the user needs to modify the image to populate the environment -variable from the file as an step before running the main program. Future -versions of Kubernetes are expected to provide more automation for populating -environment variables from files. - - ### Secret and Pod Lifetime interaction When a pod is created via the API, there is no check whether a referenced From 9925cddc110158666e57e4de0cfac5dd94a0b158 Mon Sep 17 00:00:00 2001 From: Matt Dupre Date: Mon, 8 Feb 2016 11:12:09 +0000 Subject: [PATCH 10/18] Change iptables fwmark to use single configurable bit instead of whole mark space --- cmd/kube-proxy/app/options/options.go | 1 + cmd/kube-proxy/app/server.go | 7 +- docs/admin/kube-proxy.md | 3 +- docs/user-guide/debugging-services.md | 6 +- hack/verify-flags/known-flags.txt | 1 + pkg/apis/componentconfig/types.generated.go | 3319 +++++++++-------- pkg/apis/componentconfig/types.go | 3 + .../v1alpha1/conversion_generated.go | 12 + .../v1alpha1/deep_copy_generated.go | 6 + pkg/apis/componentconfig/v1alpha1/defaults.go | 4 + .../v1alpha1/types.generated.go | 1245 ++++--- pkg/apis/componentconfig/v1alpha1/types.go | 3 + pkg/proxy/iptables/proxier.go | 42 +- 13 files changed, 2420 insertions(+), 2232 deletions(-) diff --git a/cmd/kube-proxy/app/options/options.go b/cmd/kube-proxy/app/options/options.go index 06d05dfcc7e..32dc2b3447a 100644 --- a/cmd/kube-proxy/app/options/options.go +++ b/cmd/kube-proxy/app/options/options.go @@ -71,6 +71,7 @@ func (s *ProxyServerConfig) AddFlags(fs *pflag.FlagSet) { fs.Var(componentconfig.PortRangeVar{&s.PortRange}, "proxy-port-range", "Range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.") fs.StringVar(&s.HostnameOverride, "hostname-override", s.HostnameOverride, "If non-empty, will use this string as identification instead of the actual hostname.") fs.Var(&s.Mode, "proxy-mode", "Which proxy mode to use: 'userspace' (older) or 'iptables' (faster). If blank, look at the Node object on the Kubernetes API and respect the '"+ExperimentalProxyModeAnnotation+"' annotation if provided. Otherwise use the best-available proxy (currently iptables). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.") + fs.IntVar(s.IPTablesMasqueradeBit, "iptables-masquerade-bit", util.IntPtrDerefOr(s.IPTablesMasqueradeBit, 14), "If using the pure iptables proxy, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31].") fs.DurationVar(&s.IPTablesSyncPeriod.Duration, "iptables-sync-period", s.IPTablesSyncPeriod.Duration, "How often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.") fs.DurationVar(&s.ConfigSyncPeriod, "config-sync-period", s.ConfigSyncPeriod, "How often configuration from the apiserver is refreshed. Must be greater than 0.") fs.BoolVar(&s.MasqueradeAll, "masquerade-all", s.MasqueradeAll, "If using the pure iptables proxy, SNAT everything") diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 4eebb611399..e6fb503e937 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -191,7 +191,12 @@ func NewProxyServerDefault(config *options.ProxyServerConfig) (*ProxyServer, err proxyMode := getProxyMode(string(config.Mode), client.Nodes(), hostname, iptInterface) if proxyMode == proxyModeIptables { glog.V(0).Info("Using iptables Proxier.") - proxierIptables, err := iptables.NewProxier(iptInterface, execer, config.IPTablesSyncPeriod.Duration, config.MasqueradeAll) + if config.IPTablesMasqueradeBit == nil { + // IPTablesMasqueradeBit must be specified or defaulted. + return nil, fmt.Errorf("Unable to read IPTablesMasqueradeBit from config") + } + + proxierIptables, err := iptables.NewProxier(iptInterface, execer, config.IPTablesSyncPeriod.Duration, config.MasqueradeAll, *config.IPTablesMasqueradeBit) if err != nil { glog.Fatalf("Unable to create proxier: %v", err) } diff --git a/docs/admin/kube-proxy.md b/docs/admin/kube-proxy.md index f9319633584..dd92a2c532b 100644 --- a/docs/admin/kube-proxy.md +++ b/docs/admin/kube-proxy.md @@ -63,6 +63,7 @@ kube-proxy --healthz-bind-address=127.0.0.1: The IP address for the health check server to serve on, defaulting to 127.0.0.1 (set to 0.0.0.0 for all interfaces) --healthz-port=10249: The port to bind the health check server. Use 0 to disable. --hostname-override="": If non-empty, will use this string as identification instead of the actual hostname. + --iptables-masquerade-bit=14: If using the pure iptables proxy, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31]. --iptables-sync-period=30s: How often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0. --kube-api-burst=10: Burst to use while talking with kubernetes apiserver --kube-api-qps=5: QPS to use while talking with kubernetes apiserver @@ -76,7 +77,7 @@ kube-proxy --udp-timeout=250ms: How long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxy-mode=userspace ``` -###### Auto generated by spf13/cobra on 1-Feb-2016 +###### Auto generated by spf13/cobra on 7-Feb-2016 diff --git a/docs/user-guide/debugging-services.md b/docs/user-guide/debugging-services.md index cb69e2cc668..810a37cb3cc 100644 --- a/docs/user-guide/debugging-services.md +++ b/docs/user-guide/debugging-services.md @@ -513,11 +513,11 @@ then look at the logs again. ```console u@node$ iptables-save | grep hostnames --A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000 -A KUBE-SEP-57KPRZ3JQVENLNBR -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.3.6:9376 --A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000 -A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376 --A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000 -A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376 -A KUBE-SERVICES -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3 -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index 8a96260b77c..7e28418d241 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -148,6 +148,7 @@ input-dirs insecure-bind-address insecure-port insecure-skip-tls-verify +iptables-masquerade-bit iptables-sync-period ir-data-source ir-dbname diff --git a/pkg/apis/componentconfig/types.generated.go b/pkg/apis/componentconfig/types.generated.go index 0016e5e83b4..a69b01fa32d 100644 --- a/pkg/apis/componentconfig/types.generated.go +++ b/pkg/apis/componentconfig/types.generated.go @@ -81,16 +81,16 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [17]bool + var yyq2 [18]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Kind != "" yyq2[1] = x.APIVersion != "" var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(17) + r.EncodeArrayStart(18) } else { - yynn2 = 15 + yynn2 = 16 for _, b := range yyq2 { if b { yynn2++ @@ -227,35 +227,64 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy22 := &x.IPTablesSyncPeriod - yym23 := z.EncBinary() - _ = yym23 - if false { - } else if z.HasExtensions() && z.EncExt(yy22) { - } else if !yym23 && z.IsJSONHandle() { - z.EncJSONMarshal(yy22) + if x.IPTablesMasqueradeBit == nil { + r.EncodeNil() } else { - z.EncFallback(yy22) + yy22 := *x.IPTablesMasqueradeBit + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeInt(int64(yy22)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iptablesMasqueradeBit")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.IPTablesMasqueradeBit == nil { + r.EncodeNil() + } else { + yy24 := *x.IPTablesMasqueradeBit + yym25 := z.EncBinary() + _ = yym25 + if false { + } else { + r.EncodeInt(int64(yy24)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy27 := &x.IPTablesSyncPeriod + yym28 := z.EncBinary() + _ = yym28 + if false { + } else if z.HasExtensions() && z.EncExt(yy27) { + } else if !yym28 && z.IsJSONHandle() { + z.EncJSONMarshal(yy27) + } else { + z.EncFallback(yy27) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("iptablesSyncPeriodSeconds")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy24 := &x.IPTablesSyncPeriod - yym25 := z.EncBinary() - _ = yym25 + yy29 := &x.IPTablesSyncPeriod + yym30 := z.EncBinary() + _ = yym30 if false { - } else if z.HasExtensions() && z.EncExt(yy24) { - } else if !yym25 && z.IsJSONHandle() { - z.EncJSONMarshal(yy24) + } else if z.HasExtensions() && z.EncExt(yy29) { + } else if !yym30 && z.IsJSONHandle() { + z.EncJSONMarshal(yy29) } else { - z.EncFallback(yy24) + z.EncFallback(yy29) } } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym27 := z.EncBinary() - _ = yym27 + yym32 := z.EncBinary() + _ = yym32 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.KubeconfigPath)) @@ -264,8 +293,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeconfigPath")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym28 := z.EncBinary() - _ = yym28 + yym33 := z.EncBinary() + _ = yym33 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.KubeconfigPath)) @@ -273,8 +302,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym30 := z.EncBinary() - _ = yym30 + yym35 := z.EncBinary() + _ = yym35 if false { } else { r.EncodeBool(bool(x.MasqueradeAll)) @@ -283,8 +312,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("masqueradeAll")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym31 := z.EncBinary() - _ = yym31 + yym36 := z.EncBinary() + _ = yym36 if false { } else { r.EncodeBool(bool(x.MasqueradeAll)) @@ -292,8 +321,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym33 := z.EncBinary() - _ = yym33 + yym38 := z.EncBinary() + _ = yym38 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Master)) @@ -302,8 +331,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("master")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym34 := z.EncBinary() - _ = yym34 + yym39 := z.EncBinary() + _ = yym39 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Master)) @@ -314,12 +343,12 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.OOMScoreAdj == nil { r.EncodeNil() } else { - yy36 := *x.OOMScoreAdj - yym37 := z.EncBinary() - _ = yym37 + yy41 := *x.OOMScoreAdj + yym42 := z.EncBinary() + _ = yym42 if false { } else { - r.EncodeInt(int64(yy36)) + r.EncodeInt(int64(yy41)) } } } else { @@ -329,12 +358,12 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.OOMScoreAdj == nil { r.EncodeNil() } else { - yy38 := *x.OOMScoreAdj - yym39 := z.EncBinary() - _ = yym39 + yy43 := *x.OOMScoreAdj + yym44 := z.EncBinary() + _ = yym44 if false { } else { - r.EncodeInt(int64(yy38)) + r.EncodeInt(int64(yy43)) } } } @@ -349,8 +378,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym42 := z.EncBinary() - _ = yym42 + yym47 := z.EncBinary() + _ = yym47 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PortRange)) @@ -359,8 +388,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("portRange")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym43 := z.EncBinary() - _ = yym43 + yym48 := z.EncBinary() + _ = yym48 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PortRange)) @@ -368,8 +397,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym45 := z.EncBinary() - _ = yym45 + yym50 := z.EncBinary() + _ = yym50 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) @@ -378,8 +407,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("resourceContainer")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym46 := z.EncBinary() - _ = yym46 + yym51 := z.EncBinary() + _ = yym51 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) @@ -387,35 +416,35 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy48 := &x.UDPIdleTimeout - yym49 := z.EncBinary() - _ = yym49 + yy53 := &x.UDPIdleTimeout + yym54 := z.EncBinary() + _ = yym54 if false { - } else if z.HasExtensions() && z.EncExt(yy48) { - } else if !yym49 && z.IsJSONHandle() { - z.EncJSONMarshal(yy48) + } else if z.HasExtensions() && z.EncExt(yy53) { + } else if !yym54 && z.IsJSONHandle() { + z.EncJSONMarshal(yy53) } else { - z.EncFallback(yy48) + z.EncFallback(yy53) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("udpTimeoutMilliseconds")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy50 := &x.UDPIdleTimeout - yym51 := z.EncBinary() - _ = yym51 + yy55 := &x.UDPIdleTimeout + yym56 := z.EncBinary() + _ = yym56 if false { - } else if z.HasExtensions() && z.EncExt(yy50) { - } else if !yym51 && z.IsJSONHandle() { - z.EncJSONMarshal(yy50) + } else if z.HasExtensions() && z.EncExt(yy55) { + } else if !yym56 && z.IsJSONHandle() { + z.EncJSONMarshal(yy55) } else { - z.EncFallback(yy50) + z.EncFallback(yy55) } } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym53 := z.EncBinary() - _ = yym53 + yym58 := z.EncBinary() + _ = yym58 if false { } else { r.EncodeInt(int64(x.ConntrackMax)) @@ -424,8 +453,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("conntrackMax")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym54 := z.EncBinary() - _ = yym54 + yym59 := z.EncBinary() + _ = yym59 if false { } else { r.EncodeInt(int64(x.ConntrackMax)) @@ -433,29 +462,29 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy56 := &x.ConntrackTCPEstablishedTimeout - yym57 := z.EncBinary() - _ = yym57 + yy61 := &x.ConntrackTCPEstablishedTimeout + yym62 := z.EncBinary() + _ = yym62 if false { - } else if z.HasExtensions() && z.EncExt(yy56) { - } else if !yym57 && z.IsJSONHandle() { - z.EncJSONMarshal(yy56) + } else if z.HasExtensions() && z.EncExt(yy61) { + } else if !yym62 && z.IsJSONHandle() { + z.EncJSONMarshal(yy61) } else { - z.EncFallback(yy56) + z.EncFallback(yy61) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("conntrackTCPEstablishedTimeout")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy58 := &x.ConntrackTCPEstablishedTimeout - yym59 := z.EncBinary() - _ = yym59 + yy63 := &x.ConntrackTCPEstablishedTimeout + yym64 := z.EncBinary() + _ = yym64 if false { - } else if z.HasExtensions() && z.EncExt(yy58) { - } else if !yym59 && z.IsJSONHandle() { - z.EncJSONMarshal(yy58) + } else if z.HasExtensions() && z.EncExt(yy63) { + } else if !yym64 && z.IsJSONHandle() { + z.EncJSONMarshal(yy63) } else { - z.EncFallback(yy58) + z.EncFallback(yy63) } } if yyr2 || yy2arr2 { @@ -471,25 +500,25 @@ func (x *KubeProxyConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym60 := z.DecBinary() - _ = yym60 + yym65 := z.DecBinary() + _ = yym65 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct61 := r.ContainerType() - if yyct61 == codecSelferValueTypeMap1234 { - yyl61 := r.ReadMapStart() - if yyl61 == 0 { + yyct66 := r.ContainerType() + if yyct66 == codecSelferValueTypeMap1234 { + yyl66 := r.ReadMapStart() + if yyl66 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl61, d) + x.codecDecodeSelfFromMap(yyl66, d) } - } else if yyct61 == codecSelferValueTypeArray1234 { - yyl61 := r.ReadArrayStart() - if yyl61 == 0 { + } else if yyct66 == codecSelferValueTypeArray1234 { + yyl66 := r.ReadArrayStart() + if yyl66 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl61, d) + x.codecDecodeSelfFromArray(yyl66, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -501,12 +530,12 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys62Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys62Slc - var yyhl62 bool = l >= 0 - for yyj62 := 0; ; yyj62++ { - if yyhl62 { - if yyj62 >= l { + var yys67Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys67Slc + var yyhl67 bool = l >= 0 + for yyj67 := 0; ; yyj67++ { + if yyhl67 { + if yyj67 >= l { break } } else { @@ -515,10 +544,10 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys62Slc = r.DecodeBytes(yys62Slc, true, true) - yys62 := string(yys62Slc) + yys67Slc = r.DecodeBytes(yys67Slc, true, true) + yys67 := string(yys67Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys62 { + switch yys67 { case "kind": if r.TryDecodeAsNil() { x.Kind = "" @@ -555,19 +584,35 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco } else { x.HostnameOverride = string(r.DecodeString()) } + case "iptablesMasqueradeBit": + if r.TryDecodeAsNil() { + if x.IPTablesMasqueradeBit != nil { + x.IPTablesMasqueradeBit = nil + } + } else { + if x.IPTablesMasqueradeBit == nil { + x.IPTablesMasqueradeBit = new(int) + } + yym75 := z.DecBinary() + _ = yym75 + if false { + } else { + *((*int)(x.IPTablesMasqueradeBit)) = int(r.DecodeInt(codecSelferBitsize1234)) + } + } case "iptablesSyncPeriodSeconds": if r.TryDecodeAsNil() { x.IPTablesSyncPeriod = pkg1_unversioned.Duration{} } else { - yyv69 := &x.IPTablesSyncPeriod - yym70 := z.DecBinary() - _ = yym70 + yyv76 := &x.IPTablesSyncPeriod + yym77 := z.DecBinary() + _ = yym77 if false { - } else if z.HasExtensions() && z.DecExt(yyv69) { - } else if !yym70 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv69) + } else if z.HasExtensions() && z.DecExt(yyv76) { + } else if !yym77 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv76) } else { - z.DecFallback(yyv69, false) + z.DecFallback(yyv76, false) } } case "kubeconfigPath": @@ -597,8 +642,8 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if x.OOMScoreAdj == nil { x.OOMScoreAdj = new(int) } - yym75 := z.DecBinary() - _ = yym75 + yym82 := z.DecBinary() + _ = yym82 if false { } else { *((*int)(x.OOMScoreAdj)) = int(r.DecodeInt(codecSelferBitsize1234)) @@ -626,15 +671,15 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.UDPIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv79 := &x.UDPIdleTimeout - yym80 := z.DecBinary() - _ = yym80 + yyv86 := &x.UDPIdleTimeout + yym87 := z.DecBinary() + _ = yym87 if false { - } else if z.HasExtensions() && z.DecExt(yyv79) { - } else if !yym80 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv79) + } else if z.HasExtensions() && z.DecExt(yyv86) { + } else if !yym87 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv86) } else { - z.DecFallback(yyv79, false) + z.DecFallback(yyv86, false) } } case "conntrackMax": @@ -647,21 +692,21 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.ConntrackTCPEstablishedTimeout = pkg1_unversioned.Duration{} } else { - yyv82 := &x.ConntrackTCPEstablishedTimeout - yym83 := z.DecBinary() - _ = yym83 + yyv89 := &x.ConntrackTCPEstablishedTimeout + yym90 := z.DecBinary() + _ = yym90 if false { - } else if z.HasExtensions() && z.DecExt(yyv82) { - } else if !yym83 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv82) + } else if z.HasExtensions() && z.DecExt(yyv89) { + } else if !yym90 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv89) } else { - z.DecFallback(yyv82, false) + z.DecFallback(yyv89, false) } } default: - z.DecStructFieldNotFound(-1, yys62) - } // end switch yys62 - } // end for yyj62 + z.DecStructFieldNotFound(-1, yys67) + } // end switch yys67 + } // end for yyj67 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -669,16 +714,16 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj84 int - var yyb84 bool - var yyhl84 bool = l >= 0 - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + var yyj91 int + var yyb91 bool + var yyhl91 bool = l >= 0 + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -688,13 +733,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Kind = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -704,13 +749,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.APIVersion = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -720,13 +765,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.BindAddress = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -736,13 +781,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HealthzBindAddress = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -752,13 +797,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HealthzPort = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -768,13 +813,39 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HostnameOverride = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.IPTablesMasqueradeBit != nil { + x.IPTablesMasqueradeBit = nil + } + } else { + if x.IPTablesMasqueradeBit == nil { + x.IPTablesMasqueradeBit = new(int) + } + yym99 := z.DecBinary() + _ = yym99 + if false { + } else { + *((*int)(x.IPTablesMasqueradeBit)) = int(r.DecodeInt(codecSelferBitsize1234)) + } + } + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l + } else { + yyb91 = r.CheckBreak() + } + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -782,24 +853,24 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.IPTablesSyncPeriod = pkg1_unversioned.Duration{} } else { - yyv91 := &x.IPTablesSyncPeriod - yym92 := z.DecBinary() - _ = yym92 + yyv100 := &x.IPTablesSyncPeriod + yym101 := z.DecBinary() + _ = yym101 if false { - } else if z.HasExtensions() && z.DecExt(yyv91) { - } else if !yym92 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv91) + } else if z.HasExtensions() && z.DecExt(yyv100) { + } else if !yym101 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv100) } else { - z.DecFallback(yyv91, false) + z.DecFallback(yyv100, false) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -809,13 +880,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.KubeconfigPath = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -825,13 +896,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.MasqueradeAll = bool(r.DecodeBool()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -841,13 +912,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Master = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -860,20 +931,20 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if x.OOMScoreAdj == nil { x.OOMScoreAdj = new(int) } - yym97 := z.DecBinary() - _ = yym97 + yym106 := z.DecBinary() + _ = yym106 if false { } else { *((*int)(x.OOMScoreAdj)) = int(r.DecodeInt(codecSelferBitsize1234)) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -883,13 +954,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Mode = ProxyMode(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -899,13 +970,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.PortRange = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -915,13 +986,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.ResourceContainer = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -929,24 +1000,24 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.UDPIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv101 := &x.UDPIdleTimeout - yym102 := z.DecBinary() - _ = yym102 + yyv110 := &x.UDPIdleTimeout + yym111 := z.DecBinary() + _ = yym111 if false { - } else if z.HasExtensions() && z.DecExt(yyv101) { - } else if !yym102 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv101) + } else if z.HasExtensions() && z.DecExt(yyv110) { + } else if !yym111 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv110) } else { - z.DecFallback(yyv101, false) + z.DecFallback(yyv110, false) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -956,13 +1027,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.ConntrackMax = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -970,29 +1041,29 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.ConntrackTCPEstablishedTimeout = pkg1_unversioned.Duration{} } else { - yyv104 := &x.ConntrackTCPEstablishedTimeout - yym105 := z.DecBinary() - _ = yym105 + yyv113 := &x.ConntrackTCPEstablishedTimeout + yym114 := z.DecBinary() + _ = yym114 if false { - } else if z.HasExtensions() && z.DecExt(yyv104) { - } else if !yym105 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv104) + } else if z.HasExtensions() && z.DecExt(yyv113) { + } else if !yym114 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv113) } else { - z.DecFallback(yyv104, false) + z.DecFallback(yyv113, false) } } for { - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj84-1, "") + z.DecStructFieldNotFound(yyj91-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -1001,8 +1072,8 @@ func (x ProxyMode) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r - yym106 := z.EncBinary() - _ = yym106 + yym115 := z.EncBinary() + _ = yym115 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { @@ -1014,8 +1085,8 @@ func (x *ProxyMode) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym107 := z.DecBinary() - _ = yym107 + yym116 := z.DecBinary() + _ = yym116 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { @@ -1030,41 +1101,41 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x == nil { r.EncodeNil() } else { - yym108 := z.EncBinary() - _ = yym108 + yym117 := z.EncBinary() + _ = yym117 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { - yysep109 := !z.EncBinary() - yy2arr109 := z.EncBasicHandle().StructToArray - var yyq109 [73]bool - _, _, _ = yysep109, yyq109, yy2arr109 - const yyr109 bool = false - yyq109[46] = x.CloudProvider != "" - yyq109[47] = x.CloudConfigFile != "" - yyq109[48] = x.ResourceContainer != "" - yyq109[49] = x.CgroupRoot != "" - yyq109[51] = x.RktPath != "" - yyq109[52] = x.RktStage1Image != "" - yyq109[68] = true - yyq109[69] = x.NodeIP != "" - var yynn109 int - if yyr109 || yy2arr109 { + yysep118 := !z.EncBinary() + yy2arr118 := z.EncBasicHandle().StructToArray + var yyq118 [73]bool + _, _, _ = yysep118, yyq118, yy2arr118 + const yyr118 bool = false + yyq118[46] = x.CloudProvider != "" + yyq118[47] = x.CloudConfigFile != "" + yyq118[48] = x.ResourceContainer != "" + yyq118[49] = x.CgroupRoot != "" + yyq118[51] = x.RktPath != "" + yyq118[52] = x.RktStage1Image != "" + yyq118[68] = true + yyq118[69] = x.NodeIP != "" + var yynn118 int + if yyr118 || yy2arr118 { r.EncodeArrayStart(73) } else { - yynn109 = 65 - for _, b := range yyq109 { + yynn118 = 65 + for _, b := range yyq118 { if b { - yynn109++ + yynn118++ } } - r.EncodeMapStart(yynn109) - yynn109 = 0 + r.EncodeMapStart(yynn118) + yynn118 = 0 } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym111 := z.EncBinary() - _ = yym111 + yym120 := z.EncBinary() + _ = yym120 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Config)) @@ -1073,98 +1144,98 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("config")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym112 := z.EncBinary() - _ = yym112 + yym121 := z.EncBinary() + _ = yym121 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Config)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy114 := &x.SyncFrequency - yym115 := z.EncBinary() - _ = yym115 + yy123 := &x.SyncFrequency + yym124 := z.EncBinary() + _ = yym124 if false { - } else if z.HasExtensions() && z.EncExt(yy114) { - } else if !yym115 && z.IsJSONHandle() { - z.EncJSONMarshal(yy114) + } else if z.HasExtensions() && z.EncExt(yy123) { + } else if !yym124 && z.IsJSONHandle() { + z.EncJSONMarshal(yy123) } else { - z.EncFallback(yy114) + z.EncFallback(yy123) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("syncFrequency")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy116 := &x.SyncFrequency - yym117 := z.EncBinary() - _ = yym117 + yy125 := &x.SyncFrequency + yym126 := z.EncBinary() + _ = yym126 if false { - } else if z.HasExtensions() && z.EncExt(yy116) { - } else if !yym117 && z.IsJSONHandle() { - z.EncJSONMarshal(yy116) + } else if z.HasExtensions() && z.EncExt(yy125) { + } else if !yym126 && z.IsJSONHandle() { + z.EncJSONMarshal(yy125) } else { - z.EncFallback(yy116) + z.EncFallback(yy125) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy119 := &x.FileCheckFrequency - yym120 := z.EncBinary() - _ = yym120 + yy128 := &x.FileCheckFrequency + yym129 := z.EncBinary() + _ = yym129 if false { - } else if z.HasExtensions() && z.EncExt(yy119) { - } else if !yym120 && z.IsJSONHandle() { - z.EncJSONMarshal(yy119) + } else if z.HasExtensions() && z.EncExt(yy128) { + } else if !yym129 && z.IsJSONHandle() { + z.EncJSONMarshal(yy128) } else { - z.EncFallback(yy119) + z.EncFallback(yy128) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("fileCheckFrequency")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy121 := &x.FileCheckFrequency - yym122 := z.EncBinary() - _ = yym122 + yy130 := &x.FileCheckFrequency + yym131 := z.EncBinary() + _ = yym131 if false { - } else if z.HasExtensions() && z.EncExt(yy121) { - } else if !yym122 && z.IsJSONHandle() { - z.EncJSONMarshal(yy121) + } else if z.HasExtensions() && z.EncExt(yy130) { + } else if !yym131 && z.IsJSONHandle() { + z.EncJSONMarshal(yy130) } else { - z.EncFallback(yy121) + z.EncFallback(yy130) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy124 := &x.HTTPCheckFrequency - yym125 := z.EncBinary() - _ = yym125 + yy133 := &x.HTTPCheckFrequency + yym134 := z.EncBinary() + _ = yym134 if false { - } else if z.HasExtensions() && z.EncExt(yy124) { - } else if !yym125 && z.IsJSONHandle() { - z.EncJSONMarshal(yy124) + } else if z.HasExtensions() && z.EncExt(yy133) { + } else if !yym134 && z.IsJSONHandle() { + z.EncJSONMarshal(yy133) } else { - z.EncFallback(yy124) + z.EncFallback(yy133) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("httpCheckFrequency")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy126 := &x.HTTPCheckFrequency - yym127 := z.EncBinary() - _ = yym127 + yy135 := &x.HTTPCheckFrequency + yym136 := z.EncBinary() + _ = yym136 if false { - } else if z.HasExtensions() && z.EncExt(yy126) { - } else if !yym127 && z.IsJSONHandle() { - z.EncJSONMarshal(yy126) + } else if z.HasExtensions() && z.EncExt(yy135) { + } else if !yym136 && z.IsJSONHandle() { + z.EncJSONMarshal(yy135) } else { - z.EncFallback(yy126) + z.EncFallback(yy135) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym129 := z.EncBinary() - _ = yym129 + yym138 := z.EncBinary() + _ = yym138 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ManifestURL)) @@ -1173,17 +1244,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("manifestURL")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym130 := z.EncBinary() - _ = yym130 + yym139 := z.EncBinary() + _ = yym139 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ManifestURL)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym132 := z.EncBinary() - _ = yym132 + yym141 := z.EncBinary() + _ = yym141 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ManifestURLHeader)) @@ -1192,17 +1263,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("manifestURLHeader")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym133 := z.EncBinary() - _ = yym133 + yym142 := z.EncBinary() + _ = yym142 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ManifestURLHeader)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym135 := z.EncBinary() - _ = yym135 + yym144 := z.EncBinary() + _ = yym144 if false { } else { r.EncodeBool(bool(x.EnableServer)) @@ -1211,17 +1282,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("enableServer")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym136 := z.EncBinary() - _ = yym136 + yym145 := z.EncBinary() + _ = yym145 if false { } else { r.EncodeBool(bool(x.EnableServer)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym138 := z.EncBinary() - _ = yym138 + yym147 := z.EncBinary() + _ = yym147 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) @@ -1230,17 +1301,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("address")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym139 := z.EncBinary() - _ = yym139 + yym148 := z.EncBinary() + _ = yym148 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym141 := z.EncBinary() - _ = yym141 + yym150 := z.EncBinary() + _ = yym150 if false { } else { r.EncodeUint(uint64(x.Port)) @@ -1249,17 +1320,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("port")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym142 := z.EncBinary() - _ = yym142 + yym151 := z.EncBinary() + _ = yym151 if false { } else { r.EncodeUint(uint64(x.Port)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym144 := z.EncBinary() - _ = yym144 + yym153 := z.EncBinary() + _ = yym153 if false { } else { r.EncodeUint(uint64(x.ReadOnlyPort)) @@ -1268,17 +1339,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("readOnlyPort")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym145 := z.EncBinary() - _ = yym145 + yym154 := z.EncBinary() + _ = yym154 if false { } else { r.EncodeUint(uint64(x.ReadOnlyPort)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym147 := z.EncBinary() - _ = yym147 + yym156 := z.EncBinary() + _ = yym156 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.TLSCertFile)) @@ -1287,17 +1358,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("tLSCertFile")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym148 := z.EncBinary() - _ = yym148 + yym157 := z.EncBinary() + _ = yym157 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.TLSCertFile)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym150 := z.EncBinary() - _ = yym150 + yym159 := z.EncBinary() + _ = yym159 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.TLSPrivateKeyFile)) @@ -1306,17 +1377,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("tLSPrivateKeyFile")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym151 := z.EncBinary() - _ = yym151 + yym160 := z.EncBinary() + _ = yym160 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.TLSPrivateKeyFile)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym153 := z.EncBinary() - _ = yym153 + yym162 := z.EncBinary() + _ = yym162 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.CertDirectory)) @@ -1325,17 +1396,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("certDirectory")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym154 := z.EncBinary() - _ = yym154 + yym163 := z.EncBinary() + _ = yym163 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.CertDirectory)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym156 := z.EncBinary() - _ = yym156 + yym165 := z.EncBinary() + _ = yym165 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostnameOverride)) @@ -1344,17 +1415,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("hostnameOverride")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym157 := z.EncBinary() - _ = yym157 + yym166 := z.EncBinary() + _ = yym166 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostnameOverride)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym159 := z.EncBinary() - _ = yym159 + yym168 := z.EncBinary() + _ = yym168 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PodInfraContainerImage)) @@ -1363,17 +1434,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("podInfraContainerImage")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym160 := z.EncBinary() - _ = yym160 + yym169 := z.EncBinary() + _ = yym169 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PodInfraContainerImage)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym162 := z.EncBinary() - _ = yym162 + yym171 := z.EncBinary() + _ = yym171 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.DockerEndpoint)) @@ -1382,17 +1453,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("dockerEndpoint")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym163 := z.EncBinary() - _ = yym163 + yym172 := z.EncBinary() + _ = yym172 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.DockerEndpoint)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym165 := z.EncBinary() - _ = yym165 + yym174 := z.EncBinary() + _ = yym174 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RootDirectory)) @@ -1401,17 +1472,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("rootDirectory")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym166 := z.EncBinary() - _ = yym166 + yym175 := z.EncBinary() + _ = yym175 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RootDirectory)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym168 := z.EncBinary() - _ = yym168 + yym177 := z.EncBinary() + _ = yym177 if false { } else { r.EncodeBool(bool(x.AllowPrivileged)) @@ -1420,17 +1491,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("allowPrivileged")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym169 := z.EncBinary() - _ = yym169 + yym178 := z.EncBinary() + _ = yym178 if false { } else { r.EncodeBool(bool(x.AllowPrivileged)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym171 := z.EncBinary() - _ = yym171 + yym180 := z.EncBinary() + _ = yym180 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostNetworkSources)) @@ -1439,17 +1510,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("hostNetworkSources")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym172 := z.EncBinary() - _ = yym172 + yym181 := z.EncBinary() + _ = yym181 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostNetworkSources)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym174 := z.EncBinary() - _ = yym174 + yym183 := z.EncBinary() + _ = yym183 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostPIDSources)) @@ -1458,17 +1529,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("hostPIDSources")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym175 := z.EncBinary() - _ = yym175 + yym184 := z.EncBinary() + _ = yym184 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostPIDSources)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym177 := z.EncBinary() - _ = yym177 + yym186 := z.EncBinary() + _ = yym186 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostIPCSources)) @@ -1477,17 +1548,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("hostIPCSources")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym178 := z.EncBinary() - _ = yym178 + yym187 := z.EncBinary() + _ = yym187 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HostIPCSources)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym180 := z.EncBinary() - _ = yym180 + yym189 := z.EncBinary() + _ = yym189 if false { } else { r.EncodeFloat64(float64(x.RegistryPullQPS)) @@ -1496,17 +1567,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("registryPullQPS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym181 := z.EncBinary() - _ = yym181 + yym190 := z.EncBinary() + _ = yym190 if false { } else { r.EncodeFloat64(float64(x.RegistryPullQPS)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym183 := z.EncBinary() - _ = yym183 + yym192 := z.EncBinary() + _ = yym192 if false { } else { r.EncodeInt(int64(x.RegistryBurst)) @@ -1515,17 +1586,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("registryBurst")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym184 := z.EncBinary() - _ = yym184 + yym193 := z.EncBinary() + _ = yym193 if false { } else { r.EncodeInt(int64(x.RegistryBurst)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym186 := z.EncBinary() - _ = yym186 + yym195 := z.EncBinary() + _ = yym195 if false { } else { r.EncodeFloat32(float32(x.EventRecordQPS)) @@ -1534,17 +1605,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("eventRecordQPS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym187 := z.EncBinary() - _ = yym187 + yym196 := z.EncBinary() + _ = yym196 if false { } else { r.EncodeFloat32(float32(x.EventRecordQPS)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym189 := z.EncBinary() - _ = yym189 + yym198 := z.EncBinary() + _ = yym198 if false { } else { r.EncodeInt(int64(x.EventBurst)) @@ -1553,17 +1624,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("eventBurst")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym190 := z.EncBinary() - _ = yym190 + yym199 := z.EncBinary() + _ = yym199 if false { } else { r.EncodeInt(int64(x.EventBurst)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym192 := z.EncBinary() - _ = yym192 + yym201 := z.EncBinary() + _ = yym201 if false { } else { r.EncodeBool(bool(x.EnableDebuggingHandlers)) @@ -1572,44 +1643,44 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("enableDebuggingHandlers")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym193 := z.EncBinary() - _ = yym193 + yym202 := z.EncBinary() + _ = yym202 if false { } else { r.EncodeBool(bool(x.EnableDebuggingHandlers)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy195 := &x.MinimumGCAge - yym196 := z.EncBinary() - _ = yym196 + yy204 := &x.MinimumGCAge + yym205 := z.EncBinary() + _ = yym205 if false { - } else if z.HasExtensions() && z.EncExt(yy195) { - } else if !yym196 && z.IsJSONHandle() { - z.EncJSONMarshal(yy195) + } else if z.HasExtensions() && z.EncExt(yy204) { + } else if !yym205 && z.IsJSONHandle() { + z.EncJSONMarshal(yy204) } else { - z.EncFallback(yy195) + z.EncFallback(yy204) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("minimumGCAge")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy197 := &x.MinimumGCAge - yym198 := z.EncBinary() - _ = yym198 + yy206 := &x.MinimumGCAge + yym207 := z.EncBinary() + _ = yym207 if false { - } else if z.HasExtensions() && z.EncExt(yy197) { - } else if !yym198 && z.IsJSONHandle() { - z.EncJSONMarshal(yy197) + } else if z.HasExtensions() && z.EncExt(yy206) { + } else if !yym207 && z.IsJSONHandle() { + z.EncJSONMarshal(yy206) } else { - z.EncFallback(yy197) + z.EncFallback(yy206) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym200 := z.EncBinary() - _ = yym200 + yym209 := z.EncBinary() + _ = yym209 if false { } else { r.EncodeInt(int64(x.MaxPerPodContainerCount)) @@ -1618,17 +1689,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("maxPerPodContainerCount")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym201 := z.EncBinary() - _ = yym201 + yym210 := z.EncBinary() + _ = yym210 if false { } else { r.EncodeInt(int64(x.MaxPerPodContainerCount)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym203 := z.EncBinary() - _ = yym203 + yym212 := z.EncBinary() + _ = yym212 if false { } else { r.EncodeInt(int64(x.MaxContainerCount)) @@ -1637,17 +1708,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("maxContainerCount")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym204 := z.EncBinary() - _ = yym204 + yym213 := z.EncBinary() + _ = yym213 if false { } else { r.EncodeInt(int64(x.MaxContainerCount)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym206 := z.EncBinary() - _ = yym206 + yym215 := z.EncBinary() + _ = yym215 if false { } else { r.EncodeUint(uint64(x.CAdvisorPort)) @@ -1656,17 +1727,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("cAdvisorPort")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym207 := z.EncBinary() - _ = yym207 + yym216 := z.EncBinary() + _ = yym216 if false { } else { r.EncodeUint(uint64(x.CAdvisorPort)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym209 := z.EncBinary() - _ = yym209 + yym218 := z.EncBinary() + _ = yym218 if false { } else { r.EncodeInt(int64(x.HealthzPort)) @@ -1675,17 +1746,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("healthzPort")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym210 := z.EncBinary() - _ = yym210 + yym219 := z.EncBinary() + _ = yym219 if false { } else { r.EncodeInt(int64(x.HealthzPort)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym212 := z.EncBinary() - _ = yym212 + yym221 := z.EncBinary() + _ = yym221 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HealthzBindAddress)) @@ -1694,17 +1765,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("healthzBindAddress")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym213 := z.EncBinary() - _ = yym213 + yym222 := z.EncBinary() + _ = yym222 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.HealthzBindAddress)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym215 := z.EncBinary() - _ = yym215 + yym224 := z.EncBinary() + _ = yym224 if false { } else { r.EncodeInt(int64(x.OOMScoreAdj)) @@ -1713,17 +1784,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("oomScoreAdj")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym216 := z.EncBinary() - _ = yym216 + yym225 := z.EncBinary() + _ = yym225 if false { } else { r.EncodeInt(int64(x.OOMScoreAdj)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym218 := z.EncBinary() - _ = yym218 + yym227 := z.EncBinary() + _ = yym227 if false { } else { r.EncodeBool(bool(x.RegisterNode)) @@ -1732,17 +1803,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("registerNode")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym219 := z.EncBinary() - _ = yym219 + yym228 := z.EncBinary() + _ = yym228 if false { } else { r.EncodeBool(bool(x.RegisterNode)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym221 := z.EncBinary() - _ = yym221 + yym230 := z.EncBinary() + _ = yym230 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ClusterDomain)) @@ -1751,17 +1822,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("clusterDomain")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym222 := z.EncBinary() - _ = yym222 + yym231 := z.EncBinary() + _ = yym231 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ClusterDomain)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym224 := z.EncBinary() - _ = yym224 + yym233 := z.EncBinary() + _ = yym233 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.MasterServiceNamespace)) @@ -1770,17 +1841,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("masterServiceNamespace")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym225 := z.EncBinary() - _ = yym225 + yym234 := z.EncBinary() + _ = yym234 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.MasterServiceNamespace)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym227 := z.EncBinary() - _ = yym227 + yym236 := z.EncBinary() + _ = yym236 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ClusterDNS)) @@ -1789,71 +1860,71 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("clusterDNS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym228 := z.EncBinary() - _ = yym228 + yym237 := z.EncBinary() + _ = yym237 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ClusterDNS)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy230 := &x.StreamingConnectionIdleTimeout - yym231 := z.EncBinary() - _ = yym231 + yy239 := &x.StreamingConnectionIdleTimeout + yym240 := z.EncBinary() + _ = yym240 if false { - } else if z.HasExtensions() && z.EncExt(yy230) { - } else if !yym231 && z.IsJSONHandle() { - z.EncJSONMarshal(yy230) + } else if z.HasExtensions() && z.EncExt(yy239) { + } else if !yym240 && z.IsJSONHandle() { + z.EncJSONMarshal(yy239) } else { - z.EncFallback(yy230) + z.EncFallback(yy239) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("streamingConnectionIdleTimeout")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy232 := &x.StreamingConnectionIdleTimeout - yym233 := z.EncBinary() - _ = yym233 + yy241 := &x.StreamingConnectionIdleTimeout + yym242 := z.EncBinary() + _ = yym242 if false { - } else if z.HasExtensions() && z.EncExt(yy232) { - } else if !yym233 && z.IsJSONHandle() { - z.EncJSONMarshal(yy232) + } else if z.HasExtensions() && z.EncExt(yy241) { + } else if !yym242 && z.IsJSONHandle() { + z.EncJSONMarshal(yy241) } else { - z.EncFallback(yy232) + z.EncFallback(yy241) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy235 := &x.NodeStatusUpdateFrequency - yym236 := z.EncBinary() - _ = yym236 + yy244 := &x.NodeStatusUpdateFrequency + yym245 := z.EncBinary() + _ = yym245 if false { - } else if z.HasExtensions() && z.EncExt(yy235) { - } else if !yym236 && z.IsJSONHandle() { - z.EncJSONMarshal(yy235) + } else if z.HasExtensions() && z.EncExt(yy244) { + } else if !yym245 && z.IsJSONHandle() { + z.EncJSONMarshal(yy244) } else { - z.EncFallback(yy235) + z.EncFallback(yy244) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("nodeStatusUpdateFrequency")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy237 := &x.NodeStatusUpdateFrequency - yym238 := z.EncBinary() - _ = yym238 + yy246 := &x.NodeStatusUpdateFrequency + yym247 := z.EncBinary() + _ = yym247 if false { - } else if z.HasExtensions() && z.EncExt(yy237) { - } else if !yym238 && z.IsJSONHandle() { - z.EncJSONMarshal(yy237) + } else if z.HasExtensions() && z.EncExt(yy246) { + } else if !yym247 && z.IsJSONHandle() { + z.EncJSONMarshal(yy246) } else { - z.EncFallback(yy237) + z.EncFallback(yy246) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym240 := z.EncBinary() - _ = yym240 + yym249 := z.EncBinary() + _ = yym249 if false { } else { r.EncodeInt(int64(x.ImageGCHighThresholdPercent)) @@ -1862,17 +1933,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("imageGCHighThresholdPercent")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym241 := z.EncBinary() - _ = yym241 + yym250 := z.EncBinary() + _ = yym250 if false { } else { r.EncodeInt(int64(x.ImageGCHighThresholdPercent)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym243 := z.EncBinary() - _ = yym243 + yym252 := z.EncBinary() + _ = yym252 if false { } else { r.EncodeInt(int64(x.ImageGCLowThresholdPercent)) @@ -1881,17 +1952,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("imageGCLowThresholdPercent")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym244 := z.EncBinary() - _ = yym244 + yym253 := z.EncBinary() + _ = yym253 if false { } else { r.EncodeInt(int64(x.ImageGCLowThresholdPercent)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym246 := z.EncBinary() - _ = yym246 + yym255 := z.EncBinary() + _ = yym255 if false { } else { r.EncodeInt(int64(x.LowDiskSpaceThresholdMB)) @@ -1900,44 +1971,44 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("lowDiskSpaceThresholdMB")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym247 := z.EncBinary() - _ = yym247 + yym256 := z.EncBinary() + _ = yym256 if false { } else { r.EncodeInt(int64(x.LowDiskSpaceThresholdMB)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy249 := &x.VolumeStatsAggPeriod - yym250 := z.EncBinary() - _ = yym250 + yy258 := &x.VolumeStatsAggPeriod + yym259 := z.EncBinary() + _ = yym259 if false { - } else if z.HasExtensions() && z.EncExt(yy249) { - } else if !yym250 && z.IsJSONHandle() { - z.EncJSONMarshal(yy249) + } else if z.HasExtensions() && z.EncExt(yy258) { + } else if !yym259 && z.IsJSONHandle() { + z.EncJSONMarshal(yy258) } else { - z.EncFallback(yy249) + z.EncFallback(yy258) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("VolumeStatsAggPeriod")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy251 := &x.VolumeStatsAggPeriod - yym252 := z.EncBinary() - _ = yym252 + yy260 := &x.VolumeStatsAggPeriod + yym261 := z.EncBinary() + _ = yym261 if false { - } else if z.HasExtensions() && z.EncExt(yy251) { - } else if !yym252 && z.IsJSONHandle() { - z.EncJSONMarshal(yy251) + } else if z.HasExtensions() && z.EncExt(yy260) { + } else if !yym261 && z.IsJSONHandle() { + z.EncJSONMarshal(yy260) } else { - z.EncFallback(yy251) + z.EncFallback(yy260) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym254 := z.EncBinary() - _ = yym254 + yym263 := z.EncBinary() + _ = yym263 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NetworkPluginName)) @@ -1946,17 +2017,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("networkPluginName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym255 := z.EncBinary() - _ = yym255 + yym264 := z.EncBinary() + _ = yym264 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NetworkPluginName)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym257 := z.EncBinary() - _ = yym257 + yym266 := z.EncBinary() + _ = yym266 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NetworkPluginDir)) @@ -1965,17 +2036,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("networkPluginDir")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym258 := z.EncBinary() - _ = yym258 + yym267 := z.EncBinary() + _ = yym267 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NetworkPluginDir)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym260 := z.EncBinary() - _ = yym260 + yym269 := z.EncBinary() + _ = yym269 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.VolumePluginDir)) @@ -1984,117 +2055,117 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("volumePluginDir")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym261 := z.EncBinary() - _ = yym261 + yym270 := z.EncBinary() + _ = yym270 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.VolumePluginDir)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[46] { - yym263 := z.EncBinary() - _ = yym263 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.CloudProvider)) - } - } else { - r.EncodeString(codecSelferC_UTF81234, "") - } - } else { - if yyq109[46] { - z.EncSendContainerState(codecSelfer_containerMapKey1234) - r.EncodeString(codecSelferC_UTF81234, string("cloudProvider")) - z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym264 := z.EncBinary() - _ = yym264 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.CloudProvider)) - } - } - } - if yyr109 || yy2arr109 { - z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[47] { - yym266 := z.EncBinary() - _ = yym266 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.CloudConfigFile)) - } - } else { - r.EncodeString(codecSelferC_UTF81234, "") - } - } else { - if yyq109[47] { - z.EncSendContainerState(codecSelfer_containerMapKey1234) - r.EncodeString(codecSelferC_UTF81234, string("cloudConfigFile")) - z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym267 := z.EncBinary() - _ = yym267 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.CloudConfigFile)) - } - } - } - if yyr109 || yy2arr109 { - z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[48] { - yym269 := z.EncBinary() - _ = yym269 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) - } - } else { - r.EncodeString(codecSelferC_UTF81234, "") - } - } else { - if yyq109[48] { - z.EncSendContainerState(codecSelfer_containerMapKey1234) - r.EncodeString(codecSelferC_UTF81234, string("resourceContainer")) - z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym270 := z.EncBinary() - _ = yym270 - if false { - } else { - r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) - } - } - } - if yyr109 || yy2arr109 { - z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[49] { + if yyq118[46] { yym272 := z.EncBinary() _ = yym272 if false { } else { - r.EncodeString(codecSelferC_UTF81234, string(x.CgroupRoot)) + r.EncodeString(codecSelferC_UTF81234, string(x.CloudProvider)) } } else { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[49] { + if yyq118[46] { z.EncSendContainerState(codecSelfer_containerMapKey1234) - r.EncodeString(codecSelferC_UTF81234, string("cgroupRoot")) + r.EncodeString(codecSelferC_UTF81234, string("cloudProvider")) z.EncSendContainerState(codecSelfer_containerMapValue1234) yym273 := z.EncBinary() _ = yym273 if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CloudProvider)) + } + } + } + if yyr118 || yy2arr118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq118[47] { + yym275 := z.EncBinary() + _ = yym275 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CloudConfigFile)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq118[47] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cloudConfigFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym276 := z.EncBinary() + _ = yym276 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CloudConfigFile)) + } + } + } + if yyr118 || yy2arr118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq118[48] { + yym278 := z.EncBinary() + _ = yym278 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq118[48] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceContainer")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym279 := z.EncBinary() + _ = yym279 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) + } + } + } + if yyr118 || yy2arr118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq118[49] { + yym281 := z.EncBinary() + _ = yym281 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CgroupRoot)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq118[49] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cgroupRoot")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym282 := z.EncBinary() + _ = yym282 + if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.CgroupRoot)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym275 := z.EncBinary() - _ = yym275 + yym284 := z.EncBinary() + _ = yym284 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntime)) @@ -2103,18 +2174,18 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("containerRuntime")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym276 := z.EncBinary() - _ = yym276 + yym285 := z.EncBinary() + _ = yym285 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntime)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[51] { - yym278 := z.EncBinary() - _ = yym278 + if yyq118[51] { + yym287 := z.EncBinary() + _ = yym287 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RktPath)) @@ -2123,23 +2194,23 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[51] { + if yyq118[51] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("rktPath")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym279 := z.EncBinary() - _ = yym279 + yym288 := z.EncBinary() + _ = yym288 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RktPath)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[52] { - yym281 := z.EncBinary() - _ = yym281 + if yyq118[52] { + yym290 := z.EncBinary() + _ = yym290 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RktStage1Image)) @@ -2148,22 +2219,22 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[52] { + if yyq118[52] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("rktStage1Image")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym282 := z.EncBinary() - _ = yym282 + yym291 := z.EncBinary() + _ = yym291 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.RktStage1Image)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym284 := z.EncBinary() - _ = yym284 + yym293 := z.EncBinary() + _ = yym293 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SystemContainer)) @@ -2172,17 +2243,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("systemContainer")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym285 := z.EncBinary() - _ = yym285 + yym294 := z.EncBinary() + _ = yym294 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SystemContainer)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym287 := z.EncBinary() - _ = yym287 + yym296 := z.EncBinary() + _ = yym296 if false { } else { r.EncodeBool(bool(x.ConfigureCBR0)) @@ -2191,17 +2262,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("configureCbr0")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym288 := z.EncBinary() - _ = yym288 + yym297 := z.EncBinary() + _ = yym297 if false { } else { r.EncodeBool(bool(x.ConfigureCBR0)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym290 := z.EncBinary() - _ = yym290 + yym299 := z.EncBinary() + _ = yym299 if false { } else { r.EncodeInt(int64(x.MaxPods)) @@ -2210,17 +2281,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("maxPods")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym291 := z.EncBinary() - _ = yym291 + yym300 := z.EncBinary() + _ = yym300 if false { } else { r.EncodeInt(int64(x.MaxPods)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym293 := z.EncBinary() - _ = yym293 + yym302 := z.EncBinary() + _ = yym302 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.DockerExecHandlerName)) @@ -2229,17 +2300,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("dockerExecHandlerName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym294 := z.EncBinary() - _ = yym294 + yym303 := z.EncBinary() + _ = yym303 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.DockerExecHandlerName)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym296 := z.EncBinary() - _ = yym296 + yym305 := z.EncBinary() + _ = yym305 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) @@ -2248,17 +2319,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("podCIDR")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym297 := z.EncBinary() - _ = yym297 + yym306 := z.EncBinary() + _ = yym306 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym299 := z.EncBinary() - _ = yym299 + yym308 := z.EncBinary() + _ = yym308 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResolverConfig)) @@ -2267,17 +2338,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("resolvConf")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym300 := z.EncBinary() - _ = yym300 + yym309 := z.EncBinary() + _ = yym309 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResolverConfig)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym302 := z.EncBinary() - _ = yym302 + yym311 := z.EncBinary() + _ = yym311 if false { } else { r.EncodeBool(bool(x.CPUCFSQuota)) @@ -2286,17 +2357,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("cpuCFSQuota")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym303 := z.EncBinary() - _ = yym303 + yym312 := z.EncBinary() + _ = yym312 if false { } else { r.EncodeBool(bool(x.CPUCFSQuota)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym305 := z.EncBinary() - _ = yym305 + yym314 := z.EncBinary() + _ = yym314 if false { } else { r.EncodeBool(bool(x.Containerized)) @@ -2305,17 +2376,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("containerized")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym306 := z.EncBinary() - _ = yym306 + yym315 := z.EncBinary() + _ = yym315 if false { } else { r.EncodeBool(bool(x.Containerized)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym308 := z.EncBinary() - _ = yym308 + yym317 := z.EncBinary() + _ = yym317 if false { } else { r.EncodeUint(uint64(x.MaxOpenFiles)) @@ -2324,17 +2395,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("maxOpenFiles")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym309 := z.EncBinary() - _ = yym309 + yym318 := z.EncBinary() + _ = yym318 if false { } else { r.EncodeUint(uint64(x.MaxOpenFiles)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym311 := z.EncBinary() - _ = yym311 + yym320 := z.EncBinary() + _ = yym320 if false { } else { r.EncodeBool(bool(x.ReconcileCIDR)) @@ -2343,17 +2414,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("reconcileCIDR")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym312 := z.EncBinary() - _ = yym312 + yym321 := z.EncBinary() + _ = yym321 if false { } else { r.EncodeBool(bool(x.ReconcileCIDR)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym314 := z.EncBinary() - _ = yym314 + yym323 := z.EncBinary() + _ = yym323 if false { } else { r.EncodeBool(bool(x.RegisterSchedulable)) @@ -2362,17 +2433,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("registerSchedulable")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym315 := z.EncBinary() - _ = yym315 + yym324 := z.EncBinary() + _ = yym324 if false { } else { r.EncodeBool(bool(x.RegisterSchedulable)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym317 := z.EncBinary() - _ = yym317 + yym326 := z.EncBinary() + _ = yym326 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) @@ -2381,17 +2452,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIQPS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym318 := z.EncBinary() - _ = yym318 + yym327 := z.EncBinary() + _ = yym327 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym320 := z.EncBinary() - _ = yym320 + yym329 := z.EncBinary() + _ = yym329 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) @@ -2400,17 +2471,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIBurst")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym321 := z.EncBinary() - _ = yym321 + yym330 := z.EncBinary() + _ = yym330 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym323 := z.EncBinary() - _ = yym323 + yym332 := z.EncBinary() + _ = yym332 if false { } else { r.EncodeBool(bool(x.SerializeImagePulls)) @@ -2419,17 +2490,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("serializeImagePulls")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym324 := z.EncBinary() - _ = yym324 + yym333 := z.EncBinary() + _ = yym333 if false { } else { r.EncodeBool(bool(x.SerializeImagePulls)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym326 := z.EncBinary() - _ = yym326 + yym335 := z.EncBinary() + _ = yym335 if false { } else { r.EncodeBool(bool(x.ExperimentalFlannelOverlay)) @@ -2438,51 +2509,51 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("experimentalFlannelOverlay")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym327 := z.EncBinary() - _ = yym327 + yym336 := z.EncBinary() + _ = yym336 if false { } else { r.EncodeBool(bool(x.ExperimentalFlannelOverlay)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[68] { - yy329 := &x.OutOfDiskTransitionFrequency - yym330 := z.EncBinary() - _ = yym330 + if yyq118[68] { + yy338 := &x.OutOfDiskTransitionFrequency + yym339 := z.EncBinary() + _ = yym339 if false { - } else if z.HasExtensions() && z.EncExt(yy329) { - } else if !yym330 && z.IsJSONHandle() { - z.EncJSONMarshal(yy329) + } else if z.HasExtensions() && z.EncExt(yy338) { + } else if !yym339 && z.IsJSONHandle() { + z.EncJSONMarshal(yy338) } else { - z.EncFallback(yy329) + z.EncFallback(yy338) } } else { r.EncodeNil() } } else { - if yyq109[68] { + if yyq118[68] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("outOfDiskTransitionFrequency")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy331 := &x.OutOfDiskTransitionFrequency - yym332 := z.EncBinary() - _ = yym332 + yy340 := &x.OutOfDiskTransitionFrequency + yym341 := z.EncBinary() + _ = yym341 if false { - } else if z.HasExtensions() && z.EncExt(yy331) { - } else if !yym332 && z.IsJSONHandle() { - z.EncJSONMarshal(yy331) + } else if z.HasExtensions() && z.EncExt(yy340) { + } else if !yym341 && z.IsJSONHandle() { + z.EncJSONMarshal(yy340) } else { - z.EncFallback(yy331) + z.EncFallback(yy340) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[69] { - yym334 := z.EncBinary() - _ = yym334 + if yyq118[69] { + yym343 := z.EncBinary() + _ = yym343 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NodeIP)) @@ -2491,25 +2562,25 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[69] { + if yyq118[69] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("nodeIP")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym335 := z.EncBinary() - _ = yym335 + yym344 := z.EncBinary() + _ = yym344 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NodeIP)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) if x.NodeLabels == nil { r.EncodeNil() } else { - yym337 := z.EncBinary() - _ = yym337 + yym346 := z.EncBinary() + _ = yym346 if false { } else { z.F.EncMapStringStringV(x.NodeLabels, false, e) @@ -2522,18 +2593,18 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.NodeLabels == nil { r.EncodeNil() } else { - yym338 := z.EncBinary() - _ = yym338 + yym347 := z.EncBinary() + _ = yym347 if false { } else { z.F.EncMapStringStringV(x.NodeLabels, false, e) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym340 := z.EncBinary() - _ = yym340 + yym349 := z.EncBinary() + _ = yym349 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NonMasqueradeCIDR)) @@ -2542,17 +2613,17 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("nonMasqueradeCIDR")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym341 := z.EncBinary() - _ = yym341 + yym350 := z.EncBinary() + _ = yym350 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.NonMasqueradeCIDR)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym343 := z.EncBinary() - _ = yym343 + yym352 := z.EncBinary() + _ = yym352 if false { } else { r.EncodeBool(bool(x.EnableCustomMetrics)) @@ -2561,14 +2632,14 @@ func (x *KubeletConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("enableCustomMetrics")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym344 := z.EncBinary() - _ = yym344 + yym353 := z.EncBinary() + _ = yym353 if false { } else { r.EncodeBool(bool(x.EnableCustomMetrics)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { z.EncSendContainerState(codecSelfer_containerMapEnd1234) @@ -2581,25 +2652,25 @@ func (x *KubeletConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym345 := z.DecBinary() - _ = yym345 + yym354 := z.DecBinary() + _ = yym354 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct346 := r.ContainerType() - if yyct346 == codecSelferValueTypeMap1234 { - yyl346 := r.ReadMapStart() - if yyl346 == 0 { + yyct355 := r.ContainerType() + if yyct355 == codecSelferValueTypeMap1234 { + yyl355 := r.ReadMapStart() + if yyl355 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl346, d) + x.codecDecodeSelfFromMap(yyl355, d) } - } else if yyct346 == codecSelferValueTypeArray1234 { - yyl346 := r.ReadArrayStart() - if yyl346 == 0 { + } else if yyct355 == codecSelferValueTypeArray1234 { + yyl355 := r.ReadArrayStart() + if yyl355 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl346, d) + x.codecDecodeSelfFromArray(yyl355, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -2611,12 +2682,12 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys347Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys347Slc - var yyhl347 bool = l >= 0 - for yyj347 := 0; ; yyj347++ { - if yyhl347 { - if yyj347 >= l { + var yys356Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys356Slc + var yyhl356 bool = l >= 0 + for yyj356 := 0; ; yyj356++ { + if yyhl356 { + if yyj356 >= l { break } } else { @@ -2625,10 +2696,10 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys347Slc = r.DecodeBytes(yys347Slc, true, true) - yys347 := string(yys347Slc) + yys356Slc = r.DecodeBytes(yys356Slc, true, true) + yys356 := string(yys356Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys347 { + switch yys356 { case "config": if r.TryDecodeAsNil() { x.Config = "" @@ -2639,45 +2710,45 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.SyncFrequency = pkg1_unversioned.Duration{} } else { - yyv349 := &x.SyncFrequency - yym350 := z.DecBinary() - _ = yym350 + yyv358 := &x.SyncFrequency + yym359 := z.DecBinary() + _ = yym359 if false { - } else if z.HasExtensions() && z.DecExt(yyv349) { - } else if !yym350 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv349) + } else if z.HasExtensions() && z.DecExt(yyv358) { + } else if !yym359 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv358) } else { - z.DecFallback(yyv349, false) + z.DecFallback(yyv358, false) } } case "fileCheckFrequency": if r.TryDecodeAsNil() { x.FileCheckFrequency = pkg1_unversioned.Duration{} } else { - yyv351 := &x.FileCheckFrequency - yym352 := z.DecBinary() - _ = yym352 + yyv360 := &x.FileCheckFrequency + yym361 := z.DecBinary() + _ = yym361 if false { - } else if z.HasExtensions() && z.DecExt(yyv351) { - } else if !yym352 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv351) + } else if z.HasExtensions() && z.DecExt(yyv360) { + } else if !yym361 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv360) } else { - z.DecFallback(yyv351, false) + z.DecFallback(yyv360, false) } } case "httpCheckFrequency": if r.TryDecodeAsNil() { x.HTTPCheckFrequency = pkg1_unversioned.Duration{} } else { - yyv353 := &x.HTTPCheckFrequency - yym354 := z.DecBinary() - _ = yym354 + yyv362 := &x.HTTPCheckFrequency + yym363 := z.DecBinary() + _ = yym363 if false { - } else if z.HasExtensions() && z.DecExt(yyv353) { - } else if !yym354 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv353) + } else if z.HasExtensions() && z.DecExt(yyv362) { + } else if !yym363 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv362) } else { - z.DecFallback(yyv353, false) + z.DecFallback(yyv362, false) } } case "manifestURL": @@ -2816,15 +2887,15 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.MinimumGCAge = pkg1_unversioned.Duration{} } else { - yyv377 := &x.MinimumGCAge - yym378 := z.DecBinary() - _ = yym378 + yyv386 := &x.MinimumGCAge + yym387 := z.DecBinary() + _ = yym387 if false { - } else if z.HasExtensions() && z.DecExt(yyv377) { - } else if !yym378 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv377) + } else if z.HasExtensions() && z.DecExt(yyv386) { + } else if !yym387 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv386) } else { - z.DecFallback(yyv377, false) + z.DecFallback(yyv386, false) } } case "maxPerPodContainerCount": @@ -2891,30 +2962,30 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.StreamingConnectionIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv389 := &x.StreamingConnectionIdleTimeout - yym390 := z.DecBinary() - _ = yym390 + yyv398 := &x.StreamingConnectionIdleTimeout + yym399 := z.DecBinary() + _ = yym399 if false { - } else if z.HasExtensions() && z.DecExt(yyv389) { - } else if !yym390 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv389) + } else if z.HasExtensions() && z.DecExt(yyv398) { + } else if !yym399 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv398) } else { - z.DecFallback(yyv389, false) + z.DecFallback(yyv398, false) } } case "nodeStatusUpdateFrequency": if r.TryDecodeAsNil() { x.NodeStatusUpdateFrequency = pkg1_unversioned.Duration{} } else { - yyv391 := &x.NodeStatusUpdateFrequency - yym392 := z.DecBinary() - _ = yym392 + yyv400 := &x.NodeStatusUpdateFrequency + yym401 := z.DecBinary() + _ = yym401 if false { - } else if z.HasExtensions() && z.DecExt(yyv391) { - } else if !yym392 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv391) + } else if z.HasExtensions() && z.DecExt(yyv400) { + } else if !yym401 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv400) } else { - z.DecFallback(yyv391, false) + z.DecFallback(yyv400, false) } } case "imageGCHighThresholdPercent": @@ -2939,15 +3010,15 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.VolumeStatsAggPeriod = pkg1_unversioned.Duration{} } else { - yyv396 := &x.VolumeStatsAggPeriod - yym397 := z.DecBinary() - _ = yym397 + yyv405 := &x.VolumeStatsAggPeriod + yym406 := z.DecBinary() + _ = yym406 if false { - } else if z.HasExtensions() && z.DecExt(yyv396) { - } else if !yym397 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv396) + } else if z.HasExtensions() && z.DecExt(yyv405) { + } else if !yym406 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv405) } else { - z.DecFallback(yyv396, false) + z.DecFallback(yyv405, false) } } case "networkPluginName": @@ -3104,15 +3175,15 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.OutOfDiskTransitionFrequency = pkg1_unversioned.Duration{} } else { - yyv423 := &x.OutOfDiskTransitionFrequency - yym424 := z.DecBinary() - _ = yym424 + yyv432 := &x.OutOfDiskTransitionFrequency + yym433 := z.DecBinary() + _ = yym433 if false { - } else if z.HasExtensions() && z.DecExt(yyv423) { - } else if !yym424 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv423) + } else if z.HasExtensions() && z.DecExt(yyv432) { + } else if !yym433 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv432) } else { - z.DecFallback(yyv423, false) + z.DecFallback(yyv432, false) } } case "nodeIP": @@ -3125,12 +3196,12 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.NodeLabels = nil } else { - yyv426 := &x.NodeLabels - yym427 := z.DecBinary() - _ = yym427 + yyv435 := &x.NodeLabels + yym436 := z.DecBinary() + _ = yym436 if false { } else { - z.F.DecMapStringStringX(yyv426, false, d) + z.F.DecMapStringStringX(yyv435, false, d) } } case "nonMasqueradeCIDR": @@ -3146,9 +3217,9 @@ func (x *KubeletConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Decode x.EnableCustomMetrics = bool(r.DecodeBool()) } default: - z.DecStructFieldNotFound(-1, yys347) - } // end switch yys347 - } // end for yyj347 + z.DecStructFieldNotFound(-1, yys356) + } // end switch yys356 + } // end for yyj356 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -3156,16 +3227,16 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj430 int - var yyb430 bool - var yyhl430 bool = l >= 0 - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + var yyj439 int + var yyb439 bool + var yyhl439 bool = l >= 0 + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3175,13 +3246,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.Config = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3189,24 +3260,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.SyncFrequency = pkg1_unversioned.Duration{} } else { - yyv432 := &x.SyncFrequency - yym433 := z.DecBinary() - _ = yym433 + yyv441 := &x.SyncFrequency + yym442 := z.DecBinary() + _ = yym442 if false { - } else if z.HasExtensions() && z.DecExt(yyv432) { - } else if !yym433 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv432) + } else if z.HasExtensions() && z.DecExt(yyv441) { + } else if !yym442 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv441) } else { - z.DecFallback(yyv432, false) + z.DecFallback(yyv441, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3214,24 +3285,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.FileCheckFrequency = pkg1_unversioned.Duration{} } else { - yyv434 := &x.FileCheckFrequency - yym435 := z.DecBinary() - _ = yym435 + yyv443 := &x.FileCheckFrequency + yym444 := z.DecBinary() + _ = yym444 if false { - } else if z.HasExtensions() && z.DecExt(yyv434) { - } else if !yym435 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv434) + } else if z.HasExtensions() && z.DecExt(yyv443) { + } else if !yym444 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv443) } else { - z.DecFallback(yyv434, false) + z.DecFallback(yyv443, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3239,24 +3310,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.HTTPCheckFrequency = pkg1_unversioned.Duration{} } else { - yyv436 := &x.HTTPCheckFrequency - yym437 := z.DecBinary() - _ = yym437 + yyv445 := &x.HTTPCheckFrequency + yym446 := z.DecBinary() + _ = yym446 if false { - } else if z.HasExtensions() && z.DecExt(yyv436) { - } else if !yym437 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv436) + } else if z.HasExtensions() && z.DecExt(yyv445) { + } else if !yym446 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv445) } else { - z.DecFallback(yyv436, false) + z.DecFallback(yyv445, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3266,13 +3337,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ManifestURL = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3282,13 +3353,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ManifestURLHeader = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3298,13 +3369,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.EnableServer = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3314,13 +3385,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.Address = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3330,13 +3401,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.Port = uint(r.DecodeUint(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3346,13 +3417,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ReadOnlyPort = uint(r.DecodeUint(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3362,13 +3433,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.TLSCertFile = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3378,13 +3449,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.TLSPrivateKeyFile = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3394,13 +3465,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CertDirectory = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3410,13 +3481,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HostnameOverride = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3426,13 +3497,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.PodInfraContainerImage = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3442,13 +3513,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.DockerEndpoint = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3458,13 +3529,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RootDirectory = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3474,13 +3545,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.AllowPrivileged = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3490,13 +3561,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HostNetworkSources = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3506,13 +3577,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HostPIDSources = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3522,13 +3593,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HostIPCSources = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3538,13 +3609,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RegistryPullQPS = float64(r.DecodeFloat(false)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3554,13 +3625,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RegistryBurst = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3570,13 +3641,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.EventRecordQPS = float32(r.DecodeFloat(true)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3586,13 +3657,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.EventBurst = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3602,13 +3673,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.EnableDebuggingHandlers = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3616,24 +3687,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.MinimumGCAge = pkg1_unversioned.Duration{} } else { - yyv460 := &x.MinimumGCAge - yym461 := z.DecBinary() - _ = yym461 + yyv469 := &x.MinimumGCAge + yym470 := z.DecBinary() + _ = yym470 if false { - } else if z.HasExtensions() && z.DecExt(yyv460) { - } else if !yym461 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv460) + } else if z.HasExtensions() && z.DecExt(yyv469) { + } else if !yym470 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv469) } else { - z.DecFallback(yyv460, false) + z.DecFallback(yyv469, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3643,13 +3714,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.MaxPerPodContainerCount = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3659,13 +3730,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.MaxContainerCount = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3675,13 +3746,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CAdvisorPort = uint(r.DecodeUint(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3691,13 +3762,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HealthzPort = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3707,13 +3778,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.HealthzBindAddress = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3723,13 +3794,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.OOMScoreAdj = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3739,13 +3810,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RegisterNode = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3755,13 +3826,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ClusterDomain = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3771,13 +3842,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.MasterServiceNamespace = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3787,13 +3858,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ClusterDNS = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3801,24 +3872,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.StreamingConnectionIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv472 := &x.StreamingConnectionIdleTimeout - yym473 := z.DecBinary() - _ = yym473 + yyv481 := &x.StreamingConnectionIdleTimeout + yym482 := z.DecBinary() + _ = yym482 if false { - } else if z.HasExtensions() && z.DecExt(yyv472) { - } else if !yym473 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv472) + } else if z.HasExtensions() && z.DecExt(yyv481) { + } else if !yym482 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv481) } else { - z.DecFallback(yyv472, false) + z.DecFallback(yyv481, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3826,24 +3897,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.NodeStatusUpdateFrequency = pkg1_unversioned.Duration{} } else { - yyv474 := &x.NodeStatusUpdateFrequency - yym475 := z.DecBinary() - _ = yym475 + yyv483 := &x.NodeStatusUpdateFrequency + yym484 := z.DecBinary() + _ = yym484 if false { - } else if z.HasExtensions() && z.DecExt(yyv474) { - } else if !yym475 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv474) + } else if z.HasExtensions() && z.DecExt(yyv483) { + } else if !yym484 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv483) } else { - z.DecFallback(yyv474, false) + z.DecFallback(yyv483, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3853,13 +3924,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ImageGCHighThresholdPercent = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3869,13 +3940,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ImageGCLowThresholdPercent = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3885,13 +3956,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.LowDiskSpaceThresholdMB = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3899,24 +3970,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.VolumeStatsAggPeriod = pkg1_unversioned.Duration{} } else { - yyv479 := &x.VolumeStatsAggPeriod - yym480 := z.DecBinary() - _ = yym480 + yyv488 := &x.VolumeStatsAggPeriod + yym489 := z.DecBinary() + _ = yym489 if false { - } else if z.HasExtensions() && z.DecExt(yyv479) { - } else if !yym480 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv479) + } else if z.HasExtensions() && z.DecExt(yyv488) { + } else if !yym489 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv488) } else { - z.DecFallback(yyv479, false) + z.DecFallback(yyv488, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3926,13 +3997,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.NetworkPluginName = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3942,13 +4013,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.NetworkPluginDir = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3958,13 +4029,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.VolumePluginDir = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3974,13 +4045,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CloudProvider = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3990,13 +4061,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CloudConfigFile = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4006,13 +4077,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ResourceContainer = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4022,13 +4093,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CgroupRoot = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4038,13 +4109,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ContainerRuntime = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4054,13 +4125,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RktPath = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4070,13 +4141,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RktStage1Image = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4086,13 +4157,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.SystemContainer = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4102,13 +4173,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ConfigureCBR0 = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4118,13 +4189,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.MaxPods = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4134,13 +4205,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.DockerExecHandlerName = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4150,13 +4221,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.PodCIDR = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4166,13 +4237,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ResolverConfig = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4182,13 +4253,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.CPUCFSQuota = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4198,13 +4269,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.Containerized = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4214,13 +4285,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.MaxOpenFiles = uint64(r.DecodeUint(64)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4230,13 +4301,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ReconcileCIDR = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4246,13 +4317,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.RegisterSchedulable = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4262,13 +4333,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.KubeAPIQPS = float32(r.DecodeFloat(true)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4278,13 +4349,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.KubeAPIBurst = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4294,13 +4365,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.SerializeImagePulls = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4310,13 +4381,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.ExperimentalFlannelOverlay = bool(r.DecodeBool()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4324,24 +4395,24 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.OutOfDiskTransitionFrequency = pkg1_unversioned.Duration{} } else { - yyv506 := &x.OutOfDiskTransitionFrequency - yym507 := z.DecBinary() - _ = yym507 + yyv515 := &x.OutOfDiskTransitionFrequency + yym516 := z.DecBinary() + _ = yym516 if false { - } else if z.HasExtensions() && z.DecExt(yyv506) { - } else if !yym507 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv506) + } else if z.HasExtensions() && z.DecExt(yyv515) { + } else if !yym516 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv515) } else { - z.DecFallback(yyv506, false) + z.DecFallback(yyv515, false) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4351,13 +4422,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.NodeIP = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4365,21 +4436,21 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.NodeLabels = nil } else { - yyv509 := &x.NodeLabels - yym510 := z.DecBinary() - _ = yym510 + yyv518 := &x.NodeLabels + yym519 := z.DecBinary() + _ = yym519 if false { } else { - z.F.DecMapStringStringX(yyv509, false, d) + z.F.DecMapStringStringX(yyv518, false, d) } } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4389,13 +4460,13 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco } else { x.NonMasqueradeCIDR = string(r.DecodeString()) } - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4406,17 +4477,17 @@ func (x *KubeletConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.Deco x.EnableCustomMetrics = bool(r.DecodeBool()) } for { - yyj430++ - if yyhl430 { - yyb430 = yyj430 > l + yyj439++ + if yyhl439 { + yyb439 = yyj439 > l } else { - yyb430 = r.CheckBreak() + yyb439 = r.CheckBreak() } - if yyb430 { + if yyb439 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj430-1, "") + z.DecStructFieldNotFound(yyj439-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -4428,36 +4499,36 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x == nil { r.EncodeNil() } else { - yym513 := z.EncBinary() - _ = yym513 + yym522 := z.EncBinary() + _ = yym522 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { - yysep514 := !z.EncBinary() - yy2arr514 := z.EncBasicHandle().StructToArray - var yyq514 [11]bool - _, _, _ = yysep514, yyq514, yy2arr514 - const yyr514 bool = false - yyq514[0] = x.Kind != "" - yyq514[1] = x.APIVersion != "" - var yynn514 int - if yyr514 || yy2arr514 { + yysep523 := !z.EncBinary() + yy2arr523 := z.EncBasicHandle().StructToArray + var yyq523 [11]bool + _, _, _ = yysep523, yyq523, yy2arr523 + const yyr523 bool = false + yyq523[0] = x.Kind != "" + yyq523[1] = x.APIVersion != "" + var yynn523 int + if yyr523 || yy2arr523 { r.EncodeArrayStart(11) } else { - yynn514 = 9 - for _, b := range yyq514 { + yynn523 = 9 + for _, b := range yyq523 { if b { - yynn514++ + yynn523++ } } - r.EncodeMapStart(yynn514) - yynn514 = 0 + r.EncodeMapStart(yynn523) + yynn523 = 0 } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq514[0] { - yym516 := z.EncBinary() - _ = yym516 + if yyq523[0] { + yym525 := z.EncBinary() + _ = yym525 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) @@ -4466,23 +4537,23 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq514[0] { + if yyq523[0] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kind")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym517 := z.EncBinary() - _ = yym517 + yym526 := z.EncBinary() + _ = yym526 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) } } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq514[1] { - yym519 := z.EncBinary() - _ = yym519 + if yyq523[1] { + yym528 := z.EncBinary() + _ = yym528 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) @@ -4491,22 +4562,22 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq514[1] { + if yyq523[1] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym520 := z.EncBinary() - _ = yym520 + yym529 := z.EncBinary() + _ = yym529 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) } } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym522 := z.EncBinary() - _ = yym522 + yym531 := z.EncBinary() + _ = yym531 if false { } else { r.EncodeInt(int64(x.Port)) @@ -4515,17 +4586,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("port")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym523 := z.EncBinary() - _ = yym523 + yym532 := z.EncBinary() + _ = yym532 if false { } else { r.EncodeInt(int64(x.Port)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym525 := z.EncBinary() - _ = yym525 + yym534 := z.EncBinary() + _ = yym534 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) @@ -4534,17 +4605,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("address")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym526 := z.EncBinary() - _ = yym526 + yym535 := z.EncBinary() + _ = yym535 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym528 := z.EncBinary() - _ = yym528 + yym537 := z.EncBinary() + _ = yym537 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.AlgorithmProvider)) @@ -4553,17 +4624,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("algorithmProvider")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym529 := z.EncBinary() - _ = yym529 + yym538 := z.EncBinary() + _ = yym538 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.AlgorithmProvider)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym531 := z.EncBinary() - _ = yym531 + yym540 := z.EncBinary() + _ = yym540 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PolicyConfigFile)) @@ -4572,17 +4643,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("policyConfigFile")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym532 := z.EncBinary() - _ = yym532 + yym541 := z.EncBinary() + _ = yym541 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PolicyConfigFile)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym534 := z.EncBinary() - _ = yym534 + yym543 := z.EncBinary() + _ = yym543 if false { } else { r.EncodeBool(bool(x.EnableProfiling)) @@ -4591,17 +4662,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("enableProfiling")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym535 := z.EncBinary() - _ = yym535 + yym544 := z.EncBinary() + _ = yym544 if false { } else { r.EncodeBool(bool(x.EnableProfiling)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym537 := z.EncBinary() - _ = yym537 + yym546 := z.EncBinary() + _ = yym546 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) @@ -4610,17 +4681,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIQPS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym538 := z.EncBinary() - _ = yym538 + yym547 := z.EncBinary() + _ = yym547 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym540 := z.EncBinary() - _ = yym540 + yym549 := z.EncBinary() + _ = yym549 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) @@ -4629,17 +4700,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIBurst")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym541 := z.EncBinary() - _ = yym541 + yym550 := z.EncBinary() + _ = yym550 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym543 := z.EncBinary() - _ = yym543 + yym552 := z.EncBinary() + _ = yym552 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SchedulerName)) @@ -4648,25 +4719,25 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("schedulerName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym544 := z.EncBinary() - _ = yym544 + yym553 := z.EncBinary() + _ = yym553 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SchedulerName)) } } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy546 := &x.LeaderElection - yy546.CodecEncodeSelf(e) + yy555 := &x.LeaderElection + yy555.CodecEncodeSelf(e) } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("leaderElection")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy547 := &x.LeaderElection - yy547.CodecEncodeSelf(e) + yy556 := &x.LeaderElection + yy556.CodecEncodeSelf(e) } - if yyr514 || yy2arr514 { + if yyr523 || yy2arr523 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { z.EncSendContainerState(codecSelfer_containerMapEnd1234) @@ -4679,25 +4750,25 @@ func (x *KubeSchedulerConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym548 := z.DecBinary() - _ = yym548 + yym557 := z.DecBinary() + _ = yym557 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct549 := r.ContainerType() - if yyct549 == codecSelferValueTypeMap1234 { - yyl549 := r.ReadMapStart() - if yyl549 == 0 { + yyct558 := r.ContainerType() + if yyct558 == codecSelferValueTypeMap1234 { + yyl558 := r.ReadMapStart() + if yyl558 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl549, d) + x.codecDecodeSelfFromMap(yyl558, d) } - } else if yyct549 == codecSelferValueTypeArray1234 { - yyl549 := r.ReadArrayStart() - if yyl549 == 0 { + } else if yyct558 == codecSelferValueTypeArray1234 { + yyl558 := r.ReadArrayStart() + if yyl558 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl549, d) + x.codecDecodeSelfFromArray(yyl558, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -4709,12 +4780,12 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys550Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys550Slc - var yyhl550 bool = l >= 0 - for yyj550 := 0; ; yyj550++ { - if yyhl550 { - if yyj550 >= l { + var yys559Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys559Slc + var yyhl559 bool = l >= 0 + for yyj559 := 0; ; yyj559++ { + if yyhl559 { + if yyj559 >= l { break } } else { @@ -4723,10 +4794,10 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys550Slc = r.DecodeBytes(yys550Slc, true, true) - yys550 := string(yys550Slc) + yys559Slc = r.DecodeBytes(yys559Slc, true, true) + yys559 := string(yys559Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys550 { + switch yys559 { case "kind": if r.TryDecodeAsNil() { x.Kind = "" @@ -4791,13 +4862,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. if r.TryDecodeAsNil() { x.LeaderElection = LeaderElectionConfiguration{} } else { - yyv561 := &x.LeaderElection - yyv561.CodecDecodeSelf(d) + yyv570 := &x.LeaderElection + yyv570.CodecDecodeSelf(d) } default: - z.DecStructFieldNotFound(-1, yys550) - } // end switch yys550 - } // end for yyj550 + z.DecStructFieldNotFound(-1, yys559) + } // end switch yys559 + } // end for yyj559 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -4805,16 +4876,16 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj562 int - var yyb562 bool - var yyhl562 bool = l >= 0 - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + var yyj571 int + var yyb571 bool + var yyhl571 bool = l >= 0 + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4824,13 +4895,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Kind = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4840,13 +4911,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.APIVersion = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4856,13 +4927,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Port = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4872,13 +4943,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Address = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4888,13 +4959,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.AlgorithmProvider = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4904,13 +4975,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.PolicyConfigFile = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4920,13 +4991,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.EnableProfiling = bool(r.DecodeBool()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4936,13 +5007,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.KubeAPIQPS = float32(r.DecodeFloat(true)) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4952,13 +5023,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.KubeAPIBurst = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4968,13 +5039,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.SchedulerName = string(r.DecodeString()) } - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4982,21 +5053,21 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 if r.TryDecodeAsNil() { x.LeaderElection = LeaderElectionConfiguration{} } else { - yyv573 := &x.LeaderElection - yyv573.CodecDecodeSelf(d) + yyv582 := &x.LeaderElection + yyv582.CodecDecodeSelf(d) } for { - yyj562++ - if yyhl562 { - yyb562 = yyj562 > l + yyj571++ + if yyhl571 { + yyb571 = yyj571 > l } else { - yyb562 = r.CheckBreak() + yyb571 = r.CheckBreak() } - if yyb562 { + if yyb571 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj562-1, "") + z.DecStructFieldNotFound(yyj571-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -5008,33 +5079,33 @@ func (x *LeaderElectionConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x == nil { r.EncodeNil() } else { - yym574 := z.EncBinary() - _ = yym574 + yym583 := z.EncBinary() + _ = yym583 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { - yysep575 := !z.EncBinary() - yy2arr575 := z.EncBasicHandle().StructToArray - var yyq575 [4]bool - _, _, _ = yysep575, yyq575, yy2arr575 - const yyr575 bool = false - var yynn575 int - if yyr575 || yy2arr575 { + yysep584 := !z.EncBinary() + yy2arr584 := z.EncBasicHandle().StructToArray + var yyq584 [4]bool + _, _, _ = yysep584, yyq584, yy2arr584 + const yyr584 bool = false + var yynn584 int + if yyr584 || yy2arr584 { r.EncodeArrayStart(4) } else { - yynn575 = 4 - for _, b := range yyq575 { + yynn584 = 4 + for _, b := range yyq584 { if b { - yynn575++ + yynn584++ } } - r.EncodeMapStart(yynn575) - yynn575 = 0 + r.EncodeMapStart(yynn584) + yynn584 = 0 } - if yyr575 || yy2arr575 { + if yyr584 || yy2arr584 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym577 := z.EncBinary() - _ = yym577 + yym586 := z.EncBinary() + _ = yym586 if false { } else { r.EncodeBool(bool(x.LeaderElect)) @@ -5043,95 +5114,95 @@ func (x *LeaderElectionConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("leaderElect")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym578 := z.EncBinary() - _ = yym578 + yym587 := z.EncBinary() + _ = yym587 if false { } else { r.EncodeBool(bool(x.LeaderElect)) } } - if yyr575 || yy2arr575 { + if yyr584 || yy2arr584 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy580 := &x.LeaseDuration - yym581 := z.EncBinary() - _ = yym581 + yy589 := &x.LeaseDuration + yym590 := z.EncBinary() + _ = yym590 if false { - } else if z.HasExtensions() && z.EncExt(yy580) { - } else if !yym581 && z.IsJSONHandle() { - z.EncJSONMarshal(yy580) + } else if z.HasExtensions() && z.EncExt(yy589) { + } else if !yym590 && z.IsJSONHandle() { + z.EncJSONMarshal(yy589) } else { - z.EncFallback(yy580) + z.EncFallback(yy589) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("leaseDuration")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy582 := &x.LeaseDuration - yym583 := z.EncBinary() - _ = yym583 + yy591 := &x.LeaseDuration + yym592 := z.EncBinary() + _ = yym592 if false { - } else if z.HasExtensions() && z.EncExt(yy582) { - } else if !yym583 && z.IsJSONHandle() { - z.EncJSONMarshal(yy582) + } else if z.HasExtensions() && z.EncExt(yy591) { + } else if !yym592 && z.IsJSONHandle() { + z.EncJSONMarshal(yy591) } else { - z.EncFallback(yy582) + z.EncFallback(yy591) } } - if yyr575 || yy2arr575 { + if yyr584 || yy2arr584 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy585 := &x.RenewDeadline - yym586 := z.EncBinary() - _ = yym586 + yy594 := &x.RenewDeadline + yym595 := z.EncBinary() + _ = yym595 if false { - } else if z.HasExtensions() && z.EncExt(yy585) { - } else if !yym586 && z.IsJSONHandle() { - z.EncJSONMarshal(yy585) + } else if z.HasExtensions() && z.EncExt(yy594) { + } else if !yym595 && z.IsJSONHandle() { + z.EncJSONMarshal(yy594) } else { - z.EncFallback(yy585) + z.EncFallback(yy594) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("renewDeadline")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy587 := &x.RenewDeadline - yym588 := z.EncBinary() - _ = yym588 + yy596 := &x.RenewDeadline + yym597 := z.EncBinary() + _ = yym597 if false { - } else if z.HasExtensions() && z.EncExt(yy587) { - } else if !yym588 && z.IsJSONHandle() { - z.EncJSONMarshal(yy587) + } else if z.HasExtensions() && z.EncExt(yy596) { + } else if !yym597 && z.IsJSONHandle() { + z.EncJSONMarshal(yy596) } else { - z.EncFallback(yy587) + z.EncFallback(yy596) } } - if yyr575 || yy2arr575 { + if yyr584 || yy2arr584 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy590 := &x.RetryPeriod - yym591 := z.EncBinary() - _ = yym591 + yy599 := &x.RetryPeriod + yym600 := z.EncBinary() + _ = yym600 if false { - } else if z.HasExtensions() && z.EncExt(yy590) { - } else if !yym591 && z.IsJSONHandle() { - z.EncJSONMarshal(yy590) + } else if z.HasExtensions() && z.EncExt(yy599) { + } else if !yym600 && z.IsJSONHandle() { + z.EncJSONMarshal(yy599) } else { - z.EncFallback(yy590) + z.EncFallback(yy599) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("retryPeriod")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy592 := &x.RetryPeriod - yym593 := z.EncBinary() - _ = yym593 + yy601 := &x.RetryPeriod + yym602 := z.EncBinary() + _ = yym602 if false { - } else if z.HasExtensions() && z.EncExt(yy592) { - } else if !yym593 && z.IsJSONHandle() { - z.EncJSONMarshal(yy592) + } else if z.HasExtensions() && z.EncExt(yy601) { + } else if !yym602 && z.IsJSONHandle() { + z.EncJSONMarshal(yy601) } else { - z.EncFallback(yy592) + z.EncFallback(yy601) } } - if yyr575 || yy2arr575 { + if yyr584 || yy2arr584 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { z.EncSendContainerState(codecSelfer_containerMapEnd1234) @@ -5144,25 +5215,25 @@ func (x *LeaderElectionConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym594 := z.DecBinary() - _ = yym594 + yym603 := z.DecBinary() + _ = yym603 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct595 := r.ContainerType() - if yyct595 == codecSelferValueTypeMap1234 { - yyl595 := r.ReadMapStart() - if yyl595 == 0 { + yyct604 := r.ContainerType() + if yyct604 == codecSelferValueTypeMap1234 { + yyl604 := r.ReadMapStart() + if yyl604 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl595, d) + x.codecDecodeSelfFromMap(yyl604, d) } - } else if yyct595 == codecSelferValueTypeArray1234 { - yyl595 := r.ReadArrayStart() - if yyl595 == 0 { + } else if yyct604 == codecSelferValueTypeArray1234 { + yyl604 := r.ReadArrayStart() + if yyl604 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl595, d) + x.codecDecodeSelfFromArray(yyl604, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -5174,12 +5245,12 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys596Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys596Slc - var yyhl596 bool = l >= 0 - for yyj596 := 0; ; yyj596++ { - if yyhl596 { - if yyj596 >= l { + var yys605Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys605Slc + var yyhl605 bool = l >= 0 + for yyj605 := 0; ; yyj605++ { + if yyhl605 { + if yyj605 >= l { break } } else { @@ -5188,10 +5259,10 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys596Slc = r.DecodeBytes(yys596Slc, true, true) - yys596 := string(yys596Slc) + yys605Slc = r.DecodeBytes(yys605Slc, true, true) + yys605 := string(yys605Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys596 { + switch yys605 { case "leaderElect": if r.TryDecodeAsNil() { x.LeaderElect = false @@ -5202,51 +5273,51 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 if r.TryDecodeAsNil() { x.LeaseDuration = pkg1_unversioned.Duration{} } else { - yyv598 := &x.LeaseDuration - yym599 := z.DecBinary() - _ = yym599 + yyv607 := &x.LeaseDuration + yym608 := z.DecBinary() + _ = yym608 if false { - } else if z.HasExtensions() && z.DecExt(yyv598) { - } else if !yym599 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv598) + } else if z.HasExtensions() && z.DecExt(yyv607) { + } else if !yym608 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv607) } else { - z.DecFallback(yyv598, false) + z.DecFallback(yyv607, false) } } case "renewDeadline": if r.TryDecodeAsNil() { x.RenewDeadline = pkg1_unversioned.Duration{} } else { - yyv600 := &x.RenewDeadline - yym601 := z.DecBinary() - _ = yym601 + yyv609 := &x.RenewDeadline + yym610 := z.DecBinary() + _ = yym610 if false { - } else if z.HasExtensions() && z.DecExt(yyv600) { - } else if !yym601 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv600) + } else if z.HasExtensions() && z.DecExt(yyv609) { + } else if !yym610 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv609) } else { - z.DecFallback(yyv600, false) + z.DecFallback(yyv609, false) } } case "retryPeriod": if r.TryDecodeAsNil() { x.RetryPeriod = pkg1_unversioned.Duration{} } else { - yyv602 := &x.RetryPeriod - yym603 := z.DecBinary() - _ = yym603 + yyv611 := &x.RetryPeriod + yym612 := z.DecBinary() + _ = yym612 if false { - } else if z.HasExtensions() && z.DecExt(yyv602) { - } else if !yym603 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv602) + } else if z.HasExtensions() && z.DecExt(yyv611) { + } else if !yym612 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv611) } else { - z.DecFallback(yyv602, false) + z.DecFallback(yyv611, false) } } default: - z.DecStructFieldNotFound(-1, yys596) - } // end switch yys596 - } // end for yyj596 + z.DecStructFieldNotFound(-1, yys605) + } // end switch yys605 + } // end for yyj605 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -5254,16 +5325,16 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj604 int - var yyb604 bool - var yyhl604 bool = l >= 0 - yyj604++ - if yyhl604 { - yyb604 = yyj604 > l + var yyj613 int + var yyb613 bool + var yyhl613 bool = l >= 0 + yyj613++ + if yyhl613 { + yyb613 = yyj613 > l } else { - yyb604 = r.CheckBreak() + yyb613 = r.CheckBreak() } - if yyb604 { + if yyb613 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5273,13 +5344,13 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 } else { x.LeaderElect = bool(r.DecodeBool()) } - yyj604++ - if yyhl604 { - yyb604 = yyj604 > l + yyj613++ + if yyhl613 { + yyb613 = yyj613 > l } else { - yyb604 = r.CheckBreak() + yyb613 = r.CheckBreak() } - if yyb604 { + if yyb613 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5287,24 +5358,24 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.LeaseDuration = pkg1_unversioned.Duration{} } else { - yyv606 := &x.LeaseDuration - yym607 := z.DecBinary() - _ = yym607 + yyv615 := &x.LeaseDuration + yym616 := z.DecBinary() + _ = yym616 if false { - } else if z.HasExtensions() && z.DecExt(yyv606) { - } else if !yym607 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv606) + } else if z.HasExtensions() && z.DecExt(yyv615) { + } else if !yym616 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv615) } else { - z.DecFallback(yyv606, false) + z.DecFallback(yyv615, false) } } - yyj604++ - if yyhl604 { - yyb604 = yyj604 > l + yyj613++ + if yyhl613 { + yyb613 = yyj613 > l } else { - yyb604 = r.CheckBreak() + yyb613 = r.CheckBreak() } - if yyb604 { + if yyb613 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5312,24 +5383,24 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.RenewDeadline = pkg1_unversioned.Duration{} } else { - yyv608 := &x.RenewDeadline - yym609 := z.DecBinary() - _ = yym609 + yyv617 := &x.RenewDeadline + yym618 := z.DecBinary() + _ = yym618 if false { - } else if z.HasExtensions() && z.DecExt(yyv608) { - } else if !yym609 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv608) + } else if z.HasExtensions() && z.DecExt(yyv617) { + } else if !yym618 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv617) } else { - z.DecFallback(yyv608, false) + z.DecFallback(yyv617, false) } } - yyj604++ - if yyhl604 { - yyb604 = yyj604 > l + yyj613++ + if yyhl613 { + yyb613 = yyj613 > l } else { - yyb604 = r.CheckBreak() + yyb613 = r.CheckBreak() } - if yyb604 { + if yyb613 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5337,29 +5408,29 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.RetryPeriod = pkg1_unversioned.Duration{} } else { - yyv610 := &x.RetryPeriod - yym611 := z.DecBinary() - _ = yym611 + yyv619 := &x.RetryPeriod + yym620 := z.DecBinary() + _ = yym620 if false { - } else if z.HasExtensions() && z.DecExt(yyv610) { - } else if !yym611 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv610) + } else if z.HasExtensions() && z.DecExt(yyv619) { + } else if !yym620 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv619) } else { - z.DecFallback(yyv610, false) + z.DecFallback(yyv619, false) } } for { - yyj604++ - if yyhl604 { - yyb604 = yyj604 > l + yyj613++ + if yyhl613 { + yyb613 = yyj613 > l } else { - yyb604 = r.CheckBreak() + yyb613 = r.CheckBreak() } - if yyb604 { + if yyb613 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj604-1, "") + z.DecStructFieldNotFound(yyj613-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } diff --git a/pkg/apis/componentconfig/types.go b/pkg/apis/componentconfig/types.go index e7cb029627c..2d70b04f695 100644 --- a/pkg/apis/componentconfig/types.go +++ b/pkg/apis/componentconfig/types.go @@ -31,6 +31,9 @@ type KubeProxyConfiguration struct { HealthzPort int `json:"healthzPort"` // hostnameOverride, if non-empty, will be used as the identity instead of the actual hostname. HostnameOverride string `json:"hostnameOverride"` + // iptablesMasqueradeBit is the bit of the iptables fwmark space to use for SNAT if using + // the pure iptables proxy mode. Values must be within the range [0, 31]. + IPTablesMasqueradeBit *int `json:"iptablesMasqueradeBit"` // iptablesSyncPeriod is the period that iptables rules are refreshed (e.g. '5s', '1m', // '2h22m'). Must be greater than 0. IPTablesSyncPeriod unversioned.Duration `json:"iptablesSyncPeriodSeconds"` diff --git a/pkg/apis/componentconfig/v1alpha1/conversion_generated.go b/pkg/apis/componentconfig/v1alpha1/conversion_generated.go index c11acb52ef6..b4bff5c816d 100644 --- a/pkg/apis/componentconfig/v1alpha1/conversion_generated.go +++ b/pkg/apis/componentconfig/v1alpha1/conversion_generated.go @@ -37,6 +37,12 @@ func autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyCon out.HealthzBindAddress = in.HealthzBindAddress out.HealthzPort = int32(in.HealthzPort) out.HostnameOverride = in.HostnameOverride + if in.IPTablesMasqueradeBit != nil { + out.IPTablesMasqueradeBit = new(int32) + *out.IPTablesMasqueradeBit = int32(*in.IPTablesMasqueradeBit) + } else { + out.IPTablesMasqueradeBit = nil + } if err := s.Convert(&in.IPTablesSyncPeriod, &out.IPTablesSyncPeriod, 0); err != nil { return err } @@ -127,6 +133,12 @@ func autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyCon out.HealthzBindAddress = in.HealthzBindAddress out.HealthzPort = int(in.HealthzPort) out.HostnameOverride = in.HostnameOverride + if in.IPTablesMasqueradeBit != nil { + out.IPTablesMasqueradeBit = new(int) + *out.IPTablesMasqueradeBit = int(*in.IPTablesMasqueradeBit) + } else { + out.IPTablesMasqueradeBit = nil + } if err := s.Convert(&in.IPTablesSyncPeriod, &out.IPTablesSyncPeriod, 0); err != nil { return err } diff --git a/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go b/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go index 0012e90414e..92849134260 100644 --- a/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go +++ b/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go @@ -43,6 +43,12 @@ func deepCopy_v1alpha1_KubeProxyConfiguration(in KubeProxyConfiguration, out *Ku out.HealthzBindAddress = in.HealthzBindAddress out.HealthzPort = in.HealthzPort out.HostnameOverride = in.HostnameOverride + if in.IPTablesMasqueradeBit != nil { + out.IPTablesMasqueradeBit = new(int32) + *out.IPTablesMasqueradeBit = *in.IPTablesMasqueradeBit + } else { + out.IPTablesMasqueradeBit = nil + } if err := deepCopy_unversioned_Duration(in.IPTablesSyncPeriod, &out.IPTablesSyncPeriod, c); err != nil { return err } diff --git a/pkg/apis/componentconfig/v1alpha1/defaults.go b/pkg/apis/componentconfig/v1alpha1/defaults.go index 26eef1d47b6..af35c7d3884 100644 --- a/pkg/apis/componentconfig/v1alpha1/defaults.go +++ b/pkg/apis/componentconfig/v1alpha1/defaults.go @@ -55,6 +55,10 @@ func addDefaultingFuncs(scheme *runtime.Scheme) { if obj.ConntrackMax == 0 { obj.ConntrackMax = 256 * 1024 // 4x default (64k) } + if obj.IPTablesMasqueradeBit == nil { + temp := int32(14) + obj.IPTablesMasqueradeBit = &temp + } if obj.ConntrackTCPEstablishedTimeout == zero { obj.ConntrackTCPEstablishedTimeout = unversioned.Duration{Duration: 24 * time.Hour} // 1 day (1/5 default) } diff --git a/pkg/apis/componentconfig/v1alpha1/types.generated.go b/pkg/apis/componentconfig/v1alpha1/types.generated.go index 1326d7526be..b4a54592f60 100644 --- a/pkg/apis/componentconfig/v1alpha1/types.generated.go +++ b/pkg/apis/componentconfig/v1alpha1/types.generated.go @@ -81,16 +81,16 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [17]bool + var yyq2 [18]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Kind != "" yyq2[1] = x.APIVersion != "" var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(17) + r.EncodeArrayStart(18) } else { - yynn2 = 15 + yynn2 = 16 for _, b := range yyq2 { if b { yynn2++ @@ -227,35 +227,64 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy22 := &x.IPTablesSyncPeriod - yym23 := z.EncBinary() - _ = yym23 - if false { - } else if z.HasExtensions() && z.EncExt(yy22) { - } else if !yym23 && z.IsJSONHandle() { - z.EncJSONMarshal(yy22) + if x.IPTablesMasqueradeBit == nil { + r.EncodeNil() } else { - z.EncFallback(yy22) + yy22 := *x.IPTablesMasqueradeBit + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeInt(int64(yy22)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iptablesMasqueradeBit")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.IPTablesMasqueradeBit == nil { + r.EncodeNil() + } else { + yy24 := *x.IPTablesMasqueradeBit + yym25 := z.EncBinary() + _ = yym25 + if false { + } else { + r.EncodeInt(int64(yy24)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy27 := &x.IPTablesSyncPeriod + yym28 := z.EncBinary() + _ = yym28 + if false { + } else if z.HasExtensions() && z.EncExt(yy27) { + } else if !yym28 && z.IsJSONHandle() { + z.EncJSONMarshal(yy27) + } else { + z.EncFallback(yy27) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("iptablesSyncPeriodSeconds")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy24 := &x.IPTablesSyncPeriod - yym25 := z.EncBinary() - _ = yym25 + yy29 := &x.IPTablesSyncPeriod + yym30 := z.EncBinary() + _ = yym30 if false { - } else if z.HasExtensions() && z.EncExt(yy24) { - } else if !yym25 && z.IsJSONHandle() { - z.EncJSONMarshal(yy24) + } else if z.HasExtensions() && z.EncExt(yy29) { + } else if !yym30 && z.IsJSONHandle() { + z.EncJSONMarshal(yy29) } else { - z.EncFallback(yy24) + z.EncFallback(yy29) } } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym27 := z.EncBinary() - _ = yym27 + yym32 := z.EncBinary() + _ = yym32 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.KubeconfigPath)) @@ -264,8 +293,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeconfigPath")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym28 := z.EncBinary() - _ = yym28 + yym33 := z.EncBinary() + _ = yym33 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.KubeconfigPath)) @@ -273,8 +302,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym30 := z.EncBinary() - _ = yym30 + yym35 := z.EncBinary() + _ = yym35 if false { } else { r.EncodeBool(bool(x.MasqueradeAll)) @@ -283,8 +312,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("masqueradeAll")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym31 := z.EncBinary() - _ = yym31 + yym36 := z.EncBinary() + _ = yym36 if false { } else { r.EncodeBool(bool(x.MasqueradeAll)) @@ -292,8 +321,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym33 := z.EncBinary() - _ = yym33 + yym38 := z.EncBinary() + _ = yym38 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Master)) @@ -302,8 +331,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("master")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym34 := z.EncBinary() - _ = yym34 + yym39 := z.EncBinary() + _ = yym39 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Master)) @@ -314,12 +343,12 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.OOMScoreAdj == nil { r.EncodeNil() } else { - yy36 := *x.OOMScoreAdj - yym37 := z.EncBinary() - _ = yym37 + yy41 := *x.OOMScoreAdj + yym42 := z.EncBinary() + _ = yym42 if false { } else { - r.EncodeInt(int64(yy36)) + r.EncodeInt(int64(yy41)) } } } else { @@ -329,12 +358,12 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.OOMScoreAdj == nil { r.EncodeNil() } else { - yy38 := *x.OOMScoreAdj - yym39 := z.EncBinary() - _ = yym39 + yy43 := *x.OOMScoreAdj + yym44 := z.EncBinary() + _ = yym44 if false { } else { - r.EncodeInt(int64(yy38)) + r.EncodeInt(int64(yy43)) } } } @@ -349,8 +378,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym42 := z.EncBinary() - _ = yym42 + yym47 := z.EncBinary() + _ = yym47 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PortRange)) @@ -359,8 +388,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("portRange")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym43 := z.EncBinary() - _ = yym43 + yym48 := z.EncBinary() + _ = yym48 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PortRange)) @@ -368,8 +397,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym45 := z.EncBinary() - _ = yym45 + yym50 := z.EncBinary() + _ = yym50 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) @@ -378,8 +407,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("resourceContainer")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym46 := z.EncBinary() - _ = yym46 + yym51 := z.EncBinary() + _ = yym51 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.ResourceContainer)) @@ -387,35 +416,35 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy48 := &x.UDPIdleTimeout - yym49 := z.EncBinary() - _ = yym49 + yy53 := &x.UDPIdleTimeout + yym54 := z.EncBinary() + _ = yym54 if false { - } else if z.HasExtensions() && z.EncExt(yy48) { - } else if !yym49 && z.IsJSONHandle() { - z.EncJSONMarshal(yy48) + } else if z.HasExtensions() && z.EncExt(yy53) { + } else if !yym54 && z.IsJSONHandle() { + z.EncJSONMarshal(yy53) } else { - z.EncFallback(yy48) + z.EncFallback(yy53) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("udpTimeoutMilliseconds")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy50 := &x.UDPIdleTimeout - yym51 := z.EncBinary() - _ = yym51 + yy55 := &x.UDPIdleTimeout + yym56 := z.EncBinary() + _ = yym56 if false { - } else if z.HasExtensions() && z.EncExt(yy50) { - } else if !yym51 && z.IsJSONHandle() { - z.EncJSONMarshal(yy50) + } else if z.HasExtensions() && z.EncExt(yy55) { + } else if !yym56 && z.IsJSONHandle() { + z.EncJSONMarshal(yy55) } else { - z.EncFallback(yy50) + z.EncFallback(yy55) } } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym53 := z.EncBinary() - _ = yym53 + yym58 := z.EncBinary() + _ = yym58 if false { } else { r.EncodeInt(int64(x.ConntrackMax)) @@ -424,8 +453,8 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("conntrackMax")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym54 := z.EncBinary() - _ = yym54 + yym59 := z.EncBinary() + _ = yym59 if false { } else { r.EncodeInt(int64(x.ConntrackMax)) @@ -433,29 +462,29 @@ func (x *KubeProxyConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy56 := &x.ConntrackTCPEstablishedTimeout - yym57 := z.EncBinary() - _ = yym57 + yy61 := &x.ConntrackTCPEstablishedTimeout + yym62 := z.EncBinary() + _ = yym62 if false { - } else if z.HasExtensions() && z.EncExt(yy56) { - } else if !yym57 && z.IsJSONHandle() { - z.EncJSONMarshal(yy56) + } else if z.HasExtensions() && z.EncExt(yy61) { + } else if !yym62 && z.IsJSONHandle() { + z.EncJSONMarshal(yy61) } else { - z.EncFallback(yy56) + z.EncFallback(yy61) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("conntrackTCPEstablishedTimeout")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy58 := &x.ConntrackTCPEstablishedTimeout - yym59 := z.EncBinary() - _ = yym59 + yy63 := &x.ConntrackTCPEstablishedTimeout + yym64 := z.EncBinary() + _ = yym64 if false { - } else if z.HasExtensions() && z.EncExt(yy58) { - } else if !yym59 && z.IsJSONHandle() { - z.EncJSONMarshal(yy58) + } else if z.HasExtensions() && z.EncExt(yy63) { + } else if !yym64 && z.IsJSONHandle() { + z.EncJSONMarshal(yy63) } else { - z.EncFallback(yy58) + z.EncFallback(yy63) } } if yyr2 || yy2arr2 { @@ -471,25 +500,25 @@ func (x *KubeProxyConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym60 := z.DecBinary() - _ = yym60 + yym65 := z.DecBinary() + _ = yym65 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct61 := r.ContainerType() - if yyct61 == codecSelferValueTypeMap1234 { - yyl61 := r.ReadMapStart() - if yyl61 == 0 { + yyct66 := r.ContainerType() + if yyct66 == codecSelferValueTypeMap1234 { + yyl66 := r.ReadMapStart() + if yyl66 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl61, d) + x.codecDecodeSelfFromMap(yyl66, d) } - } else if yyct61 == codecSelferValueTypeArray1234 { - yyl61 := r.ReadArrayStart() - if yyl61 == 0 { + } else if yyct66 == codecSelferValueTypeArray1234 { + yyl66 := r.ReadArrayStart() + if yyl66 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl61, d) + x.codecDecodeSelfFromArray(yyl66, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -501,12 +530,12 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys62Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys62Slc - var yyhl62 bool = l >= 0 - for yyj62 := 0; ; yyj62++ { - if yyhl62 { - if yyj62 >= l { + var yys67Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys67Slc + var yyhl67 bool = l >= 0 + for yyj67 := 0; ; yyj67++ { + if yyhl67 { + if yyj67 >= l { break } } else { @@ -515,10 +544,10 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys62Slc = r.DecodeBytes(yys62Slc, true, true) - yys62 := string(yys62Slc) + yys67Slc = r.DecodeBytes(yys67Slc, true, true) + yys67 := string(yys67Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys62 { + switch yys67 { case "kind": if r.TryDecodeAsNil() { x.Kind = "" @@ -555,19 +584,35 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco } else { x.HostnameOverride = string(r.DecodeString()) } + case "iptablesMasqueradeBit": + if r.TryDecodeAsNil() { + if x.IPTablesMasqueradeBit != nil { + x.IPTablesMasqueradeBit = nil + } + } else { + if x.IPTablesMasqueradeBit == nil { + x.IPTablesMasqueradeBit = new(int32) + } + yym75 := z.DecBinary() + _ = yym75 + if false { + } else { + *((*int32)(x.IPTablesMasqueradeBit)) = int32(r.DecodeInt(32)) + } + } case "iptablesSyncPeriodSeconds": if r.TryDecodeAsNil() { x.IPTablesSyncPeriod = pkg1_unversioned.Duration{} } else { - yyv69 := &x.IPTablesSyncPeriod - yym70 := z.DecBinary() - _ = yym70 + yyv76 := &x.IPTablesSyncPeriod + yym77 := z.DecBinary() + _ = yym77 if false { - } else if z.HasExtensions() && z.DecExt(yyv69) { - } else if !yym70 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv69) + } else if z.HasExtensions() && z.DecExt(yyv76) { + } else if !yym77 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv76) } else { - z.DecFallback(yyv69, false) + z.DecFallback(yyv76, false) } } case "kubeconfigPath": @@ -597,8 +642,8 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if x.OOMScoreAdj == nil { x.OOMScoreAdj = new(int32) } - yym75 := z.DecBinary() - _ = yym75 + yym82 := z.DecBinary() + _ = yym82 if false { } else { *((*int32)(x.OOMScoreAdj)) = int32(r.DecodeInt(32)) @@ -626,15 +671,15 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.UDPIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv79 := &x.UDPIdleTimeout - yym80 := z.DecBinary() - _ = yym80 + yyv86 := &x.UDPIdleTimeout + yym87 := z.DecBinary() + _ = yym87 if false { - } else if z.HasExtensions() && z.DecExt(yyv79) { - } else if !yym80 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv79) + } else if z.HasExtensions() && z.DecExt(yyv86) { + } else if !yym87 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv86) } else { - z.DecFallback(yyv79, false) + z.DecFallback(yyv86, false) } } case "conntrackMax": @@ -647,21 +692,21 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromMap(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.ConntrackTCPEstablishedTimeout = pkg1_unversioned.Duration{} } else { - yyv82 := &x.ConntrackTCPEstablishedTimeout - yym83 := z.DecBinary() - _ = yym83 + yyv89 := &x.ConntrackTCPEstablishedTimeout + yym90 := z.DecBinary() + _ = yym90 if false { - } else if z.HasExtensions() && z.DecExt(yyv82) { - } else if !yym83 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv82) + } else if z.HasExtensions() && z.DecExt(yyv89) { + } else if !yym90 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv89) } else { - z.DecFallback(yyv82, false) + z.DecFallback(yyv89, false) } } default: - z.DecStructFieldNotFound(-1, yys62) - } // end switch yys62 - } // end for yyj62 + z.DecStructFieldNotFound(-1, yys67) + } // end switch yys67 + } // end for yyj67 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -669,16 +714,16 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj84 int - var yyb84 bool - var yyhl84 bool = l >= 0 - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + var yyj91 int + var yyb91 bool + var yyhl91 bool = l >= 0 + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -688,13 +733,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Kind = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -704,13 +749,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.APIVersion = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -720,13 +765,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.BindAddress = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -736,13 +781,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HealthzBindAddress = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -752,13 +797,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HealthzPort = int32(r.DecodeInt(32)) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -768,13 +813,39 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.HostnameOverride = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.IPTablesMasqueradeBit != nil { + x.IPTablesMasqueradeBit = nil + } + } else { + if x.IPTablesMasqueradeBit == nil { + x.IPTablesMasqueradeBit = new(int32) + } + yym99 := z.DecBinary() + _ = yym99 + if false { + } else { + *((*int32)(x.IPTablesMasqueradeBit)) = int32(r.DecodeInt(32)) + } + } + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l + } else { + yyb91 = r.CheckBreak() + } + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -782,24 +853,24 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.IPTablesSyncPeriod = pkg1_unversioned.Duration{} } else { - yyv91 := &x.IPTablesSyncPeriod - yym92 := z.DecBinary() - _ = yym92 + yyv100 := &x.IPTablesSyncPeriod + yym101 := z.DecBinary() + _ = yym101 if false { - } else if z.HasExtensions() && z.DecExt(yyv91) { - } else if !yym92 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv91) + } else if z.HasExtensions() && z.DecExt(yyv100) { + } else if !yym101 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv100) } else { - z.DecFallback(yyv91, false) + z.DecFallback(yyv100, false) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -809,13 +880,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.KubeconfigPath = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -825,13 +896,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.MasqueradeAll = bool(r.DecodeBool()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -841,13 +912,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Master = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -860,20 +931,20 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if x.OOMScoreAdj == nil { x.OOMScoreAdj = new(int32) } - yym97 := z.DecBinary() - _ = yym97 + yym106 := z.DecBinary() + _ = yym106 if false { } else { *((*int32)(x.OOMScoreAdj)) = int32(r.DecodeInt(32)) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -883,13 +954,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.Mode = ProxyMode(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -899,13 +970,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.PortRange = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -915,13 +986,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.ResourceContainer = string(r.DecodeString()) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -929,24 +1000,24 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.UDPIdleTimeout = pkg1_unversioned.Duration{} } else { - yyv101 := &x.UDPIdleTimeout - yym102 := z.DecBinary() - _ = yym102 + yyv110 := &x.UDPIdleTimeout + yym111 := z.DecBinary() + _ = yym111 if false { - } else if z.HasExtensions() && z.DecExt(yyv101) { - } else if !yym102 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv101) + } else if z.HasExtensions() && z.DecExt(yyv110) { + } else if !yym111 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv110) } else { - z.DecFallback(yyv101, false) + z.DecFallback(yyv110, false) } } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -956,13 +1027,13 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De } else { x.ConntrackMax = int32(r.DecodeInt(32)) } - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -970,29 +1041,29 @@ func (x *KubeProxyConfiguration) codecDecodeSelfFromArray(l int, d *codec1978.De if r.TryDecodeAsNil() { x.ConntrackTCPEstablishedTimeout = pkg1_unversioned.Duration{} } else { - yyv104 := &x.ConntrackTCPEstablishedTimeout - yym105 := z.DecBinary() - _ = yym105 + yyv113 := &x.ConntrackTCPEstablishedTimeout + yym114 := z.DecBinary() + _ = yym114 if false { - } else if z.HasExtensions() && z.DecExt(yyv104) { - } else if !yym105 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv104) + } else if z.HasExtensions() && z.DecExt(yyv113) { + } else if !yym114 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv113) } else { - z.DecFallback(yyv104, false) + z.DecFallback(yyv113, false) } } for { - yyj84++ - if yyhl84 { - yyb84 = yyj84 > l + yyj91++ + if yyhl91 { + yyb91 = yyj91 > l } else { - yyb84 = r.CheckBreak() + yyb91 = r.CheckBreak() } - if yyb84 { + if yyb91 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj84-1, "") + z.DecStructFieldNotFound(yyj91-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -1001,8 +1072,8 @@ func (x ProxyMode) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r - yym106 := z.EncBinary() - _ = yym106 + yym115 := z.EncBinary() + _ = yym115 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { @@ -1014,8 +1085,8 @@ func (x *ProxyMode) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym107 := z.DecBinary() - _ = yym107 + yym116 := z.DecBinary() + _ = yym116 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { @@ -1030,36 +1101,36 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x == nil { r.EncodeNil() } else { - yym108 := z.EncBinary() - _ = yym108 + yym117 := z.EncBinary() + _ = yym117 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { - yysep109 := !z.EncBinary() - yy2arr109 := z.EncBasicHandle().StructToArray - var yyq109 [11]bool - _, _, _ = yysep109, yyq109, yy2arr109 - const yyr109 bool = false - yyq109[0] = x.Kind != "" - yyq109[1] = x.APIVersion != "" - var yynn109 int - if yyr109 || yy2arr109 { + yysep118 := !z.EncBinary() + yy2arr118 := z.EncBasicHandle().StructToArray + var yyq118 [11]bool + _, _, _ = yysep118, yyq118, yy2arr118 + const yyr118 bool = false + yyq118[0] = x.Kind != "" + yyq118[1] = x.APIVersion != "" + var yynn118 int + if yyr118 || yy2arr118 { r.EncodeArrayStart(11) } else { - yynn109 = 9 - for _, b := range yyq109 { + yynn118 = 9 + for _, b := range yyq118 { if b { - yynn109++ + yynn118++ } } - r.EncodeMapStart(yynn109) - yynn109 = 0 + r.EncodeMapStart(yynn118) + yynn118 = 0 } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[0] { - yym111 := z.EncBinary() - _ = yym111 + if yyq118[0] { + yym120 := z.EncBinary() + _ = yym120 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) @@ -1068,23 +1139,23 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[0] { + if yyq118[0] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kind")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym112 := z.EncBinary() - _ = yym112 + yym121 := z.EncBinary() + _ = yym121 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq109[1] { - yym114 := z.EncBinary() - _ = yym114 + if yyq118[1] { + yym123 := z.EncBinary() + _ = yym123 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) @@ -1093,22 +1164,22 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq109[1] { + if yyq118[1] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym115 := z.EncBinary() - _ = yym115 + yym124 := z.EncBinary() + _ = yym124 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym117 := z.EncBinary() - _ = yym117 + yym126 := z.EncBinary() + _ = yym126 if false { } else { r.EncodeInt(int64(x.Port)) @@ -1117,17 +1188,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("port")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym118 := z.EncBinary() - _ = yym118 + yym127 := z.EncBinary() + _ = yym127 if false { } else { r.EncodeInt(int64(x.Port)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym120 := z.EncBinary() - _ = yym120 + yym129 := z.EncBinary() + _ = yym129 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) @@ -1136,17 +1207,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("address")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym121 := z.EncBinary() - _ = yym121 + yym130 := z.EncBinary() + _ = yym130 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.Address)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym123 := z.EncBinary() - _ = yym123 + yym132 := z.EncBinary() + _ = yym132 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.AlgorithmProvider)) @@ -1155,17 +1226,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("algorithmProvider")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym124 := z.EncBinary() - _ = yym124 + yym133 := z.EncBinary() + _ = yym133 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.AlgorithmProvider)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym126 := z.EncBinary() - _ = yym126 + yym135 := z.EncBinary() + _ = yym135 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PolicyConfigFile)) @@ -1174,24 +1245,24 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("policyConfigFile")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym127 := z.EncBinary() - _ = yym127 + yym136 := z.EncBinary() + _ = yym136 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.PolicyConfigFile)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) if x.EnableProfiling == nil { r.EncodeNil() } else { - yy129 := *x.EnableProfiling - yym130 := z.EncBinary() - _ = yym130 + yy138 := *x.EnableProfiling + yym139 := z.EncBinary() + _ = yym139 if false { } else { - r.EncodeBool(bool(yy129)) + r.EncodeBool(bool(yy138)) } } } else { @@ -1201,19 +1272,19 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.EnableProfiling == nil { r.EncodeNil() } else { - yy131 := *x.EnableProfiling - yym132 := z.EncBinary() - _ = yym132 + yy140 := *x.EnableProfiling + yym141 := z.EncBinary() + _ = yym141 if false { } else { - r.EncodeBool(bool(yy131)) + r.EncodeBool(bool(yy140)) } } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym134 := z.EncBinary() - _ = yym134 + yym143 := z.EncBinary() + _ = yym143 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) @@ -1222,17 +1293,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIQPS")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym135 := z.EncBinary() - _ = yym135 + yym144 := z.EncBinary() + _ = yym144 if false { } else { r.EncodeFloat32(float32(x.KubeAPIQPS)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym137 := z.EncBinary() - _ = yym137 + yym146 := z.EncBinary() + _ = yym146 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) @@ -1241,17 +1312,17 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("kubeAPIBurst")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym138 := z.EncBinary() - _ = yym138 + yym147 := z.EncBinary() + _ = yym147 if false { } else { r.EncodeInt(int64(x.KubeAPIBurst)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yym140 := z.EncBinary() - _ = yym140 + yym149 := z.EncBinary() + _ = yym149 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SchedulerName)) @@ -1260,25 +1331,25 @@ func (x *KubeSchedulerConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("schedulerName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym141 := z.EncBinary() - _ = yym141 + yym150 := z.EncBinary() + _ = yym150 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.SchedulerName)) } } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy143 := &x.LeaderElection - yy143.CodecEncodeSelf(e) + yy152 := &x.LeaderElection + yy152.CodecEncodeSelf(e) } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("leaderElection")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy144 := &x.LeaderElection - yy144.CodecEncodeSelf(e) + yy153 := &x.LeaderElection + yy153.CodecEncodeSelf(e) } - if yyr109 || yy2arr109 { + if yyr118 || yy2arr118 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { z.EncSendContainerState(codecSelfer_containerMapEnd1234) @@ -1291,25 +1362,25 @@ func (x *KubeSchedulerConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym145 := z.DecBinary() - _ = yym145 + yym154 := z.DecBinary() + _ = yym154 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct146 := r.ContainerType() - if yyct146 == codecSelferValueTypeMap1234 { - yyl146 := r.ReadMapStart() - if yyl146 == 0 { + yyct155 := r.ContainerType() + if yyct155 == codecSelferValueTypeMap1234 { + yyl155 := r.ReadMapStart() + if yyl155 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl146, d) + x.codecDecodeSelfFromMap(yyl155, d) } - } else if yyct146 == codecSelferValueTypeArray1234 { - yyl146 := r.ReadArrayStart() - if yyl146 == 0 { + } else if yyct155 == codecSelferValueTypeArray1234 { + yyl155 := r.ReadArrayStart() + if yyl155 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl146, d) + x.codecDecodeSelfFromArray(yyl155, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -1321,12 +1392,12 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys147Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys147Slc - var yyhl147 bool = l >= 0 - for yyj147 := 0; ; yyj147++ { - if yyhl147 { - if yyj147 >= l { + var yys156Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys156Slc + var yyhl156 bool = l >= 0 + for yyj156 := 0; ; yyj156++ { + if yyhl156 { + if yyj156 >= l { break } } else { @@ -1335,10 +1406,10 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys147Slc = r.DecodeBytes(yys147Slc, true, true) - yys147 := string(yys147Slc) + yys156Slc = r.DecodeBytes(yys156Slc, true, true) + yys156 := string(yys156Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys147 { + switch yys156 { case "kind": if r.TryDecodeAsNil() { x.Kind = "" @@ -1384,8 +1455,8 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. if x.EnableProfiling == nil { x.EnableProfiling = new(bool) } - yym155 := z.DecBinary() - _ = yym155 + yym164 := z.DecBinary() + _ = yym164 if false { } else { *((*bool)(x.EnableProfiling)) = r.DecodeBool() @@ -1413,13 +1484,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromMap(l int, d *codec1978. if r.TryDecodeAsNil() { x.LeaderElection = LeaderElectionConfiguration{} } else { - yyv159 := &x.LeaderElection - yyv159.CodecDecodeSelf(d) + yyv168 := &x.LeaderElection + yyv168.CodecDecodeSelf(d) } default: - z.DecStructFieldNotFound(-1, yys147) - } // end switch yys147 - } // end for yyj147 + z.DecStructFieldNotFound(-1, yys156) + } // end switch yys156 + } // end for yyj156 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -1427,16 +1498,16 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj160 int - var yyb160 bool - var yyhl160 bool = l >= 0 - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + var yyj169 int + var yyb169 bool + var yyhl169 bool = l >= 0 + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1446,13 +1517,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Kind = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1462,13 +1533,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.APIVersion = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1478,13 +1549,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Port = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1494,13 +1565,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.Address = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1510,13 +1581,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.AlgorithmProvider = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1526,13 +1597,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.PolicyConfigFile = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1545,20 +1616,20 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 if x.EnableProfiling == nil { x.EnableProfiling = new(bool) } - yym168 := z.DecBinary() - _ = yym168 + yym177 := z.DecBinary() + _ = yym177 if false { } else { *((*bool)(x.EnableProfiling)) = r.DecodeBool() } } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1568,13 +1639,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.KubeAPIQPS = float32(r.DecodeFloat(true)) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1584,13 +1655,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.KubeAPIBurst = int(r.DecodeInt(codecSelferBitsize1234)) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1600,13 +1671,13 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 } else { x.SchedulerName = string(r.DecodeString()) } - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1614,21 +1685,21 @@ func (x *KubeSchedulerConfiguration) codecDecodeSelfFromArray(l int, d *codec197 if r.TryDecodeAsNil() { x.LeaderElection = LeaderElectionConfiguration{} } else { - yyv172 := &x.LeaderElection - yyv172.CodecDecodeSelf(d) + yyv181 := &x.LeaderElection + yyv181.CodecDecodeSelf(d) } for { - yyj160++ - if yyhl160 { - yyb160 = yyj160 > l + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l } else { - yyb160 = r.CheckBreak() + yyb169 = r.CheckBreak() } - if yyb160 { + if yyb169 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj160-1, "") + z.DecStructFieldNotFound(yyj169-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -1640,40 +1711,40 @@ func (x *LeaderElectionConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x == nil { r.EncodeNil() } else { - yym173 := z.EncBinary() - _ = yym173 + yym182 := z.EncBinary() + _ = yym182 if false { } else if z.HasExtensions() && z.EncExt(x) { } else { - yysep174 := !z.EncBinary() - yy2arr174 := z.EncBasicHandle().StructToArray - var yyq174 [4]bool - _, _, _ = yysep174, yyq174, yy2arr174 - const yyr174 bool = false - var yynn174 int - if yyr174 || yy2arr174 { + yysep183 := !z.EncBinary() + yy2arr183 := z.EncBasicHandle().StructToArray + var yyq183 [4]bool + _, _, _ = yysep183, yyq183, yy2arr183 + const yyr183 bool = false + var yynn183 int + if yyr183 || yy2arr183 { r.EncodeArrayStart(4) } else { - yynn174 = 4 - for _, b := range yyq174 { + yynn183 = 4 + for _, b := range yyq183 { if b { - yynn174++ + yynn183++ } } - r.EncodeMapStart(yynn174) - yynn174 = 0 + r.EncodeMapStart(yynn183) + yynn183 = 0 } - if yyr174 || yy2arr174 { + if yyr183 || yy2arr183 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) if x.LeaderElect == nil { r.EncodeNil() } else { - yy176 := *x.LeaderElect - yym177 := z.EncBinary() - _ = yym177 + yy185 := *x.LeaderElect + yym186 := z.EncBinary() + _ = yym186 if false { } else { - r.EncodeBool(bool(yy176)) + r.EncodeBool(bool(yy185)) } } } else { @@ -1683,97 +1754,97 @@ func (x *LeaderElectionConfiguration) CodecEncodeSelf(e *codec1978.Encoder) { if x.LeaderElect == nil { r.EncodeNil() } else { - yy178 := *x.LeaderElect - yym179 := z.EncBinary() - _ = yym179 + yy187 := *x.LeaderElect + yym188 := z.EncBinary() + _ = yym188 if false { } else { - r.EncodeBool(bool(yy178)) + r.EncodeBool(bool(yy187)) } } } - if yyr174 || yy2arr174 { + if yyr183 || yy2arr183 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy181 := &x.LeaseDuration - yym182 := z.EncBinary() - _ = yym182 + yy190 := &x.LeaseDuration + yym191 := z.EncBinary() + _ = yym191 if false { - } else if z.HasExtensions() && z.EncExt(yy181) { - } else if !yym182 && z.IsJSONHandle() { - z.EncJSONMarshal(yy181) + } else if z.HasExtensions() && z.EncExt(yy190) { + } else if !yym191 && z.IsJSONHandle() { + z.EncJSONMarshal(yy190) } else { - z.EncFallback(yy181) + z.EncFallback(yy190) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("leaseDuration")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy183 := &x.LeaseDuration - yym184 := z.EncBinary() - _ = yym184 + yy192 := &x.LeaseDuration + yym193 := z.EncBinary() + _ = yym193 if false { - } else if z.HasExtensions() && z.EncExt(yy183) { - } else if !yym184 && z.IsJSONHandle() { - z.EncJSONMarshal(yy183) + } else if z.HasExtensions() && z.EncExt(yy192) { + } else if !yym193 && z.IsJSONHandle() { + z.EncJSONMarshal(yy192) } else { - z.EncFallback(yy183) + z.EncFallback(yy192) } } - if yyr174 || yy2arr174 { + if yyr183 || yy2arr183 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy186 := &x.RenewDeadline - yym187 := z.EncBinary() - _ = yym187 + yy195 := &x.RenewDeadline + yym196 := z.EncBinary() + _ = yym196 if false { - } else if z.HasExtensions() && z.EncExt(yy186) { - } else if !yym187 && z.IsJSONHandle() { - z.EncJSONMarshal(yy186) + } else if z.HasExtensions() && z.EncExt(yy195) { + } else if !yym196 && z.IsJSONHandle() { + z.EncJSONMarshal(yy195) } else { - z.EncFallback(yy186) + z.EncFallback(yy195) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("renewDeadline")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy188 := &x.RenewDeadline - yym189 := z.EncBinary() - _ = yym189 + yy197 := &x.RenewDeadline + yym198 := z.EncBinary() + _ = yym198 if false { - } else if z.HasExtensions() && z.EncExt(yy188) { - } else if !yym189 && z.IsJSONHandle() { - z.EncJSONMarshal(yy188) + } else if z.HasExtensions() && z.EncExt(yy197) { + } else if !yym198 && z.IsJSONHandle() { + z.EncJSONMarshal(yy197) } else { - z.EncFallback(yy188) + z.EncFallback(yy197) } } - if yyr174 || yy2arr174 { + if yyr183 || yy2arr183 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - yy191 := &x.RetryPeriod - yym192 := z.EncBinary() - _ = yym192 + yy200 := &x.RetryPeriod + yym201 := z.EncBinary() + _ = yym201 if false { - } else if z.HasExtensions() && z.EncExt(yy191) { - } else if !yym192 && z.IsJSONHandle() { - z.EncJSONMarshal(yy191) + } else if z.HasExtensions() && z.EncExt(yy200) { + } else if !yym201 && z.IsJSONHandle() { + z.EncJSONMarshal(yy200) } else { - z.EncFallback(yy191) + z.EncFallback(yy200) } } else { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("retryPeriod")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy193 := &x.RetryPeriod - yym194 := z.EncBinary() - _ = yym194 + yy202 := &x.RetryPeriod + yym203 := z.EncBinary() + _ = yym203 if false { - } else if z.HasExtensions() && z.EncExt(yy193) { - } else if !yym194 && z.IsJSONHandle() { - z.EncJSONMarshal(yy193) + } else if z.HasExtensions() && z.EncExt(yy202) { + } else if !yym203 && z.IsJSONHandle() { + z.EncJSONMarshal(yy202) } else { - z.EncFallback(yy193) + z.EncFallback(yy202) } } - if yyr174 || yy2arr174 { + if yyr183 || yy2arr183 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { z.EncSendContainerState(codecSelfer_containerMapEnd1234) @@ -1786,25 +1857,25 @@ func (x *LeaderElectionConfiguration) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - yym195 := z.DecBinary() - _ = yym195 + yym204 := z.DecBinary() + _ = yym204 if false { } else if z.HasExtensions() && z.DecExt(x) { } else { - yyct196 := r.ContainerType() - if yyct196 == codecSelferValueTypeMap1234 { - yyl196 := r.ReadMapStart() - if yyl196 == 0 { + yyct205 := r.ContainerType() + if yyct205 == codecSelferValueTypeMap1234 { + yyl205 := r.ReadMapStart() + if yyl205 == 0 { z.DecSendContainerState(codecSelfer_containerMapEnd1234) } else { - x.codecDecodeSelfFromMap(yyl196, d) + x.codecDecodeSelfFromMap(yyl205, d) } - } else if yyct196 == codecSelferValueTypeArray1234 { - yyl196 := r.ReadArrayStart() - if yyl196 == 0 { + } else if yyct205 == codecSelferValueTypeArray1234 { + yyl205 := r.ReadArrayStart() + if yyl205 == 0 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } else { - x.codecDecodeSelfFromArray(yyl196, d) + x.codecDecodeSelfFromArray(yyl205, d) } } else { panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) @@ -1816,12 +1887,12 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yys197Slc = z.DecScratchBuffer() // default slice to decode into - _ = yys197Slc - var yyhl197 bool = l >= 0 - for yyj197 := 0; ; yyj197++ { - if yyhl197 { - if yyj197 >= l { + var yys206Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys206Slc + var yyhl206 bool = l >= 0 + for yyj206 := 0; ; yyj206++ { + if yyhl206 { + if yyj206 >= l { break } } else { @@ -1830,10 +1901,10 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 } } z.DecSendContainerState(codecSelfer_containerMapKey1234) - yys197Slc = r.DecodeBytes(yys197Slc, true, true) - yys197 := string(yys197Slc) + yys206Slc = r.DecodeBytes(yys206Slc, true, true) + yys206 := string(yys206Slc) z.DecSendContainerState(codecSelfer_containerMapValue1234) - switch yys197 { + switch yys206 { case "leaderElect": if r.TryDecodeAsNil() { if x.LeaderElect != nil { @@ -1843,8 +1914,8 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 if x.LeaderElect == nil { x.LeaderElect = new(bool) } - yym199 := z.DecBinary() - _ = yym199 + yym208 := z.DecBinary() + _ = yym208 if false { } else { *((*bool)(x.LeaderElect)) = r.DecodeBool() @@ -1854,51 +1925,51 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromMap(l int, d *codec1978 if r.TryDecodeAsNil() { x.LeaseDuration = pkg1_unversioned.Duration{} } else { - yyv200 := &x.LeaseDuration - yym201 := z.DecBinary() - _ = yym201 + yyv209 := &x.LeaseDuration + yym210 := z.DecBinary() + _ = yym210 if false { - } else if z.HasExtensions() && z.DecExt(yyv200) { - } else if !yym201 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv200) + } else if z.HasExtensions() && z.DecExt(yyv209) { + } else if !yym210 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv209) } else { - z.DecFallback(yyv200, false) + z.DecFallback(yyv209, false) } } case "renewDeadline": if r.TryDecodeAsNil() { x.RenewDeadline = pkg1_unversioned.Duration{} } else { - yyv202 := &x.RenewDeadline - yym203 := z.DecBinary() - _ = yym203 + yyv211 := &x.RenewDeadline + yym212 := z.DecBinary() + _ = yym212 if false { - } else if z.HasExtensions() && z.DecExt(yyv202) { - } else if !yym203 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv202) + } else if z.HasExtensions() && z.DecExt(yyv211) { + } else if !yym212 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv211) } else { - z.DecFallback(yyv202, false) + z.DecFallback(yyv211, false) } } case "retryPeriod": if r.TryDecodeAsNil() { x.RetryPeriod = pkg1_unversioned.Duration{} } else { - yyv204 := &x.RetryPeriod - yym205 := z.DecBinary() - _ = yym205 + yyv213 := &x.RetryPeriod + yym214 := z.DecBinary() + _ = yym214 if false { - } else if z.HasExtensions() && z.DecExt(yyv204) { - } else if !yym205 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv204) + } else if z.HasExtensions() && z.DecExt(yyv213) { + } else if !yym214 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv213) } else { - z.DecFallback(yyv204, false) + z.DecFallback(yyv213, false) } } default: - z.DecStructFieldNotFound(-1, yys197) - } // end switch yys197 - } // end for yyj197 + z.DecStructFieldNotFound(-1, yys206) + } // end switch yys206 + } // end for yyj206 z.DecSendContainerState(codecSelfer_containerMapEnd1234) } @@ -1906,16 +1977,16 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj206 int - var yyb206 bool - var yyhl206 bool = l >= 0 - yyj206++ - if yyhl206 { - yyb206 = yyj206 > l + var yyj215 int + var yyb215 bool + var yyhl215 bool = l >= 0 + yyj215++ + if yyhl215 { + yyb215 = yyj215 > l } else { - yyb206 = r.CheckBreak() + yyb215 = r.CheckBreak() } - if yyb206 { + if yyb215 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1928,20 +1999,20 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if x.LeaderElect == nil { x.LeaderElect = new(bool) } - yym208 := z.DecBinary() - _ = yym208 + yym217 := z.DecBinary() + _ = yym217 if false { } else { *((*bool)(x.LeaderElect)) = r.DecodeBool() } } - yyj206++ - if yyhl206 { - yyb206 = yyj206 > l + yyj215++ + if yyhl215 { + yyb215 = yyj215 > l } else { - yyb206 = r.CheckBreak() + yyb215 = r.CheckBreak() } - if yyb206 { + if yyb215 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1949,24 +2020,24 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.LeaseDuration = pkg1_unversioned.Duration{} } else { - yyv209 := &x.LeaseDuration - yym210 := z.DecBinary() - _ = yym210 + yyv218 := &x.LeaseDuration + yym219 := z.DecBinary() + _ = yym219 if false { - } else if z.HasExtensions() && z.DecExt(yyv209) { - } else if !yym210 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv209) + } else if z.HasExtensions() && z.DecExt(yyv218) { + } else if !yym219 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv218) } else { - z.DecFallback(yyv209, false) + z.DecFallback(yyv218, false) } } - yyj206++ - if yyhl206 { - yyb206 = yyj206 > l + yyj215++ + if yyhl215 { + yyb215 = yyj215 > l } else { - yyb206 = r.CheckBreak() + yyb215 = r.CheckBreak() } - if yyb206 { + if yyb215 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1974,24 +2045,24 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.RenewDeadline = pkg1_unversioned.Duration{} } else { - yyv211 := &x.RenewDeadline - yym212 := z.DecBinary() - _ = yym212 + yyv220 := &x.RenewDeadline + yym221 := z.DecBinary() + _ = yym221 if false { - } else if z.HasExtensions() && z.DecExt(yyv211) { - } else if !yym212 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv211) + } else if z.HasExtensions() && z.DecExt(yyv220) { + } else if !yym221 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv220) } else { - z.DecFallback(yyv211, false) + z.DecFallback(yyv220, false) } } - yyj206++ - if yyhl206 { - yyb206 = yyj206 > l + yyj215++ + if yyhl215 { + yyb215 = yyj215 > l } else { - yyb206 = r.CheckBreak() + yyb215 = r.CheckBreak() } - if yyb206 { + if yyb215 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1999,29 +2070,29 @@ func (x *LeaderElectionConfiguration) codecDecodeSelfFromArray(l int, d *codec19 if r.TryDecodeAsNil() { x.RetryPeriod = pkg1_unversioned.Duration{} } else { - yyv213 := &x.RetryPeriod - yym214 := z.DecBinary() - _ = yym214 + yyv222 := &x.RetryPeriod + yym223 := z.DecBinary() + _ = yym223 if false { - } else if z.HasExtensions() && z.DecExt(yyv213) { - } else if !yym214 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv213) + } else if z.HasExtensions() && z.DecExt(yyv222) { + } else if !yym223 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv222) } else { - z.DecFallback(yyv213, false) + z.DecFallback(yyv222, false) } } for { - yyj206++ - if yyhl206 { - yyb206 = yyj206 > l + yyj215++ + if yyhl215 { + yyb215 = yyj215 > l } else { - yyb206 = r.CheckBreak() + yyb215 = r.CheckBreak() } - if yyb206 { + if yyb215 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj206-1, "") + z.DecStructFieldNotFound(yyj215-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } diff --git a/pkg/apis/componentconfig/v1alpha1/types.go b/pkg/apis/componentconfig/v1alpha1/types.go index 47cab1ec409..7210541ddf1 100644 --- a/pkg/apis/componentconfig/v1alpha1/types.go +++ b/pkg/apis/componentconfig/v1alpha1/types.go @@ -31,6 +31,9 @@ type KubeProxyConfiguration struct { HealthzPort int32 `json:"healthzPort"` // hostnameOverride, if non-empty, will be used as the identity instead of the actual hostname. HostnameOverride string `json:"hostnameOverride"` + // iptablesMasqueradeBit is the bit of the iptables fwmark space to use for SNAT if using + // the pure iptables proxy mode. Values must be within the range [0, 31]. + IPTablesMasqueradeBit *int32 `json:"iptablesMasqueradeBit"` // iptablesSyncPeriod is the period that iptables rules are refreshed (e.g. '5s', '1m', // '2h22m'). Must be greater than 0. IPTablesSyncPeriod unversioned.Duration `json:"iptablesSyncPeriodSeconds"` diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 8d6e215e52b..23ff4af0ebb 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -66,7 +66,8 @@ const kubePostroutingChain utiliptables.Chain = "KUBE-POSTROUTING" const kubeMarkMasqChain utiliptables.Chain = "KUBE-MARK-MASQ" // the mark we apply to traffic needing SNAT -const iptablesMasqueradeMark = "0x4d415351" +// TODO(thockin): Remove this for v1.3 or v1.4. +const oldIptablesMasqueradeMark = "0x4d415351" // IptablesVersioner can query the current iptables version. type IptablesVersioner interface { @@ -143,9 +144,10 @@ type Proxier struct { haveReceivedEndpointsUpdate bool // true once we've seen an OnEndpointsUpdate event // These are effectively const and do not need the mutex to be held. - syncPeriod time.Duration - iptables utiliptables.Interface - masqueradeAll bool + syncPeriod time.Duration + iptables utiliptables.Interface + masqueradeAll bool + masqueradeMark string } type localPort struct { @@ -171,7 +173,7 @@ var _ proxy.ProxyProvider = &Proxier{} // An error will be returned if iptables fails to update or acquire the initial lock. // Once a proxier is created, it will keep iptables up to date in the background and // will not terminate if a particular iptables call fails. -func NewProxier(ipt utiliptables.Interface, exec utilexec.Interface, syncPeriod time.Duration, masqueradeAll bool) (*Proxier, error) { +func NewProxier(ipt utiliptables.Interface, exec utilexec.Interface, syncPeriod time.Duration, masqueradeAll bool, masqueradeBit int) (*Proxier, error) { // Set the route_localnet sysctl we need for if err := utilsysctl.SetSysctl(sysctlRouteLocalnet, 1); err != nil { return nil, fmt.Errorf("can't set sysctl %s: %v", sysctlRouteLocalnet, err) @@ -185,13 +187,21 @@ func NewProxier(ipt utiliptables.Interface, exec utilexec.Interface, syncPeriod glog.Warningf("can't set sysctl %s: %v", sysctlBridgeCallIptables, err) } + // Generate the masquerade mark to use for SNAT rules. + if masqueradeBit < 0 || masqueradeBit > 31 { + return nil, fmt.Errorf("invalid iptables-masquerade-bit %v not in [0, 31]", masqueradeBit) + } + masqueradeValue := 1 << uint(masqueradeBit) + masqueradeMark := fmt.Sprintf("%#08x/%#08x", masqueradeValue, masqueradeValue) + return &Proxier{ - serviceMap: make(map[proxy.ServicePortName]*serviceInfo), - endpointsMap: make(map[proxy.ServicePortName][]string), - portsMap: make(map[localPort]closeable), - syncPeriod: syncPeriod, - iptables: ipt, - masqueradeAll: masqueradeAll, + serviceMap: make(map[proxy.ServicePortName]*serviceInfo), + endpointsMap: make(map[proxy.ServicePortName][]string), + portsMap: make(map[localPort]closeable), + syncPeriod: syncPeriod, + iptables: ipt, + masqueradeAll: masqueradeAll, + masqueradeMark: masqueradeMark, }, nil } @@ -283,7 +293,7 @@ func CleanupLeftovers(ipt utiliptables.Interface) (encounteredError bool) { // TODO(thockin): Remove this for v1.3 or v1.4. args = []string{ "-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", - "-m", "mark", "--mark", iptablesMasqueradeMark, + "-m", "mark", "--mark", oldIptablesMasqueradeMark, "-j", "MASQUERADE", } if err := ipt.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { @@ -577,7 +587,7 @@ func (proxier *Proxier) syncProxyRules() { comment := "kubernetes postrouting rules" args := []string{"-m", "comment", "--comment", comment, "-j", string(kubePostroutingChain)} if _, err := proxier.iptables.EnsureRule(utiliptables.Prepend, utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { - glog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", utiliptables.TableNAT, utiliptables.ChainPostrouting, kubeServicesChain, err) + glog.Errorf("Failed to ensure that %s chain %s jumps to %s: %v", utiliptables.TableNAT, utiliptables.ChainPostrouting, kubePostroutingChain, err) return } } @@ -643,7 +653,7 @@ func (proxier *Proxier) syncProxyRules() { writeLine(natRules, []string{ "-A", string(kubePostroutingChain), "-m", "comment", "--comment", `"kubernetes service traffic requiring SNAT"`, - "-m", "mark", "--mark", iptablesMasqueradeMark, + "-m", "mark", "--mark", proxier.masqueradeMark, "-j", "MASQUERADE", }...) @@ -652,7 +662,7 @@ func (proxier *Proxier) syncProxyRules() { // value should ever change. writeLine(natRules, []string{ "-A", string(kubeMarkMasqChain), - "-j", "MARK", "--set-xmark", fmt.Sprintf("%s/0xffffffff", iptablesMasqueradeMark), + "-j", "MARK", "--set-xmark", proxier.masqueradeMark, }...) // Accumulate NAT chains to keep. @@ -931,7 +941,7 @@ func (proxier *Proxier) syncProxyRules() { // TODO(thockin): Remove this for v1.3 or v1.4. args := []string{ "-m", "comment", "--comment", "kubernetes service traffic requiring SNAT", - "-m", "mark", "--mark", iptablesMasqueradeMark, + "-m", "mark", "--mark", oldIptablesMasqueradeMark, "-j", "MASQUERADE", } if err := proxier.iptables.DeleteRule(utiliptables.TableNAT, utiliptables.ChainPostrouting, args...); err != nil { From 3a36dfb306c248070accfbbe7b6a24482ba7e450 Mon Sep 17 00:00:00 2001 From: Oleg Shaldybin Date: Wed, 20 Jan 2016 18:39:59 -0800 Subject: [PATCH 11/18] Minor selectHost optimization in scheduler Instead of sorting hosts by score, find max score and choose one of the hosts with max score directly. Saves a little time on sorting and avoids extra copying of HostPriorityList entries. Test had to be updated as one of the test cases relied on having a stable order from pre-sorting. --- plugin/pkg/scheduler/generic_scheduler.go | 38 +++++---- .../pkg/scheduler/generic_scheduler_test.go | 77 +++++++++---------- 2 files changed, 56 insertions(+), 59 deletions(-) diff --git a/plugin/pkg/scheduler/generic_scheduler.go b/plugin/pkg/scheduler/generic_scheduler.go index aa94d8b0d09..fc42b7d99ff 100644 --- a/plugin/pkg/scheduler/generic_scheduler.go +++ b/plugin/pkg/scheduler/generic_scheduler.go @@ -20,7 +20,6 @@ import ( "bytes" "fmt" "math/rand" - "sort" "strings" "sync" @@ -101,20 +100,31 @@ func (g *genericScheduler) Schedule(pod *api.Pod, nodeLister algorithm.NodeListe return g.selectHost(priorityList) } -// This method takes a prioritized list of nodes and sorts them in reverse order based on scores -// and then picks one randomly from the nodes that had the highest score +// selectHost takes a prioritized list of nodes and then picks one +// randomly from the nodes that had the highest score. func (g *genericScheduler) selectHost(priorityList schedulerapi.HostPriorityList) (string, error) { if len(priorityList) == 0 { return "", fmt.Errorf("empty priorityList") } - sort.Sort(sort.Reverse(priorityList)) - hosts := getBestHosts(priorityList) + maxScore := priorityList[0].Score + // idx contains indices of elements with score == maxScore. + idx := []int{} + + for i, entry := range priorityList { + if entry.Score > maxScore { + maxScore = entry.Score + idx = []int{i} + } else if entry.Score == maxScore { + idx = append(idx, i) + } + } + g.randomLock.Lock() - defer g.randomLock.Unlock() + ix := g.random.Int() % len(idx) + g.randomLock.Unlock() - ix := g.random.Int() % len(hosts) - return hosts[ix], nil + return priorityList[idx[ix]].Host, nil } // Filters the nodes to find the ones that fit based on the given predicate functions @@ -258,18 +268,6 @@ func PrioritizeNodes(pod *api.Pod, machinesToPods map[string][]*api.Pod, podList return result, nil } -func getBestHosts(list schedulerapi.HostPriorityList) []string { - result := []string{} - for _, hostEntry := range list { - if hostEntry.Score == list[0].Score { - result = append(result, hostEntry.Host) - } else { - break - } - } - return result -} - // EqualPriority is a prioritizer function that gives an equal weight of one to all nodes func EqualPriority(_ *api.Pod, machinesToPods map[string][]*api.Pod, podLister algorithm.PodLister, nodeLister algorithm.NodeLister) (schedulerapi.HostPriorityList, error) { nodes, err := nodeLister.List() diff --git a/plugin/pkg/scheduler/generic_scheduler_test.go b/plugin/pkg/scheduler/generic_scheduler_test.go index 3c403037b61..bd8360b26e4 100644 --- a/plugin/pkg/scheduler/generic_scheduler_test.go +++ b/plugin/pkg/scheduler/generic_scheduler_test.go @@ -166,14 +166,14 @@ func TestSelectHost(t *testing.T) { func TestGenericScheduler(t *testing.T) { tests := []struct { - name string - predicates map[string]algorithm.FitPredicate - prioritizers []algorithm.PriorityConfig - nodes []string - pod *api.Pod - pods []*api.Pod - expectedHost string - expectsErr bool + name string + predicates map[string]algorithm.FitPredicate + prioritizers []algorithm.PriorityConfig + nodes []string + pod *api.Pod + pods []*api.Pod + expectedHosts sets.String + expectsErr bool }{ { predicates: map[string]algorithm.FitPredicate{"false": falsePredicate}, @@ -183,44 +183,43 @@ func TestGenericScheduler(t *testing.T) { name: "test 1", }, { - predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}}, - nodes: []string{"machine1", "machine2"}, - // Random choice between both, the rand seeded above with zero, chooses "machine1" - expectedHost: "machine1", - name: "test 2", + predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, + prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}}, + nodes: []string{"machine1", "machine2"}, + expectedHosts: sets.NewString("machine1", "machine2"), + name: "test 2", }, { // Fits on a machine where the pod ID matches the machine name - predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}}, - nodes: []string{"machine1", "machine2"}, - pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}}, - expectedHost: "machine2", - name: "test 3", + predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate}, + prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}}, + nodes: []string{"machine1", "machine2"}, + pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}}, + expectedHosts: sets.NewString("machine2"), + name: "test 3", }, { - predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, - nodes: []string{"3", "2", "1"}, - expectedHost: "3", - name: "test 4", + predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, + prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + nodes: []string{"3", "2", "1"}, + expectedHosts: sets.NewString("3"), + name: "test 4", }, { - predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, - nodes: []string{"3", "2", "1"}, - pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}}, - expectedHost: "2", - name: "test 5", + predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate}, + prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + nodes: []string{"3", "2", "1"}, + pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}}, + expectedHosts: sets.NewString("2"), + name: "test 5", }, { - predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}, {Function: reverseNumericPriority, Weight: 2}}, - nodes: []string{"3", "2", "1"}, - pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}}, - expectedHost: "1", - name: "test 6", + predicates: map[string]algorithm.FitPredicate{"true": truePredicate}, + prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}, {Function: reverseNumericPriority, Weight: 2}}, + nodes: []string{"3", "2", "1"}, + pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}}, + expectedHosts: sets.NewString("1"), + name: "test 6", }, { predicates: map[string]algorithm.FitPredicate{"true": truePredicate, "false": falsePredicate}, @@ -266,8 +265,8 @@ func TestGenericScheduler(t *testing.T) { if err != nil { t.Errorf("Unexpected error: %v", err) } - if test.expectedHost != machine { - t.Errorf("Failed : %s, Expected: %s, Saw: %s", test.name, test.expectedHost, machine) + if !test.expectedHosts.Has(machine) { + t.Errorf("Failed : %s, Expected: %s, Saw: %s", test.name, test.expectedHosts, machine) } } } From c96c04245ffad5fa2aec92f1da7dd569d6b0f8d9 Mon Sep 17 00:00:00 2001 From: Jeff Lowdermilk Date: Fri, 15 Jan 2016 10:55:24 -0800 Subject: [PATCH 12/18] Add workflow diagram to pull request doc --- docs/devel/pr_workflow.dia | Bin 0 -> 1987 bytes docs/devel/pr_workflow.png | Bin 0 -> 27835 bytes docs/devel/pull-requests.md | 7 +++++-- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 docs/devel/pr_workflow.dia create mode 100644 docs/devel/pr_workflow.png diff --git a/docs/devel/pr_workflow.dia b/docs/devel/pr_workflow.dia new file mode 100644 index 0000000000000000000000000000000000000000..d520c21ddee794aa704d777378af94da1536e2cd GIT binary patch literal 1987 zcmV;!2R!&6iwFP!000021MQtnZ=*OE$M5+RR_3xRr37qV%yimW&0(~Mk@m2==g0{z z@s>aaoTi<_e)h3}mV`h^AW*gANNojqc>IE&|L?I4>Zi|-s{lOEIAKwEGd47R3~0EB zJQn&l3@)7;H;&(9IxYvR*+Ov!z{Yh8R?w~gyHjmvIV>nLHugg>nhOlthd-#a$BRU(W+ z|MtT-$~lccWYx+~7XGR#TU!uck=SS9VOgSof~+&3W+7L8Yy(?JhYot~m-CC84_jO? zY;p0h#j#|zj$$4Y#t(~}M^QjYn3c-o4Q*devLJyNV#k_gwD*3;IFB0Ye@BAklm=v{ zUn1_@==Edf9S`0;iyALm=JDn1v8V3Jyg&8i{edNH9?+`VvyflR{nKUKm+wxh;Kk(~ zM?>bV77-q%7PZbtguh`PO&W&TzDh-eSsU4G@Dgiq!A|OvR&fR}0Pz~}M zoGT6>3(g*%k9PVbn*T=^Ja6pRAlfdLBe2E^%MIs{75a!*C|I+t+tK2@}O$gyZ zcdeshOgR(7Ew}$rJ?fm#=Vjlqs6Gk(fad;f&9x>57Qe5NNS~|;gyMI*5@|qJvqcn# zhiSrPnv@oh>d0ZUUNpq);Co4#zvT7KQ9IwsGTP2662oTVom0x1c-}tkO10OumN%Bu z$AeBOM}Enst|!u*Z_lojBCg0i1?x=^fS7*Y(1h1yi$^53j@MDht4fyV!5vw#;7L@F zgvl5r{7Gto2;=P1KWXqlIa`oj$vVFV2g9rKCSiU5V|FWaUtp>t5}FgJYqo23D`+1( zN9HHG-mM^!)cN6xR^Lq;ZdMgMK1Sp!sMLXRT2P=p7K{sE0b0Fd0h&8l!2M$ZS_%sa z3pH4vu}|j_2P8>E^e2K24~%YW7ZVg7E{X?R;bAyDz^-_(j0r?N;=$5WJV1#D+fDIc z_l$=QO*#n=SmEI<<6#|x`Gy6anA?jpzAr)wY(mDTVgOM;CR_v<;9@ob;!UWK(Kj+| zT_%qT8G|7MT>=?S|H!ZlWFUP2WH<^L3K^#(gF>n(F(@UlqQr2NFfTxfwz78yB@Ab0 zVqx@8iB3wcDDkc-!DI5k63GLwSklFP0{kfB1|XsM+3?7xVuTS+J>W%)L}6n9Y#6S> z#&FoME`SXLd&dScb|x2A|JZ2TB!!LlkB#Tu2_RaNfWYUg35f2mcyyI+WQ=}ecaj}T zAv9sc0Sm!)DQXe0g#Qi#GN*w8$q*nxNP`L_LxIHZ3KGZaci-DFi+yibA7tOVLz7Md ziKRgDmO+wi<}1d*_YK|9Vx1~mqoP-0S~A))z67FpDGXrz$30H2M+wpklpwQzl(cPSz9>)( z0ty7x;?;1Vz+FLs?0)AQ$SUR>CeG&^R<<0s91nX4M9*B1doJkSkTYt5iT7 zk6w&qk6_F&&BS0guv2iJFh}ju{im*@$5($Xo<6e+#+xNbCv5d}AT4 zfQ;J}GV&SgK6gkU(rkpG+)fvm5wJnFfdvFK!)UwJAOb#|(a=jtRN87UFVkow~Sud_<0S*0Q5N!>HqKF1epIm~x(_%P@5uY3Y=lL73 z6fu%ZERWJxUqSJ$xE1JN1XNsXTk)CaPD zP=U(tlza>FV|*=a)N8+-2CGBp;@e&pA!&+A>5m>S=KIDIewu z0dKk*f+yHnShF1{>wnZNdkaCy$1f-!xPyGaQs!b0s~_-fWFH8+@-aNeFr7?7jFi@v z?HI3|got{WM^y$*px&SxqGd`qRN8TtZkVsD8|aPX9mvhzC&#Xt=N?X%74HisAA7Hh zRb(BGrW-J=Yg5*Nm3pYG<2?01ud5#B+sHbgi)1mT_61d+#_2o5u3XEM4_(TX zK+?L;`NTo1Djvqv)4h-;Gc1N)wijYGDntAHN@WIbSwGAUnSuSf(+cMT`q6$3{|x=e z_ClOA$Yf^FuXr@=T;$@>Xoj9QQjeP{>G)Np171!#2Hr-+mrxEogmT#F)FRam+oJ?6^MXr`1yDaTReuwGL+vg7o> VyxflV{te9S=qJiZe~m6~0055>xTOF9 literal 0 HcmV?d00001 diff --git a/docs/devel/pr_workflow.png b/docs/devel/pr_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..dc95a366253fc7802a01d1dd15f63669735cf5be GIT binary patch literal 27835 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 Date: Fri, 15 Jan 2016 16:08:39 -0800 Subject: [PATCH 13/18] review changes --- docs/devel/pr_workflow.dia | Bin 1987 -> 3189 bytes docs/devel/pr_workflow.png | Bin 27835 -> 80793 bytes docs/devel/pull-requests.md | 51 ++++++++++++++++++++++++------------ 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/docs/devel/pr_workflow.dia b/docs/devel/pr_workflow.dia index d520c21ddee794aa704d777378af94da1536e2cd..753a284b4a447fbd0f5c720b214f41b3cdddeaf3 100644 GIT binary patch literal 3189 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 VyxflV{te9S=qJiZe~m6~0055>xTOF9 diff --git a/docs/devel/pr_workflow.png b/docs/devel/pr_workflow.png index dc95a366253fc7802a01d1dd15f63669735cf5be..0e2bd5d6eda9bfddc3af1f083f594063149bfabf 100644 GIT binary patch literal 80793 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 literal 27835 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 Date: Mon, 8 Feb 2016 09:46:45 -0800 Subject: [PATCH 14/18] Don't expect secret volume for node e2e tests --- test/e2e_node/kubelet_test.go | 8 ++------ test/e2e_node/runner/run_e2e.go | 6 +++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/test/e2e_node/kubelet_test.go b/test/e2e_node/kubelet_test.go index 4bebbfd460e..9cb3894e95b 100644 --- a/test/e2e_node/kubelet_test.go +++ b/test/e2e_node/kubelet_test.go @@ -184,13 +184,9 @@ var _ = Describe("Kubelet", func() { Expect(vs.CapacityBytes).NotTo(BeZero()) Expect(vs.AvailableBytes).NotTo(BeZero()) Expect(vs.UsedBytes).NotTo(BeZero()) - if strings.HasPrefix(vs.Name, "default-token-") { - volumeNames = append(volumeNames, "default-token-") - } else { - volumeNames = append(volumeNames, vs.Name) - } + volumeNames = append(volumeNames, vs.Name) } - Expect(volumeNames).To(ConsistOf("default-token-", "test-empty-dir")) + Expect(volumeNames).To(ConsistOf("test-empty-dir")) // fs usage (not for system containers) Expect(container.Rootfs).NotTo(BeNil(), spew.Sdump(container)) diff --git a/test/e2e_node/runner/run_e2e.go b/test/e2e_node/runner/run_e2e.go index 2e6921ba54c..e20c1328405 100644 --- a/test/e2e_node/runner/run_e2e.go +++ b/test/e2e_node/runner/run_e2e.go @@ -52,7 +52,7 @@ var kubeOutputRelPath = flag.String("k8s-build-output", "_output/local/bin/linux var kubeRoot = "" const buildScriptRelPath = "hack/build-go.sh" -const ginkoTestRelPath = "test/e2e_node" +const ginkgoTestRelPath = "test/e2e_node" const healthyTimeoutDuration = time.Minute * 3 func main() { @@ -158,9 +158,9 @@ func runTests(fullhost string) ([]byte, error) { glog.Infof("Kubelet host %s tunnel running on port %s", host, ah.LPort) u.Wait() glog.Infof("Running ginkgo tests against host %s", host) - ginkoTests := filepath.Join(kubeRoot, ginkoTestRelPath) + ginkgoTests := filepath.Join(kubeRoot, ginkgoTestRelPath) return exec.Command( - "ginkgo", ginkoTests, "--", + "ginkgo", ginkgoTests, "--", "--kubelet-address", fmt.Sprintf("http://127.0.0.1:%s", kh.LPort), "--api-server-address", fmt.Sprintf("http://127.0.0.1:%s", ah.LPort), "--node-name", fullhost, From 964dfa1ad46532b4a9fb594acfc8db8724cc9184 Mon Sep 17 00:00:00 2001 From: Casey D Date: Tue, 12 Jan 2016 14:25:44 -0800 Subject: [PATCH 15/18] Update Calico CoreOS doc to use CNI plugin, conformance. --- docs/getting-started-guides/README.md | 6 +- .../coreos/bare_metal_calico.md | 199 ++++++++++++++---- 2 files changed, 159 insertions(+), 46 deletions(-) diff --git a/docs/getting-started-guides/README.md b/docs/getting-started-guides/README.md index 383fc78bf76..9c86d1c87a3 100644 --- a/docs/getting-started-guides/README.md +++ b/docs/getting-started-guides/README.md @@ -173,14 +173,14 @@ Bare-metal | custom | Fedora | _none_ | [docs](fedora/fedor Bare-metal | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.md) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) libvirt | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.md) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) KVM | custom | Fedora | flannel | [docs](fedora/flannel_multi_node_cluster.md) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) -Mesos/Docker | custom | Ubuntu | Docker | [docs](mesos-docker.md) | [✓][4] | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) +Mesos/Docker | custom | Ubuntu | Docker | [docs](mesos-docker.md) | [✓][4] | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) Mesos/GCE | | | | [docs](mesos.md) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) DCOS | Marathon | CoreOS/Alpine | custom | [docs](dcos.md) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) AWS | CoreOS | CoreOS | flannel | [docs](coreos.md) | | Community GCE | CoreOS | CoreOS | flannel | [docs](coreos.md) | | Community ([@pires](https://github.com/pires)) Vagrant | CoreOS | CoreOS | flannel | [docs](coreos.md) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](coreos/bare_metal_offline.md) | | Community ([@jeffbean](https://github.com/jeffbean)) -Bare-metal | CoreOS | CoreOS | Calico | [docs](coreos/bare_metal_calico.md) | | Community ([@caseydavenport](https://github.com/caseydavenport)) +Bare-metal | CoreOS | CoreOS | Calico | [docs](coreos/bare_metal_calico.md) | [✓][5] | Community ([@caseydavenport](https://github.com/caseydavenport)) CloudStack | Ansible | CoreOS | flannel | [docs](cloudstack.md) | | Community ([@runseb](https://github.com/runseb)) Vmware | | Debian | OVS | [docs](vsphere.md) | | Community ([@pietern](https://github.com/pietern)) Bare-metal | custom | CentOS | _none_ | [docs](centos/centos_manual_config.md) | | Community ([@coolsvap](https://github.com/coolsvap)) @@ -226,6 +226,8 @@ Definition of columns: [3]: https://gist.github.com/erictune/2f39b22f72565365e59b [4]: https://gist.github.com/sttts/d27f3b879223895494d4 + +[5]: https://gist.github.com/caseydavenport/98ca87e709b21f03d195 diff --git a/docs/getting-started-guides/coreos/bare_metal_calico.md b/docs/getting-started-guides/coreos/bare_metal_calico.md index 73c2b431f72..dc45a18e60f 100644 --- a/docs/getting-started-guides/coreos/bare_metal_calico.md +++ b/docs/getting-started-guides/coreos/bare_metal_calico.md @@ -34,91 +34,202 @@ Documentation for other releases can be found at Bare Metal Kubernetes on CoreOS with Calico Networking ------------------------------------------ -This document describes how to deploy Kubernetes with Calico networking on _bare metal_ CoreOS. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-docker repository](https://github.com/projectcalico/calico-docker). +This document describes how to deploy Kubernetes with Calico networking on _bare metal_ CoreOS. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-containers repository](https://github.com/projectcalico/calico-containers). -To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-docker/tree/master/docs/kubernetes). +To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes). Specifically, this guide will have you do the following: -- Deploy a Kubernetes master node on CoreOS using cloud-config -- Deploy two Kubernetes compute nodes with Calico Networking using cloud-config +- Deploy a Kubernetes master node on CoreOS using cloud-config. +- Deploy two Kubernetes compute nodes with Calico Networking using cloud-config. +- Configure `kubectl` to access your cluster. -## Prerequisites +The resulting cluster will use SSL between Kubernetes components. It will run the SkyDNS service and kube-ui, and be fully conformant with the Kubernetes v1.1 conformance tests. -1. At least three bare-metal machines (or VMs) to work with. This guide will configure them as follows: - - 1 Kubernetes Master - - 2 Kubernetes Nodes -2. Your nodes should have IP connectivity. +## Prerequisites and Assumptions + +- At least three bare-metal machines (or VMs) to work with. This guide will configure them as follows: + - 1 Kubernetes Master + - 2 Kubernetes Nodes +- Your nodes should have IP connectivity to each other and the internet. +- This guide assumes a DHCP server on your network to assign server IPs. +- This guide uses `192.168.0.0/16` as the subnet from which pod IP addresses are assigned. If this overlaps with your host subnet, you will need to configure Calico to use a different [IP pool](https://github.com/projectcalico/calico-containers/blob/master/docs/calicoctl/pool.md#calicoctl-pool-commands). ## Cloud-config This guide will use [cloud-config](https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/) to configure each of the nodes in our Kubernetes cluster. We'll use two cloud-config files: -- `master-config.yaml`: Cloud-config for the Kubernetes master -- `node-config.yaml`: Cloud-config for each Kubernetes node +- `master-config.yaml`: cloud-config for the Kubernetes master +- `node-config.yaml`: cloud-config for each Kubernetes node ## Download CoreOS -Let's download the CoreOS bootable ISO. We'll use this image to boot and install CoreOS on each server. - -``` -wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_iso_image.iso -``` - -> You can also download the ISO from the [CoreOS website](https://coreos.com/docs/running-coreos/platforms/iso/). +Download the stable CoreOS bootable ISO from the [CoreOS website](https://coreos.com/docs/running-coreos/platforms/iso/). ## Configure the Kubernetes Master -Once you've downloaded the image, use it to boot your Kubernetes master. Once booted, you should be automatically logged in as the `core` user. +1. Once you've downloaded the ISO image, burn the ISO to a CD/DVD/USB key and boot from it (if using a virtual machine you can boot directly from the ISO). Once booted, you should be automatically logged in as the `core` user at the terminal. At this point CoreOS is running from the ISO and it hasn't been installed yet. -*On another machine*, download the `calico-kubernetes` repository, which contains the necessary cloud-config files for this guide, and make a copy of the file `master-config-template.yaml`. +2. *On another machine*, download the the [master cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/master-config-template.yaml) and save it as `master-config.yaml`. + +3. Replace the following variables in the `master-config.yaml` file. + + - ``: The public key you will use for SSH access to this server. See [generating ssh keys](https://help.github.com/articles/generating-ssh-keys/) + +4. Copy the edited `master-config.yaml` to your Kubernetes master machine (using a USB stick, for example). + +5. The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS and configure the machine using a cloud-config file. The following command will download and install stable CoreOS using the `master-config.yaml` file we just created for configuration. Run this on the Kubernetes master. + + > **Warning:** this is a destructive operation that erases disk `sda` on your server. + + ``` + sudo coreos-install -d /dev/sda -C stable -c master-config.yaml + ``` + +6. Once complete, restart the server and boot from `/dev/sda` (you may need to remove the ISO image). When it comes back up, you should have SSH access as the `core` user using the public key provided in the `master-config.yaml` file. + +### Configure TLS + +The master requires the CA certificate, `ca.pem`; its own certificate, `apiserver.pem` and its private key, `apiserver-key.pem`. This [CoreOS guide](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to generate these. + +1. Generate the necessary certificates for the master. This [guide for generating Kubernetes TLS Assets](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to use OpenSSL to generate the required assets. + +2. Send the three files to your master host (using `scp` for example). + +3. Move them to the `/etc/kubernetes/ssl` folder and ensure that only the root user can read the key: + + ``` + # Move keys + sudo mkdir -p /etc/kubernetes/ssl/ + sudo mv -t /etc/kubernetes/ssl/ ca.pem apiserver.pem apiserver-key.pem + + # Set Permissions + sudo chmod 600 /etc/kubernetes/ssl/apiserver-key.pem + sudo chown root:root /etc/kubernetes/ssl/apiserver-key.pem + ``` + +4. Restart the kubelet to pick up the changes: + + ``` + sudo systemctl restart kubelet + ``` + +## Configure the compute nodes + +The following steps will set up a single Kubernetes node for use as a compute host. Run these steps to deploy each Kubernetes node in your cluster. + +1. Boot up the node machine using the bootable ISO we downloaded earlier. You should be automatically logged in as the `core` user. + +2. Make a copy of the [node cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/node-config-template.yaml) for this machine. + +3. Replace the following placeholders in the `node-config.yaml` file to match your deployment. + + - ``: Hostname for this node (e.g. kube-node1, kube-node2) + - ``: The public key you will use for SSH access to this server. + - ``: The IPv4 address of the Kubernetes master. + +4. Replace the following placeholders with the contents of their respective files. + + - ``: Complete contents of `ca.pem` + - ``: Complete contents of `ca-key.pem` + + > **Important:** in a production deployment, embedding the secret key in cloud-config is a bad idea! In production you should use an appropriate secret manager. + + > **Important:** Make sure you indent the entire file to match the indentation of the placeholder. For example: + > + > ``` + > - path: /etc/kubernetes/ssl/ca.pem + > owner: core + > permissions: 0644 + > content: | + > + > ``` + > + > should look like this once the certificate is in place: + > + > ``` + > - path: /etc/kubernetes/ssl/ca.pem + > owner: core + > permissions: 0644 + > content: | + > -----BEGIN CERTIFICATE----- + > MIIC9zCCAd+gAwIBAgIJAJMnVnhVhy5pMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV + > ...... + > QHwi1rNc8eBLNrd4BM/A1ZeDVh/Q9KxN+ZG/hHIXhmWKgN5wQx6/81FIFg== + > -----END CERTIFICATE----- + > ``` + +5. Move the modified `node-config.yaml` to your Kubernetes node machine and install and configure CoreOS on the node using the following command. + + > **Warning:** this is a destructive operation that erases disk `sda` on your server. + + ``` + sudo coreos-install -d /dev/sda -C stable -c node-config.yaml + ``` + +6. Once complete, restart the server and boot into `/dev/sda`. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `node-config.yaml` file. It will take some time for the node to be fully configured. + +## Configure Kubeconfig + +To administer your cluster from a separate host, you will need the client and admin certificates generated earlier (`ca.pem`, `admin.pem`, `admin-key.pem`). With certificates in place, run the following commands with the appropriate filepaths. ``` -wget https://github.com/projectcalico/calico-kubernetes/archive/master.tar.gz -tar -xvf master.tar.gz -cp calico-kubernetes-master/config/cloud-config/master-config-template.yaml master-config.yaml +kubectl config set-cluster calico-cluster --server=https:// --certificate-authority= +kubectl config set-credentials calico-admin --certificate-authority= --client-key= --client-certificate= +kubectl config set-context calico --cluster=calico-cluster --user=calico-admin +kubectl config use-context calico ``` -You'll need to replace the following variables in the `master-config.yaml` file. -- ``: The public key you will use for SSH access to this server. +Check your work with `kubectl get nodes`. -Move the edited `master-config.yaml` to your Kubernetes master machine. The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS and configure the machine using a cloud-config file. The following command will download and install stable CoreOS using the `master-config.yaml` file we just created for configuration. Run this on the Kubernetes master. +## Install the DNS Addon + +Most Kubernetes deployments will require the DNS addon for service discovery. To install DNS, create the skydns service and replication controller provided. ``` -sudo coreos-install -d /dev/sda -C stable -c master-config.yaml +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml ``` -Once complete, eject the bootable ISO and restart the server. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `master-config.yaml` file. It may take a few minutes for the machine to be fully configured with Kubernetes and Calico. +## Install the Kubernetes UI Addon (Optional) -## Configure the compute hosts - ->The following steps will set up a single Kubernetes node for use as a compute host. Run these steps to deploy each Kubernetes node in your cluster. - -First, boot up the node machine using the bootable ISO we downloaded earlier. You should be automatically logged in as the `core` user. - -Make a copy of the `node-config-template.yaml` in the `calico-kubernetes` repository for this machine. +The Kubernetes UI can be installed using `kubectl` to run the following manifest file. ``` -cp calico-kubernetes-master/config/cloud-config/node-config-template.yaml node-config.yaml +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kube-ui/kube-ui.yaml ``` -You'll need to replace the following variables in the `node-config.yaml` file to match your deployment. -- ``: Hostname for this node (e.g. kube-node1, kube-node2) -- ``: The public key you will use for SSH access to this server. -- ``: The IPv4 address of the Kubernetes master. +## Launch other Services With Calico-Kubernetes -Move the modified `node-config.yaml` to your Kubernetes node machine and install and configure CoreOS on the node using the following command. +At this point, you have a fully functioning cluster running on Kubernetes with a master and two nodes networked with Calico. You can now follow any of the [standard documentation](../../../examples/) to set up other services on your cluster. + +## Connectivity to outside the cluster + +Because containers in this guide have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a production data center deployment, NAT is not always necessary, since Calico can peer with the data center's border routers over BGP. + +### NAT on the nodes + +The simplest method for enabling connectivity from containers to the internet is to use outgoing NAT on your Kubernetes nodes. + +Calico can provide outgoing NAT for containers. To enable it, use the following `calicoctl` command: ``` -sudo coreos-install -d /dev/sda -C stable -c node-config.yaml +ETCD_AUTHORITY= calicoctl pool add --nat-outgoing ``` -Once complete, eject the bootable disc and restart the server. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `node-config.yaml` file. It will take some time for the node to be fully configured. Once fully configured, you can check that the node is running with the following command on the Kubernetes master. +By default, `` will be `192.168.0.0/16`. You can find out which pools have been configured with the following command: ``` -kubectl get nodes +ETCD_AUTHORITY= calicoctl pool show ``` +### NAT at the border router + +In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). + +The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). + +[![Analytics](https://ga-beacon.appspot.com/UA-52125893-3/kubernetes/docs/getting-started-guides/coreos/bare_metal_calico.md?pixel)](https://github.com/igrigorik/ga-beacon) + [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/coreos/bare_metal_calico.md?pixel)]() From da0d37f1e07f82ece71e2646d961c1e8cfc2b22d Mon Sep 17 00:00:00 2001 From: "Tim St. Clair" Date: Fri, 5 Feb 2016 13:36:08 -0800 Subject: [PATCH 16/18] Fix panic from multiple probe cleanup calls. --- pkg/kubelet/prober/manager.go | 4 ++-- pkg/kubelet/prober/manager_test.go | 27 +++++++++++++++++++++++++++ pkg/kubelet/prober/worker.go | 17 +++++++++++++---- pkg/kubelet/prober/worker_test.go | 4 +++- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/pkg/kubelet/prober/manager.go b/pkg/kubelet/prober/manager.go index 4541c21d5c8..2282d8e6285 100644 --- a/pkg/kubelet/prober/manager.go +++ b/pkg/kubelet/prober/manager.go @@ -171,7 +171,7 @@ func (m *manager) RemovePod(pod *api.Pod) { for _, probeType := range [...]probeType{readiness, liveness} { key.probeType = probeType if worker, ok := m.workers[key]; ok { - close(worker.stop) + worker.stop() } } } @@ -188,7 +188,7 @@ func (m *manager) CleanupPods(activePods []*api.Pod) { for key, worker := range m.workers { if _, ok := desiredPods[key.podUID]; !ok { - close(worker.stop) + worker.stop() } } } diff --git a/pkg/kubelet/prober/manager_test.go b/pkg/kubelet/prober/manager_test.go index f01ba50cf04..ac64843f0ff 100644 --- a/pkg/kubelet/prober/manager_test.go +++ b/pkg/kubelet/prober/manager_test.go @@ -18,6 +18,7 @@ package prober import ( "fmt" + "strconv" "testing" "time" @@ -26,6 +27,7 @@ import ( kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/prober/results" "k8s.io/kubernetes/pkg/probe" + "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/wait" ) @@ -173,6 +175,31 @@ func TestCleanupPods(t *testing.T) { } } +func TestCleanupRepeated(t *testing.T) { + m := newTestManager() + defer cleanup(t, m) + podTemplate := api.Pod{ + Spec: api.PodSpec{ + Containers: []api.Container{{ + Name: "prober1", + ReadinessProbe: defaultProbe, + LivenessProbe: defaultProbe, + }}, + }, + } + + const numTestPods = 100 + for i := 0; i < numTestPods; i++ { + pod := podTemplate + pod.UID = types.UID(strconv.Itoa(i)) + m.AddPod(&pod) + } + + for i := 0; i < 10; i++ { + m.CleanupPods([]*api.Pod{}) + } +} + func TestUpdatePodStatus(t *testing.T) { unprobed := api.ContainerStatus{ Name: "unprobed_container", diff --git a/pkg/kubelet/prober/worker.go b/pkg/kubelet/prober/worker.go index 60f4c6d6747..c3d0f2241c4 100644 --- a/pkg/kubelet/prober/worker.go +++ b/pkg/kubelet/prober/worker.go @@ -32,8 +32,8 @@ import ( // stop channel is closed. The worker uses the probe Manager's statusManager to get up-to-date // container IDs. type worker struct { - // Channel for stopping the probe, it should be closed to trigger a stop. - stop chan struct{} + // Channel for stopping the probe. + stopCh chan struct{} // The pod containing this probe (read-only) pod *api.Pod @@ -70,7 +70,7 @@ func newWorker( container api.Container) *worker { w := &worker{ - stop: make(chan struct{}), + stopCh: make(chan struct{}, 1), // Buffer so stop() can be non-blocking. pod: pod, container: container, probeType: probeType, @@ -109,7 +109,7 @@ probeLoop: for w.doProbe() { // Wait for next probe tick. select { - case <-w.stop: + case <-w.stopCh: break probeLoop case <-probeTicker.C: // continue @@ -117,6 +117,15 @@ probeLoop: } } +// stop stops the probe worker. The worker handles cleanup and removes itself from its manager. +// It is safe to call stop multiple times. +func (w *worker) stop() { + select { + case w.stopCh <- struct{}{}: + default: // Non-blocking. + } +} + // doProbe probes the container once and records the result. // Returns whether the worker should continue. func (w *worker) doProbe() (keepGoing bool) { diff --git a/pkg/kubelet/prober/worker_test.go b/pkg/kubelet/prober/worker_test.go index 192bc30c0c5..26a87dd2dcf 100644 --- a/pkg/kubelet/prober/worker_test.go +++ b/pkg/kubelet/prober/worker_test.go @@ -236,7 +236,9 @@ func TestCleanUp(t *testing.T) { } } - close(w.stop) + for i := 0; i < 10; i++ { + w.stop() // Stop should be callable multiple times without consequence. + } if err := waitForWorkerExit(m, []probeKey{key}); err != nil { t.Fatalf("[%s] error waiting for worker exit: %v", probeType, err) } From df04225eca30413a4596c53f0defad310dd5d833 Mon Sep 17 00:00:00 2001 From: Dawn Chen Date: Mon, 8 Feb 2016 11:27:09 -0800 Subject: [PATCH 17/18] Collect dmesg from nodes --- test/e2e/core.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/core.go b/test/e2e/core.go index e0adc5754dd..3dd1896a80d 100644 --- a/test/e2e/core.go +++ b/test/e2e/core.go @@ -57,6 +57,7 @@ func CoreDump(dir string) { cmds = append(cmds, []command{ {"cat /var/log/kubelet.log", "kubelet"}, {"cat /var/log/supervisor/supervisord.log", "supervisord"}, + {"cat /var/log/dmesg", "dmesg"}, }...) } From 512154f25e67339827ca8a1490d3bdab0af3c3a0 Mon Sep 17 00:00:00 2001 From: derekwaynecarr Date: Mon, 8 Feb 2016 17:36:42 -0500 Subject: [PATCH 18/18] Unbound cluster ip range in vagrant --- cluster/vagrant/config-default.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cluster/vagrant/config-default.sh b/cluster/vagrant/config-default.sh index 3172a8ace41..3545aa3ddf6 100755 --- a/cluster/vagrant/config-default.sh +++ b/cluster/vagrant/config-default.sh @@ -46,6 +46,8 @@ for ((i=0; i < NUM_NODES; i++)) do VAGRANT_NODE_NAMES[$i]="node-$((i+1))" done +CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.246.0.0/16}" + SERVICE_CLUSTER_IP_RANGE=10.247.0.0/16 # formerly PORTAL_NET # Since this isn't exposed on the network, default to a simple user/passwd