code: func (process *TeleportProcess) syncRotationState(conn *Connector) (*rotationStatus, error) {
  	connectors := process.getConnectors()
  	ca, err := process.getCertAuthority(conn, services.CertAuthID{
  		DomainName: conn.ClientIdentity.ClusterName,
  		Type:       services.HostCA,
  	}, false)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	var status rotationStatus
  	status.ca = ca
  	for _, conn := range connectors {
  		serviceStatus, err := process.syncServiceRotationState(ca, conn)
  		if err != nil {
  			return nil, trace.Wrap(err)
  		}
  		if serviceStatus.needsReload {
  			status.needsReload = true
  		}
  		if serviceStatus.phaseChanged {
  			status.phaseChanged = true
  		}
  	}
  	return &status, nil
  }
docs: // syncRotationState compares cluster rotation state with the state of
  // internal services and performs the rotation if necessary.