The template https://github.com/canonical/cluster-api-k8s/blob/main/templates/openstack/cluster-template.yaml uses --provider-id: openstack:///'{{ instance_id }}' the quotes make imposible the matching expected by the bootstrapper and capi, this avoid removal of control plane node node.cloudprovider.kubernetes.io/uninitialized
With this quotation on --provider-id: openstack:///'{{ instance_id }}' there is an endless log like this, and cluster never goes up.
0821 20:23:09.635786 1 machine_controller_noderef.go:99] "Infrastructure provider reporting spec.providerID, matching Kubernetes node is not yet available" controller="machine" controllerGroup="cluster.x-k8s.io" controllerKind="Machine" Machine= │ │ "default/kaiser-hxfn4" namespace="default" name="kaiser-hxfn4" reconcileID="3a895121-90f4-49b7-9c8c-ee1d6fae545a" Cluster="default/kaiser" CK8sControlPlane="default/kaiser" OpenStackMachine="default/kaiser-control-plane-gpzh6" providerID="openstack:/// │ │ 875ca3d3-2beb-46b0-9c3a-90e0eb1bb195"
Updating the template with --provider-id: openstack:///{{ instance_id }} for both CK8sControlPlane and CK8sConfigTemplate ends with a cluster creation without issues.