#cloud-foundry #cloudfoundry-java-client
#cloud-foundry #cloudfoundry-java-client
Вопрос:
я пытаюсь получить учетные данные ИБП в cloud foundry: используя:
Mono<ServiceKey> serviceKey = (Mono<ServiceKey>) cloudFoundryOperations
.services()
.getServiceKey(
GetServiceKeyRequest.builder()
.serviceKeyName("digital_cassandra")
.serviceInstanceName("2a5aa377-e992-4f88-9f85-d9cec5c3bea9")
.build())
.subscribe();
serviceKey.map(serviceKey1 -> {
System.out.println(serviceKey1.getCredentials().toString());
return serviceKey1.getCredentials().get(0);
});
но ничего не напечатано.
как указать serviceKeyName и serviceInstanceName с помощью cloudFoundryOperations?
мне нужно распечатать все serviceKeyName и serviceInstanceName в моем пространстве.
Ответ №1:
.serviceInstanceName(«2a5aa377-e992-4f88-9f85-d9cec5c3bea9»)
Это должно быть фактическое имя, а не идентификатор guid. Например, «my-key» или как бы вы ни называли свой ключ.
но ничего не напечатано. как указать serviceKeyName и serviceInstanceName с помощью cloudFoundryOperations?
Если вы просто хотите выполнить печать на консоли, попробуйте что-то вроде этого:
cloudFoundryOperations
.services()
.getServiceKey(GetServiceKeyRequest.builder()
.serviceInstanceName("reservation-db")
.serviceKeyName("cf-mysql")
.build())
.doOnNext(key -> {
System.out.println("Key:");
System.out.println(" " key.getName() " (" key.getId() ")");
key.getCredentials().forEach((k, v) -> {
System.out.println(" " k " => " v);
});
})
.block();
GetServiceKeyRequest определяет, какой служебный ключ ищется. doOnNext
Вызов позволяет проверять, но не использовать ключ, который отлично работает для его распечатки. Затем в примере вызывается .block()
ожидание результатов, что нормально, потому что это всего лишь пример. Однако вы не хотели бы делать это в своем реальном коде. Вероятно, вам понадобится один из subscribe()
вариантов (вы subscribe()
тоже можете поменять doOnNext()
местами, просто зависит от того, что вы делаете в коде).
мне нужно распечатать все serviceKeyName и serviceInstanceName в моем пространстве.
Для получения всех ключей для всех экземпляров службы:
cloudFoundryOperations
.services()
.listInstances()
.doOnNext(si -> {
System.out.println(" " si.getName() " (" si.getId() ")");
})
.flatMap((ServiceInstanceSummary si) -> {
return ops
.services()
.listServiceKeys(ListServiceKeysRequest.builder()
.serviceInstanceName(si.getName())
.build())
.doOnNext(key -> {
System.out.println("Key:");
System.out.println(" " key.getName() " (" key.getId() ")");
key.getCredentials().forEach((k, v) -> {
System.out.println(" " k " => " v);
});
});
})
.blockLast();
Этот клиент перечисляет все экземпляры службы, печатает имя / идентификатор, а затем использует flatMap
для выхода и получения служебных ключей для каждого экземпляра службы. Затем он объединяет их все в один Flux<ServiceKey>
. Это doOnNext()
только для печати. Вам не обязательно это делать. Вы можете использовать результат несколькими способами, например, собрать его в список или подписаться на него, это просто хорошо работает для примера. Используйте то, что лучше всего подходит для вашего кода.