From 5028770b5654066c3fddf339128d3e1bba954855 Mon Sep 17 00:00:00 2001 From: Naadir Jeewa Date: Wed, 25 Mar 2020 20:13:59 +0000 Subject: [PATCH] bootstrap: Retry node joins as well Signed-off-by: Naadir Jeewa --- .../controllers/kubeadmconfig_controller.go | 31 +++++----- .../kubeadm/internal/cloudinit/cloudinit.go | 58 ++++++++++++++++--- .../internal/cloudinit/controlplane_join.go | 47 ++------------- .../cloudinit/kubeadm-bootstrap-script.sh | 12 +++- bootstrap/kubeadm/internal/cloudinit/node.go | 8 ++- .../cloudinit/zz_generated.bindata.go | 4 +- 6 files changed, 88 insertions(+), 72 deletions(-) diff --git a/bootstrap/kubeadm/controllers/kubeadmconfig_controller.go b/bootstrap/kubeadm/controllers/kubeadmconfig_controller.go index 31ef04533367..49b0d804ecfe 100644 --- a/bootstrap/kubeadm/controllers/kubeadmconfig_controller.go +++ b/bootstrap/kubeadm/controllers/kubeadmconfig_controller.go @@ -422,12 +422,13 @@ func (r *KubeadmConfigReconciler) joinWorker(ctx context.Context, scope *Scope) cloudJoinData, err := cloudinit.NewNode(&cloudinit.NodeInput{ BaseUserData: cloudinit.BaseUserData{ - AdditionalFiles: scope.Config.Spec.Files, - NTP: scope.Config.Spec.NTP, - PreKubeadmCommands: scope.Config.Spec.PreKubeadmCommands, - PostKubeadmCommands: scope.Config.Spec.PostKubeadmCommands, - Users: scope.Config.Spec.Users, - KubeadmVerbosity: verbosityFlag, + AdditionalFiles: scope.Config.Spec.Files, + NTP: scope.Config.Spec.NTP, + PreKubeadmCommands: scope.Config.Spec.PreKubeadmCommands, + PostKubeadmCommands: scope.Config.Spec.PostKubeadmCommands, + Users: scope.Config.Spec.Users, + KubeadmVerbosity: verbosityFlag, + UseExperimentalRetry: scope.Config.Spec.UseExperimentalRetryJoin, }, JoinConfiguration: joinData, }) @@ -489,16 +490,16 @@ func (r *KubeadmConfigReconciler) joinControlplane(ctx context.Context, scope *S } cloudJoinData, err := cloudinit.NewJoinControlPlane(&cloudinit.ControlPlaneJoinInput{ - JoinConfiguration: joinData, - Certificates: certificates, - UseExperimentalRetry: scope.Config.Spec.UseExperimentalRetryJoin, + JoinConfiguration: joinData, + Certificates: certificates, BaseUserData: cloudinit.BaseUserData{ - AdditionalFiles: scope.Config.Spec.Files, - NTP: scope.Config.Spec.NTP, - PreKubeadmCommands: scope.Config.Spec.PreKubeadmCommands, - PostKubeadmCommands: scope.Config.Spec.PostKubeadmCommands, - Users: scope.Config.Spec.Users, - KubeadmVerbosity: verbosityFlag, + AdditionalFiles: scope.Config.Spec.Files, + NTP: scope.Config.Spec.NTP, + PreKubeadmCommands: scope.Config.Spec.PreKubeadmCommands, + PostKubeadmCommands: scope.Config.Spec.PostKubeadmCommands, + Users: scope.Config.Spec.Users, + KubeadmVerbosity: verbosityFlag, + UseExperimentalRetry: scope.Config.Spec.UseExperimentalRetryJoin, }, }) if err != nil { diff --git a/bootstrap/kubeadm/internal/cloudinit/cloudinit.go b/bootstrap/kubeadm/internal/cloudinit/cloudinit.go index 5536e14c96fc..9fe181ae4add 100644 --- a/bootstrap/kubeadm/internal/cloudinit/cloudinit.go +++ b/bootstrap/kubeadm/internal/cloudinit/cloudinit.go @@ -18,6 +18,7 @@ package cloudinit import ( "bytes" + "fmt" "text/template" "github.com/pkg/errors" @@ -25,21 +26,43 @@ import ( ) const ( - cloudConfigHeader = `## template: jinja + standardJoinCommand = "kubeadm join --config /tmp/kubeadm-join-config.yaml %s" + retriableJoinScriptName = "/usr/local/bin/kubeadm-bootstrap-script" + retriableJoinScriptOwner = "root" + retriableJoinScriptPermissions = "0755" + cloudConfigHeader = `## template: jinja #cloud-config ` ) // BaseUserData is shared across all the various types of files written to disk. type BaseUserData struct { - Header string - PreKubeadmCommands []string - PostKubeadmCommands []string - AdditionalFiles []bootstrapv1.File - WriteFiles []bootstrapv1.File - Users []bootstrapv1.User - NTP *bootstrapv1.NTP - KubeadmVerbosity string + Header string + PreKubeadmCommands []string + PostKubeadmCommands []string + AdditionalFiles []bootstrapv1.File + WriteFiles []bootstrapv1.File + Users []bootstrapv1.User + NTP *bootstrapv1.NTP + ControlPlane bool + UseExperimentalRetry bool + KubeadmCommand string + KubeadmVerbosity string +} + +func (input *BaseUserData) prepare() error { + input.Header = cloudConfigHeader + input.WriteFiles = append(input.WriteFiles, input.AdditionalFiles...) + input.KubeadmCommand = fmt.Sprintf(standardJoinCommand, input.KubeadmVerbosity) + if input.UseExperimentalRetry { + input.KubeadmCommand = retriableJoinScriptName + joinScriptFile, err := generateBootstrapScript(input) + if err != nil { + return errors.Wrap(err, "failed to generate user data for machine joining control plane") + } + input.WriteFiles = append(input.WriteFiles, *joinScriptFile) + } + return nil } func generate(kind string, tpl string, data interface{}) ([]byte, error) { @@ -72,3 +95,20 @@ func generate(kind string, tpl string, data interface{}) ([]byte, error) { return out.Bytes(), nil } + +func generateBootstrapScript(input interface{}) (*bootstrapv1.File, error) { + scriptBytes, err := bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptShBytes() + if err != nil { + return nil, errors.Wrap(err, "couldn't read bootstrap script") + } + joinScript, err := generate("JoinScript", string(scriptBytes), input) + if err != nil { + return nil, errors.Wrap(err, "failed to bootstrap script for machine joins") + } + return &bootstrapv1.File{ + Path: retriableJoinScriptName, + Owner: retriableJoinScriptOwner, + Permissions: retriableJoinScriptPermissions, + Content: string(joinScript), + }, nil +} diff --git a/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go b/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go index ae0ff0520f7f..6cd2c23c96f1 100644 --- a/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go +++ b/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go @@ -17,22 +17,14 @@ limitations under the License. package cloudinit import ( - "fmt" - "github.com/pkg/errors" - bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha3" "sigs.k8s.io/cluster-api/util/secret" ) const ( - standardJoinCommand = "kubeadm join --config /tmp/kubeadm-controlplane-join-config.yaml %s" - retriableJoinScriptName = "/usr/local/bin/kubeadm-bootstrap-script" - retriableJoinScriptOwner = "root" - retriableJoinScriptPermissions = "0755" - controlPlaneJoinCloudInit = `{{.Header}} {{template "files" .WriteFiles}} -- path: /tmp/kubeadm-controlplane-join-config.yaml +- path: /tmp/kubeadm-join-config.yaml owner: root:root permissions: '0640' content: | @@ -50,24 +42,17 @@ runcmd: type ControlPlaneJoinInput struct { BaseUserData secret.Certificates - UseExperimentalRetry bool - KubeadmCommand string - BootstrapToken string - JoinConfiguration string + BootstrapToken string + JoinConfiguration string } // NewJoinControlPlane returns the user data string to be used on a new control plane instance. func NewJoinControlPlane(input *ControlPlaneJoinInput) ([]byte, error) { - input.Header = cloudConfigHeader // TODO: Consider validating that the correct certificates exist. It is different for external/stacked etcd input.WriteFiles = input.Certificates.AsFiles() - input.WriteFiles = append(input.WriteFiles, input.AdditionalFiles...) - input.KubeadmCommand = fmt.Sprintf(standardJoinCommand, input.KubeadmVerbosity) - if input.UseExperimentalRetry { - err := input.useBootstrapScript() - if err != nil { - return nil, err - } + input.ControlPlane = true + if err := input.prepare(); err != nil { + return nil, err } userData, err := generate("JoinControlplane", controlPlaneJoinCloudInit, input) if err != nil { @@ -76,23 +61,3 @@ func NewJoinControlPlane(input *ControlPlaneJoinInput) ([]byte, error) { return userData, err } - -func (input *ControlPlaneJoinInput) useBootstrapScript() error { - scriptBytes, err := bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptShBytes() - if err != nil { - return errors.Wrap(err, "couldn't read bootstrap script") - } - joinScript, err := generate("JoinControlplaneScript", string(scriptBytes), input) - if err != nil { - return errors.Wrap(err, "failed to generate user data for machine joining control plane") - } - joinScriptFile := bootstrapv1.File{ - Path: retriableJoinScriptName, - Owner: retriableJoinScriptOwner, - Permissions: retriableJoinScriptPermissions, - Content: string(joinScript), - } - input.WriteFiles = append(input.WriteFiles, joinScriptFile) - input.KubeadmCommand = retriableJoinScriptName - return nil -} diff --git a/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh b/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh index 8b42d367ec3b..4b672905cccf 100644 --- a/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh +++ b/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh @@ -22,10 +22,12 @@ log::error_exit() { local code="${2}" log::error "${message}" + # {{ if .ControlPlane }} log::info "Removing member from cluster status" kubeadm reset -f update-cluster-status || true log::info "Removing etcd member" kubeadm reset -f remove-etcd-member || true + # {{ end }} log::info "Resetting kubeadm" kubeadm reset -f || true log::error "cluster.x-k8s.io kubeadm bootstrap script $0 exiting with status ${code}" @@ -86,7 +88,7 @@ function retry-command() { until [ $n -ge 5 ]; do log::info "running '$*'" # shellcheck disable=SC1083 - "$@" --config /tmp/kubeadm-controlplane-join-config.yaml {{.KubeadmVerbosity}} + "$@" --config /tmp/kubeadm-join-config.yaml {{.KubeadmVerbosity}} kubeadm_return=$? check_kubeadm_command "'$*'" "${kubeadm_return}" if [ ${kubeadm_return} -eq 0 ]; then @@ -104,26 +106,32 @@ function retry-command() { fi } +# {{ if .ControlPlane }} function try-or-die-command() { local kubeadm_return log::info "running '$*'" # shellcheck disable=SC1083 - "$@" --config /tmp/kubeadm-controlplane-join-config.yaml {{.KubeadmVerbosity}} + "$@" --config /tmp/kubeadm-join-config.yaml {{.KubeadmVerbosity}} kubeadm_return=$? check_kubeadm_command "'$*'" "${kubeadm_return}" if [ ${kubeadm_return} -ne 0 ]; then log::error_exit "fatal error, exiting" fi } +# {{ end }} retry-command kubeadm join phase preflight +# {{ if .ControlPlane }} retry-command kubeadm join phase control-plane-prepare download-certs retry-command kubeadm join phase control-plane-prepare certs retry-command kubeadm join phase control-plane-prepare kubeconfig retry-command kubeadm join phase control-plane-prepare control-plane +# {{ end }} retry-command kubeadm join phase kubelet-start +# {{ if .ControlPlane }} try-or-die-command kubeadm join phase control-plane-join etcd retry-command kubeadm join phase control-plane-join update-status retry-command kubeadm join phase control-plane-join mark-control-plane +# {{ end }} log::success_exit diff --git a/bootstrap/kubeadm/internal/cloudinit/node.go b/bootstrap/kubeadm/internal/cloudinit/node.go index f67563f155bf..a7374a978877 100644 --- a/bootstrap/kubeadm/internal/cloudinit/node.go +++ b/bootstrap/kubeadm/internal/cloudinit/node.go @@ -19,7 +19,7 @@ package cloudinit const ( nodeCloudInit = `{{.Header}} {{template "files" .WriteFiles}} -- path: /tmp/kubeadm-node.yaml +- path: /tmp/kubeadm-join-config.yaml owner: root:root permissions: '0640' content: | @@ -27,7 +27,7 @@ const ( {{.JoinConfiguration | Indent 6}} runcmd: {{- template "commands" .PreKubeadmCommands }} - - 'kubeadm join --config /tmp/kubeadm-node.yaml {{.KubeadmVerbosity}}' + - {{ .KubeadmCommand }} {{- template "commands" .PostKubeadmCommands }} {{- template "ntp" .NTP }} {{- template "users" .Users }} @@ -37,12 +37,14 @@ runcmd: // NodeInput defines the context to generate a node user data. type NodeInput struct { BaseUserData - JoinConfiguration string } // NewNode returns the user data string to be used on a node instance. func NewNode(input *NodeInput) ([]byte, error) { + if err := input.prepare(); err != nil { + return nil, err + } input.Header = cloudConfigHeader input.WriteFiles = append(input.WriteFiles, input.AdditionalFiles...) return generate("Node", nodeCloudInit, input) diff --git a/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go b/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go index d0039238ed87..d2bcb8fc1344 100644 --- a/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go +++ b/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go @@ -93,7 +93,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x71\x4f\x1b\xb9\x13\xfd\x7f\x3f\xc5\x23\x89\x7e\x85\xc2\x26\x21\x55\x7f\xaa\x40\xdc\x5d\x8e\xb6\xba\xa8\x3d\x38\x11\xda\xaa\xaa\x2a\xe4\xec\xce\xee\xfa\xf0\xda\x5b\xdb\xdb\x10\x51\xbe\xfb\xc9\x5e\x27\x4d\x48\x80\x96\xbb\xfc\x15\x8d\x67\xde\xcc\xbc\x79\x1e\x6f\x7b\xab\x37\xe1\xb2\x37\x61\xa6\x88\xda\x38\x56\xd5\x4c\xf3\xbc\xb0\x18\xf4\x07\x7d\x9c\x17\x84\x37\xf5\x84\xb4\x24\x4b\x06\xc3\xda\x16\x4a\x9b\x6e\xd4\x8e\xda\x78\xcb\x13\x92\x86\x52\xd4\x32\x25\x0d\x5b\x10\x86\x15\x4b\x0a\x9a\x9f\xec\xe1\x3d\x69\xc3\x95\xc4\xa0\xdb\xc7\xb6\x73\x68\x85\xa3\xd6\xce\x61\xd4\xc6\x4c\xd5\x28\xd9\x0c\x52\x59\xd4\x86\x60\x0b\x6e\x90\x71\x41\xa0\xab\x84\x2a\x0b\x2e\x91\xa8\xb2\x12\x9c\xc9\x84\x30\xe5\xb6\xf0\x69\x02\x48\x37\x6a\xe3\x63\x80\x50\x13\xcb\xb8\x04\x43\xa2\xaa\x19\x54\xb6\xec\x07\x66\x7d\xc1\xee\x57\x58\x5b\x1d\xf4\x7a\xd3\xe9\xb4\xcb\x7c\xb1\x5d\xa5\xf3\x9e\x68\x1c\x4d\xef\xed\xe8\xf8\xd5\xc9\xf8\x55\x3c\xe8\xf6\x7d\xc8\x3b\x29\xc8\x18\x68\xfa\x52\x73\x4d\x29\x26\x33\xb0\xaa\x12\x3c\x61\x13\x41\x10\x6c\x0a\xa5\xc1\x72\x4d\x94\xc2\x2a\x57\xef\x54\x73\xcb\x65\xbe\x07\xa3\x32\x3b\x65\x9a\xa2\x36\x52\x6e\xac\xe6\x93\xda\xae\x90\x35\xaf\x8e\x9b\x15\x07\x25\xc1\x24\x5a\xc3\x31\x46\xe3\x16\x7e\x1f\x8e\x47\xe3\xbd\xa8\x8d\x0f\xa3\xf3\x3f\x4e\xdf\x9d\xe3\xc3\xf0\xec\x6c\x78\x72\x3e\x7a\x35\xc6\xe9\x19\x8e\x4f\x4f\x5e\x8e\xce\x47\xa7\x27\x63\x9c\xbe\xc6\xf0\xe4\x23\xde\x8c\x4e\x5e\xee\x81\xb8\x2d\x48\x83\xae\x2a\xed\xea\x57\x1a\xdc\xd1\x48\xa9\xe3\x6c\x4c\xb4\x52\x40\xa6\x9a\x82\x4c\x45\x09\xcf\x78\x02\xc1\x64\x5e\xb3\x9c\x90\xab\xaf\xa4\x25\x97\x39\x2a\xd2\x25\x37\x6e\x98\x06\x4c\xa6\x51\x1b\x82\x97\xdc\x32\xeb\x2d\x6b\x4d\x75\x23\x27\x10\x95\xbb\x56\x48\x6b\x47\x92\x4c\x41\x57\xdc\xba\x02\x86\x3a\x37\x07\x7e\x20\x9d\x7d\xfc\x49\xc6\xb8\x5c\x56\x41\xa8\xfc\xfb\x90\x7d\x58\xe3\x34\xf0\x3a\x6c\x70\x12\x95\x7a\x5f\x4d\xb6\xd6\x32\x12\x2a\x3f\x38\xf0\x27\x17\x0e\x7d\x7b\x07\xd7\x11\x20\x54\xc2\x04\xca\x06\xf9\xa8\xd5\xb9\xde\xbf\x69\x2d\xcc\x0e\xc1\xd9\x06\x37\xad\xc8\x1b\xe7\x08\x68\x75\xae\x43\x4c\x70\xcf\x0f\x0e\xb8\xcc\x14\x5a\x67\x54\xaa\xaf\x8e\x87\x92\xca\x09\x69\x64\x5a\x95\x48\x44\x6d\x2c\x69\x18\xcb\x6c\x6d\x5c\xc4\x65\x3d\x21\x96\x96\xd0\x64\xc8\x22\xce\x50\x57\x29\xb3\x14\x07\xcf\xb8\xf1\xc4\xb7\x6f\xb0\xba\xa6\x3b\x52\x90\x4d\xd2\x90\x67\x23\xa6\x76\x8e\x14\x3b\xb7\x38\x94\x73\x07\xa0\x21\xeb\xb4\x38\x87\xd8\x88\x76\x2b\x34\x10\x11\x0a\xee\x5e\xc5\x97\x2f\x4c\x97\xab\x45\xdc\x44\x29\x6b\xac\x66\x15\x4c\xa2\x79\x65\xd1\xe9\xfb\xb1\xba\x34\x7e\x74\xa1\xc5\xce\xb5\xa3\xd9\xd3\xe8\x8e\x1d\xb5\xc1\x70\x13\x35\x43\x33\x75\x92\x90\x31\xab\x63\x5b\x14\xff\x53\x05\x64\x5c\x72\x53\x50\xba\xc8\xd6\x77\x59\x6e\x09\x70\x52\x5b\x5c\x12\x55\xc8\x15\x97\x79\x77\x49\x39\xf7\x8b\xc6\xf2\x92\x8c\x65\x65\x75\xd4\xd9\x76\xc3\x44\x1c\x73\xa3\xe2\x17\xff\xef\xef\x1f\x19\x4a\x94\x4c\xcd\x8e\xcb\x9b\x14\x0a\xad\xad\xad\x2d\x7c\xea\x5c\x2f\x62\x6e\x3e\xc3\xe3\xe0\x97\xff\x0d\x22\xc0\x14\x3c\xb3\x11\xfc\x8d\x0b\x89\x0e\x91\xaa\xc8\x6d\xa6\x06\xc0\xfd\x5b\x52\x61\x88\x4b\x95\xa4\xa6\xa5\xbf\x34\x97\x16\x6c\x4e\xb3\xe0\x92\xba\xc0\x6b\xa5\x4b\x66\x6d\xb3\x84\x4c\xa1\xa6\xa8\x2b\xf8\x75\x68\xac\x26\x56\xba\x85\xa8\x6a\x5b\xd5\x36\xf4\xed\x48\x0e\x6d\xff\x54\x7f\xbb\xbb\xbb\x1b\xfb\x7b\x4c\x6f\x4b\x7d\x25\x05\x25\x97\x17\x61\xc4\x17\x89\x2a\x4b\x26\xd3\x95\xb1\x04\xdb\x7d\x77\x19\x48\x98\xa1\xb9\xf2\xc0\x65\x04\xb4\xfa\xad\x1d\x5f\xc1\x92\xb4\xbe\x5f\x81\x4a\x69\xc7\x59\x50\x62\x56\x0b\xd0\x15\x25\xb5\xdb\x69\xbe\x0d\x07\xe5\xd3\x7a\x74\xe0\xf0\xd0\x41\xee\x2f\x43\x86\xfb\xb2\x86\x99\x31\x2e\x28\x05\x4b\x1c\xd8\xb6\xd9\xb9\x07\x6f\xf0\x23\x78\x95\xa6\x4c\xf8\x77\xd9\x73\x15\x34\x9d\xd6\xda\x5d\xbc\xcd\xb8\xcf\xd6\x70\x2f\x9a\xab\xb8\x06\xfe\x95\x09\x9e\xfa\x55\x1e\x70\xef\x2c\xf6\xe9\x0f\x94\x5a\xcb\x4b\xa9\xa6\x73\xa8\xf9\x38\xee\x84\x24\xc3\x12\xa7\x81\xac\x96\x9e\x2c\xb7\xd9\xf5\x2c\x5e\x15\x81\x3c\xea\x2f\x66\x3e\x97\x49\x78\x01\x80\x5a\x5a\x2e\xf0\x09\x1d\x89\x38\x27\x3c\xc7\xe7\x85\xf0\x96\xc6\xae\x6b\xe9\x5f\xb2\x27\x9d\xa7\x4f\x9a\xf4\x6d\x98\x82\x84\x68\x08\x4d\xb9\x71\x6f\xfa\xd1\xf8\x78\xbf\xff\xe2\x99\x3f\x6f\x75\x7e\x6b\x21\x8e\x13\x25\x33\x9e\xa3\x67\xcb\xaa\x17\x72\x3b\x9b\xd5\x4a\x54\x82\x49\x8a\xff\x56\x5c\x06\xaf\xee\x8c\x95\x02\xd7\xd7\xdd\x37\x8d\xe3\x7b\xd2\x13\x65\xb8\x9d\xdd\xdc\x78\xc8\xd5\xda\x8f\x3a\xbf\x7a\xeb\x46\xf9\xa3\xe5\x2b\x75\x9b\x73\x35\x2a\x90\xc7\x33\xd7\xf2\xed\x33\xc4\xf4\x05\x7d\xc7\x80\x2d\x48\x7a\x47\x60\xa2\x89\x5d\xfa\xff\x19\x0f\x9d\x7f\x20\x30\x21\xd4\x74\x49\x58\x7e\x5e\xc6\x6d\x90\x8a\x19\xf3\x50\x8e\xc1\x43\x39\xe4\x51\x67\x7b\x5b\x62\x17\xfb\x3b\x8d\x68\x8c\x70\xdb\x77\xff\xf9\xfc\xde\xdf\x0d\x2f\xe9\x56\x0b\x6b\x12\xb6\x4a\xa1\x64\x72\x16\x8a\xde\x9b\xbf\x41\x8e\x9a\x8c\xaf\xc8\xc9\x89\x49\xe9\x38\xe5\x14\x6f\x5a\x2c\x6b\x6a\xba\x47\x32\xf7\x0b\xe6\x3f\x97\xcb\x26\xb1\x3c\x42\x2a\x8f\x67\x39\x63\x96\x89\x86\xe2\x0d\x0c\xaf\xdc\xd3\xc5\xfb\xec\xba\x43\x55\xb8\x4d\xbc\x90\xd6\xc3\xae\x81\xa0\xb8\x61\xa8\xd2\x54\x31\x4d\x48\xd5\x54\x0a\xc5\xd2\x38\x21\x6d\xcd\x63\x51\xfe\x55\xb0\x73\x6c\x66\xf5\xe8\xf4\xcb\xd6\x87\x41\x9c\x49\x90\x75\x9f\x8a\xda\x46\xeb\xe2\x7d\x38\xb1\x3f\x70\x5f\x87\x3f\x5b\xb1\x3f\x08\x5f\xac\xcd\xf7\xc5\xa3\x10\x4a\xa6\x2f\xe3\xd5\xae\xd7\xbf\xf8\xa2\x7f\x02\x00\x00\xff\xff\x0b\x2a\xd2\x84\x77\x0e\x00\x00") +var _bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x61\x6f\xdb\x38\x12\xfd\xae\x5f\xf1\x22\x1b\xd7\xa4\x89\x6c\xc7\x45\x0f\x45\x82\xdc\xad\x37\x6d\xb1\x46\xbb\x49\x11\xa7\x2d\x8a\xa2\x08\x68\x69\x24\x71\x43\x91\x2a\x49\xd5\x31\xdc\xfc\xf7\x05\x29\xd9\xb5\x63\x3b\x69\xb3\xeb\x4f\x06\x67\xe6\xcd\xcc\x9b\xc7\xa1\x5a\x3b\xdd\x31\x97\xdd\x31\x33\x79\xd0\xc2\xa9\x2a\xa7\x9a\x67\xb9\x45\xbf\xd7\xef\xe1\x32\x27\xbc\xa9\xc6\xa4\x25\x59\x32\x18\x54\x36\x57\xda\x74\x82\x56\xd0\xc2\x5b\x1e\x93\x34\x94\xa0\x92\x09\x69\xd8\x9c\x30\x28\x59\x9c\xd3\xdc\x72\x80\x0f\xa4\x0d\x57\x12\xfd\x4e\x0f\xbb\xce\x21\x6c\x4c\xe1\xde\x71\xd0\xc2\x54\x55\x28\xd8\x14\x52\x59\x54\x86\x60\x73\x6e\x90\x72\x41\xa0\x9b\x98\x4a\x0b\x2e\x11\xab\xa2\x14\x9c\xc9\x98\x30\xe1\x36\xf7\x69\x1a\x90\x4e\xd0\xc2\xa7\x06\x42\x8d\x2d\xe3\x12\x0c\xb1\x2a\xa7\x50\xe9\xb2\x1f\x98\xf5\x05\xbb\x5f\x6e\x6d\x79\xd4\xed\x4e\x26\x93\x0e\xf3\xc5\x76\x94\xce\xba\xa2\x76\x34\xdd\xb7\xc3\xd3\x57\x67\xa3\x57\x51\xbf\xd3\xf3\x21\xef\xa5\x20\x63\xa0\xe9\x6b\xc5\x35\x25\x18\x4f\xc1\xca\x52\xf0\x98\x8d\x05\x41\xb0\x09\x94\x06\xcb\x34\x51\x02\xab\x5c\xbd\x13\xcd\x2d\x97\xd9\x01\x8c\x4a\xed\x84\x69\x0a\x5a\x48\xb8\xb1\x9a\x8f\x2b\xbb\x42\xd6\xbc\x3a\x6e\x56\x1c\x94\x04\x93\x08\x07\x23\x0c\x47\x21\x7e\x1f\x8c\x86\xa3\x83\xa0\x85\x8f\xc3\xcb\x3f\xce\xdf\x5f\xe2\xe3\xe0\xe2\x62\x70\x76\x39\x7c\x35\xc2\xf9\x05\x4e\xcf\xcf\x5e\x0e\x2f\x87\xe7\x67\x23\x9c\xbf\xc6\xe0\xec\x13\xde\x0c\xcf\x5e\x1e\x80\xb8\xcd\x49\x83\x6e\x4a\xed\xea\x57\x1a\xdc\xd1\x48\x89\xe3\x6c\x44\xb4\x52\x40\xaa\xea\x82\x4c\x49\x31\x4f\x79\x0c\xc1\x64\x56\xb1\x8c\x90\xa9\x6f\xa4\x25\x97\x19\x4a\xd2\x05\x37\x6e\x98\x06\x4c\x26\x41\x0b\x82\x17\xdc\x32\xeb\x4f\xd6\x9a\xea\x04\x4e\x20\x2a\x73\xad\x90\xd6\x8e\x24\x99\x80\x6e\xb8\x75\x05\x0c\x74\x66\x8e\xfc\x40\xda\x87\xf8\x93\x8c\x71\xb9\xac\x82\x50\xd9\x8f\x21\xfb\xb0\xda\xa9\xef\x75\x58\xe3\xc4\x2a\xf1\xbe\x9a\x6c\xa5\x65\x20\x54\x76\x74\xe4\x2d\x57\x0e\x7d\x77\x0f\xb3\x00\x10\x2a\x66\x02\x45\x8d\x7c\x12\xb6\x67\x87\xb7\xe1\xe2\xd8\x21\xb8\xb3\xfe\x6d\x18\xf8\xc3\x39\x02\xc2\xf6\xac\x89\xf1\xee\x2d\xcc\x66\xe0\x29\x3a\xa7\x4a\x5a\xad\xc4\x3b\xc1\x24\xe1\xf6\x76\x1e\xc4\x65\xaa\x10\x5e\x50\xa1\xbe\x39\x8a\x0a\x2a\xc6\xa4\x91\x6a\x55\x20\x16\x95\xb1\xa4\x61\x2c\xb3\x95\x71\x60\xd7\xd5\x98\x58\x52\x40\x93\x21\x8b\x28\x45\x55\x26\xcc\x52\xd4\x78\x46\xb5\x27\xbe\x7f\x87\xd5\x15\x6d\x49\x41\x36\x4e\x9a\x3c\x1b\x31\xb5\x73\xa4\xc8\xb9\x45\x4d\x39\x3f\x00\x7d\x3b\x24\x93\x0d\x1d\x18\xb2\x4e\xb4\x73\xc0\x8d\xd8\x77\x2a\x6b\x18\x6b\xca\xef\xdc\x44\xd7\x2f\x4c\x87\xab\x45\xdc\x58\x29\x6b\xac\x66\x25\x4c\xac\x79\x69\xd1\xee\xf9\xf9\xbb\x34\x7e\xc6\x4d\xc3\xed\x99\x9b\x87\xe7\xdb\x99\xdd\x0c\x9a\x83\xdb\xa0\x9e\xae\xa9\xe2\x98\x8c\x59\x9d\xef\xa2\xf8\x5f\x2a\x20\xe5\x92\x9b\x9c\x92\x45\xb6\x9e\xcb\x72\x47\xa9\xe3\xca\xe2\x9a\xa8\x44\xa6\xb8\xcc\x3a\x4b\x12\xbb\x5f\x5d\x96\x17\x64\x2c\x2b\xca\x93\xf6\xae\x1b\x2d\xa2\x88\x1b\x15\xbd\xf8\x6f\xef\xf0\xc4\x50\xac\x64\x62\xf6\x5c\xde\x38\x57\x08\x77\x76\x76\xf0\xb9\x3d\x5b\xc4\xdc\x7e\x81\xc7\xc1\xff\xfe\xd3\x0f\x00\x93\xf3\xd4\x06\xf0\x57\xb3\x49\x74\x8c\x44\x05\x6e\x85\xd5\x00\xee\xdf\x92\x5c\x9b\xb8\x44\x49\xaa\x5b\x7a\xa7\xb9\xb4\x60\x73\x9a\x05\x97\xd4\x01\x5e\x2b\x5d\x30\x6b\xeb\x6d\x65\x72\x35\x41\x55\xc2\xef\x4d\x63\x35\xb1\xc2\x6d\x4e\x55\xd9\xb2\xb2\x4d\xdf\x8e\xe4\xa6\xed\x5f\xea\x6f\x7f\x7f\x7f\x63\x7f\x8f\xe9\x6d\xa9\xaf\x38\xa7\xf8\xfa\xaa\x19\xf1\x55\xac\x8a\x82\xc9\x64\x65\x2c\xcd\xd9\x7d\x97\x1e\x88\x99\xa1\xb9\xf2\xc0\x65\x00\x84\xbd\x70\xcf\x57\xb0\x24\xad\x1f\x57\xa0\x54\xda\x71\xd6\x28\x31\xad\x04\xe8\x86\xe2\xca\x2d\x3f\xdf\x86\x83\xf2\x69\x3d\x3a\x70\x7c\xec\x20\x0f\x97\x21\x9b\xfb\xb2\x86\x99\x32\x2e\x28\x01\x8b\x1d\xd8\xae\xd9\xbb\x07\xaf\xff\x33\x78\xa5\xa6\x54\xf8\x07\xdc\x73\xd5\x68\x3a\xa9\xb4\xbb\x78\x9b\x71\x9f\xad\xe1\x5e\xd5\x57\x71\x0d\xfc\x1b\x13\x3c\xf1\x3b\xbf\xc1\xdd\x5a\xec\xd3\x9f\x28\xb5\x92\xd7\x52\x4d\xe6\x50\xf3\x71\x6c\x85\x24\xc3\x62\xa7\x81\xb4\x92\x9e\x2c\xf7\x04\xe8\x69\xb4\x2a\x02\x79\xd2\x5b\xcc\x7c\x2e\x93\xe6\xa9\x00\x2a\x69\xb9\xc0\x67\xb4\x25\xa2\x8c\xf0\x1c\x5f\x16\xc2\x5b\x1a\xbb\xae\xa4\x7f\xf2\x9e\xb4\x9f\x3e\xa9\xd3\xb7\x60\x72\x12\xa2\x26\x34\xe1\xc6\x3d\xfe\x27\xa3\xd3\xc3\xde\x8b\x67\xde\x1e\xb6\x7f\x0b\x11\x45\xb1\x92\x29\xcf\xd0\xb5\x45\xd9\x6d\x72\x47\x7f\x29\x2e\x1b\x43\x67\xca\x0a\x81\xd9\xac\xf3\xa6\xb6\x7d\x20\x3d\x56\x86\xdb\xa9\xdf\xc7\xb8\x53\xee\x49\xfb\xff\xfe\x74\xa3\xe2\x11\xfa\xe2\xdc\xb2\x5c\x8d\x6a\xf8\xe2\xa9\xeb\xf2\xae\x0d\x11\x7d\x45\xcf\x35\x6d\x73\x92\xde\x11\x18\x6b\x62\xd7\xfe\x7f\xca\x9b\x66\x3f\x12\x98\x10\x6a\xb2\xa4\x25\x3f\x22\xe3\x96\x46\xc9\x8c\x79\x28\x47\xff\xa1\x1c\xf2\xa4\xbd\xbb\x2b\xb1\x8f\xc3\xbd\x5a\x27\x46\xb8\x85\x7b\xf8\x7c\x7e\xd5\xb7\xc3\x4b\xba\xd3\xc2\x9a\x6a\xad\x52\x28\x98\x9c\x36\x45\x1f\xcc\x9f\x1d\x47\x4d\xca\xeb\xed\xb8\xe5\x61\x5f\x48\xcb\x09\x4b\xe9\x28\xe1\x14\x6d\x5a\x32\x6b\xca\xba\x47\x3e\xf7\x8b\xe7\xdf\x90\xce\x26\xe1\x3c\x42\x36\x8f\x67\x3c\x65\x96\x89\x9a\xee\x75\xb6\x97\x3f\x3b\x82\x95\x2b\xbb\x78\xaa\x5d\xa7\x28\x73\xb7\x94\x17\x92\xdb\x3e\xa4\x07\x31\xe2\x3a\x20\x2a\x5d\x44\x54\x6a\x2a\x99\x26\x24\x6a\x22\x85\x62\x49\x14\x93\xb6\xe6\xb1\x28\xff\x28\xd8\x39\xd6\x03\x7d\x74\xfa\xe5\xd3\x15\x6a\x1f\x04\x74\x47\x82\xac\xfb\xd0\xd4\xf7\xb0\xbb\xae\xfc\x87\xab\xf3\x06\xf7\xd1\xf9\xab\x6d\x79\x43\xf3\x21\x5c\x7f\xa8\x3c\x0a\xa1\x60\xfa\x3a\xda\x4e\xcd\xfa\x67\x64\xf0\x77\x00\x00\x00\xff\xff\x28\x4b\xd0\x41\xf5\x0e\x00\x00") func bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptShBytes() ([]byte, error) { return bindataRead( @@ -108,7 +108,7 @@ func bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh() (*asset, error) return nil, err } - info := bindataFileInfo{name: "bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh", size: 3703, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh", size: 3829, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil }