Just to be clear, I'm suggesting changing:

    cluster_nodes = available_clusters[cluster].override_attributes["pacemaker"]["elements"][role_name] rescue []
    nodes.concat(cluster_nodes)

to:

    proposal = available_clusters[cluster]
    cluster_nodes = proposal.override_attributes["pacemaker"]["elements"][role_name]
    nodes.concat(cluster_nodes) if cluster_nodes

since IIUC this should never result in an exception unless something bad happened.  Also the temporary variable makes it clearer what the value from the `available_clusters` hash is.