func joinControlPlanes()

in kinder/pkg/cluster/manager/actions/kubeadm-join.go [40:91]


func joinControlPlanes(c *status.Cluster, usePhases bool, copyCertsMode CopyCertsMode, discoveryMode DiscoveryMode, kubeadmConfigVersion, patchesDir, ignorePreflightErrors string, wait time.Duration, vLevel int) (err error) {
	cpX := []*status.Node{c.BootstrapControlPlane()}

	for _, cp2 := range c.SecondaryControlPlanes().EligibleForActions() {
		if err := copyPatchesToNode(cp2, patchesDir); err != nil {
			return err
		}

		// if not automatic copy certs, simulate manual copy
		if copyCertsMode == CopyCertsModeManual {
			if err := copyCertificatesToNode(c, cp2); err != nil {
				return err
			}
		}

		// checks pre-loaded images available on the node (this will report missing images, if any)
		kubeVersion, err := cp2.KubeVersion()
		if err != nil {
			return err
		}

		if err := checkImagesForVersion(cp2, kubeVersion); err != nil {
			return err
		}

		// prepares the kubeadm config on this node
		if err := KubeadmJoinConfig(c, kubeadmConfigVersion, copyCertsMode, discoveryMode, cp2); err != nil {
			return err
		}

		// executes the kubeadm join control-plane workflow
		if usePhases {
			err = kubeadmJoinControlPlaneWithPhases(cp2, patchesDir, ignorePreflightErrors, vLevel)
		} else {
			err = kubeadmJoinControlPlane(cp2, patchesDir, ignorePreflightErrors, vLevel)
		}
		if err != nil {
			return err
		}

		// updates the loadbalancer config with the new cp node
		cpX = append(cpX, cp2)
		if err := LoadBalancer(c, cpX...); err != nil {
			return err
		}

		if err := waitNewControlPlaneNodeReady(c, cp2, wait); err != nil {
			return err
		}
	}
	return nil
}