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..603a5880a92d 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\x4d\x91\x2a\x49\xd5\x31\xdc\xfc\xf7\x05\x29\xd9\xb5\x63\x27\x69\xb3\xeb\x4f\x06\x67\xe6\xcd\xcc\x9b\xc7\x11\x5b\x3b\xdd\x31\x97\xdd\x31\x33\x79\xd0\xc2\xa9\x2a\x67\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\xc2\x72\x80\x0f\xa4\x0d\x57\x12\xfd\x4e\x0f\xbb\xce\x21\x6c\x4c\xe1\xde\x71\xd0\xc2\x4c\x55\x28\xd8\x0c\x52\x59\x54\x86\x60\x73\x6e\x90\x72\x41\xa0\xeb\x98\x4a\x0b\x2e\x11\xab\xa2\x14\x9c\xc9\x98\x30\xe5\x36\xf7\x69\x1a\x90\x4e\xd0\xc2\xa7\x06\x42\x8d\x2d\xe3\x12\x0c\xb1\x2a\x67\x50\xe9\xaa\x1f\x98\xf5\x05\xbb\x5f\x6e\x6d\x79\xd4\xed\x4e\xa7\xd3\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\xcf\xc0\xca\x52\xf0\x98\x8d\x05\x41\xb0\x29\x94\x06\xcb\x34\x51\x02\xab\x5c\xbd\x53\xcd\x2d\x97\xd9\x01\x8c\x4a\xed\x94\x69\x0a\x5a\x48\xb8\xb1\x9a\x8f\x2b\xbb\x46\xd6\xa2\x3a\x6e\xd6\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\xae\x4b\xed\xea\x57\x1a\xdc\xd1\x48\x89\xe3\x6c\x44\xb4\x56\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\x36\x9a\xea\x04\x4e\x20\x2a\x73\xad\x90\xd6\x8e\x24\x99\x80\xae\xb9\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\xf3\x00\x10\x2a\x66\x02\x45\x8d\x7c\x12\xb6\xe7\x87\x37\xe1\xf2\xd8\x21\xb8\xb3\xfe\x4d\x18\xf8\xc3\x05\x02\xc2\xf6\xbc\x89\xf1\xee\x2d\xcc\xe7\xe0\x29\x3a\xa7\x4a\x5a\xad\xc4\x3b\xc1\x24\xe1\xe6\x66\x11\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\x93\x6a\x4c\x2c\x29\xa0\xc9\x90\x45\x94\xa2\x2a\x13\x66\x29\x6a\x3c\xa3\xda\x13\xdf\xbf\xc3\xea\x8a\xee\x48\x41\x36\x4e\x9a\x3c\x5b\x31\xb5\x73\xa4\xc8\xb9\x45\x4d\x39\x3f\x00\x7d\x3b\x24\x93\x2d\x1d\x18\xb2\x4e\xb4\x0b\xc0\xad\xd8\xb7\x2a\x6b\x18\x6b\xca\xef\x5c\x47\x93\x17\xa6\xc3\xd5\x32\x6e\xac\x94\x35\x56\xb3\x12\x26\xd6\xbc\xb4\x68\xf7\xfc\xfc\x5d\x1a\x3f\xe3\xa6\xe1\xf6\xdc\xcd\xc3\xf3\xed\xcc\x6e\x06\xcd\xc1\x4d\x50\x4f\xd7\x54\x71\x4c\xc6\xac\xcf\x77\x59\xfc\x2f\x15\x90\x72\xc9\x4d\x4e\xc9\x32\x5b\xcf\x65\xb9\xa5\xd4\x71\x65\x31\x21\x2a\x91\x29\x2e\xb3\xce\x8a\xc4\xee\x57\x97\xe5\x05\x19\xcb\x8a\xf2\xa4\xbd\xeb\x46\x8b\x28\xe2\x46\x45\x2f\xfe\xdb\x3b\x3c\x31\x14\x2b\x99\x98\x3d\x97\x37\xce\x15\xc2\x9d\x9d\x1d\x7c\x6e\xcf\x97\x31\x37\x5f\xe0\x71\xf0\xbf\xff\xf4\x03\xc0\xe4\x3c\xb5\x01\xfc\xd5\x6c\x12\x1d\x23\x51\x81\x5b\x61\x35\x80\xfb\xb7\x22\xd7\x26\x2e\x51\x92\xea\x96\xde\x69\x2e\x2d\xd8\x82\x66\xc1\x25\x75\x80\xd7\x4a\x17\xcc\xda\x7a\x5b\x99\x5c\x4d\x51\x95\xf0\x7b\xd3\x58\x4d\xac\x70\x9b\x53\x55\xb6\xac\x6c\xd3\xb7\x23\xb9\x69\xfb\x97\xfa\xdb\xdf\xdf\xdf\xda\xdf\x63\x7a\x5b\xe9\x2b\xce\x29\x9e\x5c\x35\x23\xbe\x8a\x55\x51\x30\x99\xac\x8d\xa5\x39\xbb\xef\xd2\x03\x31\x33\xb4\x50\x1e\xb8\x0c\x80\xb0\x17\xee\xf9\x0a\x56\xa4\xf5\xe3\x0a\x94\x4a\x3b\xce\x1a\x25\xa6\x95\x00\x5d\x53\x5c\xb9\xe5\xe7\xdb\x70\x50\x3e\xad\x47\x07\x8e\x8f\x1d\xe4\xe1\x2a\x64\x73\x5f\x36\x30\x53\xc6\x05\x25\x60\xb1\x03\xdb\x35\x7b\xf7\xe0\xf5\x7f\x06\xaf\xd4\x94\x0a\xff\x01\xf7\x5c\x35\x9a\x4e\x2a\xed\x2e\xde\x76\xdc\x67\x1b\xb8\x57\xf5\x55\xdc\x00\xff\xc6\x04\x4f\xfc\xce\x6f\x70\xef\x2c\xf6\xe9\x4f\x94\x5a\xc9\x89\x54\xd3\x05\xd4\x62\x1c\x77\x42\x92\x61\xb1\xd3\x40\x5a\x49\x4f\x96\xfb\x04\xe8\x59\xb4\x2e\x02\x79\xd2\x5b\xce\x7c\x21\x93\xe6\x53\x01\x54\xd2\x72\x81\xcf\x68\x4b\x44\x19\xe1\x39\xbe\x2c\x85\xb7\x32\x76\x5d\x49\xff\xc9\x7b\xd2\x7e\xfa\xa4\x4e\xdf\x82\xc9\x49\x88\x9a\xd0\x84\x1b\xf7\xf1\x3f\x19\x9d\x1e\xf6\x5e\x3c\xf3\xf6\xb0\xfd\x5b\x88\x28\x8a\x95\x4c\x79\x86\xae\x2d\xca\x6e\x93\x3b\xfa\x4b\x71\xd9\x18\x3a\x33\x56\x08\xcc\xe7\x9d\x37\xb5\xed\x03\xe9\xb1\x32\xdc\xce\xfc\x3e\xc6\xad\x72\x4f\xda\xff\xf7\xa7\x5b\x15\x8f\xd0\x17\xe7\x96\xe5\x7a\x54\xc3\x17\x4f\x5d\x97\xb7\x6d\x88\xe8\x2b\x7a\xae\x69\x9b\x93\xf4\x8e\xc0\x58\x13\x9b\xf8\xff\x29\x6f\x9a\xfd\x48\x60\x42\xa8\xe9\x8a\x96\xfc\x88\x8c\x5b\x1a\x25\x33\xe6\xa1\x1c\xfd\x87\x72\xc8\x93\xf6\xee\xae\xc4\x3e\x0e\xf7\x6a\x9d\x18\xe1\x16\xee\xe1\xf3\xc5\x55\xbf\x1b\x5e\xd2\xad\x16\x36\x54\x6b\x95\x42\xc1\xe4\xac\x29\xfa\x60\xf1\xd9\x71\xd4\xa4\x7c\x4d\x41\x4e\x3f\x4a\x47\x09\xa7\x68\xdb\x2e\xd9\x10\xd0\x3d\x2a\xb9\x5f\x23\xff\x86\x42\xb6\xe9\xe3\x11\xea\x78\x3c\xb1\x29\xb3\x4c\xd4\xac\x6e\x21\x75\xed\x36\x2e\xbf\xc2\xae\x3b\x94\xb9\xdb\xb7\x4b\x35\x05\x77\x3e\xac\x1e\xc4\x88\xeb\x80\xa8\x74\x11\x51\xa9\xa9\x64\x9a\x90\xa8\xa9\x14\x8a\x25\x51\x4c\xda\x9a\xc7\xa2\xfc\xa3\x60\xe7\x58\x0f\xf1\xd1\xe9\x57\x4f\x83\xd5\xc7\xda\x83\x80\xee\x48\x90\x75\x6f\x48\x7d\x0f\xbb\x9b\x6a\x7f\xb8\x3a\x6f\x70\xef\xc9\x5f\x6d\xcb\x1b\x9a\x37\x6e\xfd\x06\x79\x14\x42\xc1\xf4\x24\xba\x9b\x9a\xcd\x17\x62\xf0\x77\x00\x00\x00\xff\xff\xff\xf2\x39\x5c\xd0\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: 3792, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil }