From cb28f824e104dea5fd63d68919aa1bc321f40fb8 Mon Sep 17 00:00:00 2001 From: Carlos Salas Date: Wed, 3 Jan 2024 18:09:27 +0100 Subject: [PATCH] feat: make docker machine bootstrap timeout configurable Signed-off-by: Carlos Salas --- .../docker/api/v1alpha4/conversion.go | 4 ++++ .../api/v1alpha4/zz_generated.conversion.go | 16 ++++++---------- .../docker/api/v1beta1/dockermachine_types.go | 5 +++++ ...tructure.cluster.x-k8s.io_dockermachines.yaml | 5 +++++ ....cluster.x-k8s.io_dockermachinetemplates.yaml | 5 +++++ .../controllers/dockermachine_controller.go | 5 ++++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/test/infrastructure/docker/api/v1alpha4/conversion.go b/test/infrastructure/docker/api/v1alpha4/conversion.go index e8c9ae8d8236..84d4c20b7f8e 100644 --- a/test/infrastructure/docker/api/v1alpha4/conversion.go +++ b/test/infrastructure/docker/api/v1alpha4/conversion.go @@ -201,3 +201,7 @@ func Convert_v1beta1_DockerMachineTemplateResource_To_v1alpha4_DockerMachineTemp func Convert_v1beta1_DockerLoadBalancer_To_v1alpha4_DockerLoadBalancer(in *infrav1.DockerLoadBalancer, out *DockerLoadBalancer, s apiconversion.Scope) error { return autoConvert_v1beta1_DockerLoadBalancer_To_v1alpha4_DockerLoadBalancer(in, out, s) } + +func Convert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(in *infrav1.DockerMachineSpec, out *DockerMachineSpec, s apiconversion.Scope) error { + return autoConvert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(in, out, s) +} diff --git a/test/infrastructure/docker/api/v1alpha4/zz_generated.conversion.go b/test/infrastructure/docker/api/v1alpha4/zz_generated.conversion.go index 71075f02d170..960ed662f0f9 100644 --- a/test/infrastructure/docker/api/v1alpha4/zz_generated.conversion.go +++ b/test/infrastructure/docker/api/v1alpha4/zz_generated.conversion.go @@ -153,11 +153,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta1.DockerMachineSpec)(nil), (*DockerMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(a.(*v1beta1.DockerMachineSpec), b.(*DockerMachineSpec), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*DockerMachineStatus)(nil), (*v1beta1.DockerMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha4_DockerMachineStatus_To_v1beta1_DockerMachineStatus(a.(*DockerMachineStatus), b.(*v1beta1.DockerMachineStatus), scope) }); err != nil { @@ -233,6 +228,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta1.DockerMachineSpec)(nil), (*DockerMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(a.(*v1beta1.DockerMachineSpec), b.(*DockerMachineSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta1.DockerMachineTemplateResource)(nil), (*DockerMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_DockerMachineTemplateResource_To_v1alpha4_DockerMachineTemplateResource(a.(*v1beta1.DockerMachineTemplateResource), b.(*DockerMachineTemplateResource), scope) }); err != nil { @@ -687,14 +687,10 @@ func autoConvert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(in *v1b out.PreLoadImages = *(*[]string)(unsafe.Pointer(&in.PreLoadImages)) out.ExtraMounts = *(*[]Mount)(unsafe.Pointer(&in.ExtraMounts)) out.Bootstrapped = in.Bootstrapped + // WARNING: in.BootstrapTimeout requires manual conversion: does not exist in peer-type return nil } -// Convert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec is an autogenerated conversion function. -func Convert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(in *v1beta1.DockerMachineSpec, out *DockerMachineSpec, s conversion.Scope) error { - return autoConvert_v1beta1_DockerMachineSpec_To_v1alpha4_DockerMachineSpec(in, out, s) -} - func autoConvert_v1alpha4_DockerMachineStatus_To_v1beta1_DockerMachineStatus(in *DockerMachineStatus, out *v1beta1.DockerMachineStatus, s conversion.Scope) error { out.Ready = in.Ready out.LoadBalancerConfigured = in.LoadBalancerConfigured diff --git a/test/infrastructure/docker/api/v1beta1/dockermachine_types.go b/test/infrastructure/docker/api/v1beta1/dockermachine_types.go index 7fbba3276f75..35718ad76180 100644 --- a/test/infrastructure/docker/api/v1beta1/dockermachine_types.go +++ b/test/infrastructure/docker/api/v1beta1/dockermachine_types.go @@ -56,6 +56,11 @@ type DockerMachineSpec struct { // When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml. // +optional Bootstrapped bool `json:"bootstrapped,omitempty"` + + // BootstrapTimeout is the total time (in minutes) to wait for the machine to bootstrap before timing out. + // Defaults to 3 minutes if not set. + // +optional + BootstrapTimeout int `json:"bootstrapTimeout,omitempty"` } // Mount specifies a host volume to mount into a container. diff --git a/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml b/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml index ab73711b202f..78780832815e 100644 --- a/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml +++ b/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachines.yaml @@ -205,6 +205,11 @@ spec: spec: description: DockerMachineSpec defines the desired state of DockerMachine. properties: + bootstrapTimeout: + description: BootstrapTimeout is the total time (in minutes) to wait + for the machine to bootstrap before timing out. Defaults to 3 minutes + if not set. + type: integer bootstrapped: description: "Bootstrapped is true when the kubeadm bootstrapping has been run against this machine \n Deprecated: This field will diff --git a/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml b/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml index 29ad60adffea..e509d4dbd926 100644 --- a/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml +++ b/test/infrastructure/docker/config/crd/bases/infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml @@ -159,6 +159,11 @@ spec: description: Spec is the specification of the desired behavior of the machine. properties: + bootstrapTimeout: + description: BootstrapTimeout is the total time (in minutes) + to wait for the machine to bootstrap before timing out. + Defaults to 3 minutes if not set. + type: integer bootstrapped: description: "Bootstrapped is true when the kubeadm bootstrapping has been run against this machine \n Deprecated: This field diff --git a/test/infrastructure/docker/internal/controllers/dockermachine_controller.go b/test/infrastructure/docker/internal/controllers/dockermachine_controller.go index f2bfad8abbe7..12818f24ee75 100644 --- a/test/infrastructure/docker/internal/controllers/dockermachine_controller.go +++ b/test/infrastructure/docker/internal/controllers/dockermachine_controller.go @@ -342,7 +342,10 @@ func (r *DockerMachineReconciler) reconcileNormal(ctx context.Context, cluster * // if the machine isn't bootstrapped, only then run bootstrap scripts if !dockerMachine.Spec.Bootstrapped { - timeoutCtx, cancel := context.WithTimeout(ctx, 3*time.Minute) + if dockerMachine.Spec.BootstrapTimeout == 0 { + dockerMachine.Spec.BootstrapTimeout = 3 + } + timeoutCtx, cancel := context.WithTimeout(ctx, time.Duration(dockerMachine.Spec.BootstrapTimeout)*time.Minute) defer cancel() // Check for bootstrap success