public MemberVM startServerVM(int index, VmConfiguration vmConfiguration,
      SerializableFunction<ServerStarterRule> ruleOperator) {
    final String defaultName = "server-" + index;
    VM serverVM = getVM(index, vmConfiguration);
    ServerStarterRule serverStarter = new ServerStarterRule();
    Server server = serverVM.invoke("startServerVM", () -> {
      memberStarter = serverStarter;
      if (logFile) {
        serverStarter.withLogFile();
      }
      ruleOperator.apply(serverStarter);
      serverStarter.withName(defaultName);
      serverStarter.withAutoStart();
      serverStarter.before();
      return serverStarter;
    });

    MemberVM memberVM = new MemberVM(server, serverVM);
    occupiedVMs.put(index, memberVM);
    return memberVM;
  }
In some weird situations you may not want to do local DS cleanup as that lifecyle is deferred
elsewhere - see {@code LocatorCleanupEventListener} and any test that uses {@code
PlainLocatorContextLoader} or {@code LocatorWithSecurityManagerContextLoader}

@param skipLocalDistributedSystemCleanup whether to do local DS cleanup
geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java