### CI Link

https://gradle-enterprise.elastic.co/s/7dleq35dp5stm

### Repro line

./gradlew ':x-pack:plugin:core:test' --tests "org.elasticsearch.xpack.core.ilm.SetSingleNodeAllocateStepTests.testPerformActionAttrsRequestFails" -Dtests.seed=6B438F3C3DADE5D2 -Dtests.locale=nl -Dtests.timezone=Asia/Chongqin

### Does it reproduce?

Yes

### Applicable branches

8.1, 8.0

### Failure history

Seems to fail rarely, but has failed before. Example: https://gradle-enterprise.elastic.co/s/d33b4fzn7yoh6

### Failure excerpt

```
org.elasticsearch.xpack.core.ilm.SetSingleNodeAllocateStepTests > testPerformActionAttrsRequestFails FAILED
    java.lang.AssertionError: Node roles must not be provided as attributes but saw attributes {ml=K}
        at __randomizedtesting.SeedInfo.seed([C679BACC1DA27FA7:CB16887322D9C088]:0)
        at org.elasticsearch.cluster.node.DiscoveryNode.<init>(DiscoveryNode.java:233)
        at org.elasticsearch.cluster.node.DiscoveryNode.<init>(DiscoveryNode.java:175)
```
x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ilm/SetSingleNodeAllocateStepTests.java
String currentNode = randomFrom(nodesThisShardCanBePutOn);
            nodesThisShardCanBePutOn.remove(currentNode);
            indexRoutingTable.addShard(
                TestShardRouting.newShardRouting(new ShardId(index, primary), currentNode, true, ShardRoutingState.STARTED)
            );
            for (int replica = 0; replica < indexMetadata.getNumberOfReplicas(); replica++) {
                assertThat("not enough nodes to allocate all initial shards", nodesThisShardCanBePutOn.size(), greaterThan(0));
                String replicaNode = randomFrom(nodesThisShardCanBePutOn);
                nodesThisShardCanBePutOn.remove(replicaNode);
                indexRoutingTable.addShard(
                    TestShardRouting.newShardRouting(new ShardId(index, primary), replicaNode, false, ShardRoutingState.STARTED)
                );
            }
        }
        return indexRoutingTable;
    }
    private IndexRoutingTable.Builder createRoutingTableWithOneShardOnSubset(
        IndexMetadata indexMetadata,
        Set<String> subset,
        Set<String> allNodeIds
    ) {
        IndexRoutingTable.Builder indexRoutingTable = IndexRoutingTable.builder(indexMetadata.getIndex());
        final int numberOfShards = indexMetadata.getNumberOfShards();
        final int shardOnlyOnNewNodes = randomIntBetween(0, numberOfShards - 1);
        for (int primary = 0; primary < indexMetadata.getNumberOfShards(); primary++) {
            Set<String> nodesThisShardCanBePutOn;
            if (primary == shardOnlyOnNewNodes) {
                
                nodesThisShardCanBePutOn = new HashSet<>(subset);
            } else {