首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过使用cloudFoundryOperations为云铸造用户提供商服务获取serviceInstanceName和serviceKeyName

通过使用cloudFoundryOperations为云铸造用户提供商服务获取serviceInstanceName和serviceKeyName
EN

Stack Overflow用户
提问于 2020-10-03 01:17:18
回答 1查看 31关注 0票数 0

我正在尝试获取UPS在云代工厂的凭据:使用:

代码语言:javascript
复制
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);
}); 

但什么也没打印出来。如何用cloudFoundryOperations实现serviceKeyName和serviceInstanceName?我需要打印我空间中所有的serviceKeyName和serviceInstanceName。

EN

回答 1

Stack Overflow用户

发布于 2020-10-04 22:13:08

.serviceInstanceName("2a5aa377-e992-4f88-9f85-d9cec5c3bea9")

它应该是实际名称,而不是guid。就像“我的钥匙”或者你管你的钥匙叫什么。

,但未打印任何内容。如何用cloudFoundryOperations实现serviceKeyName和serviceInstanceName?

如果您只想打印到控制台,请尝试执行以下操作:

代码语言:javascript
复制
        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。

要获取所有服务实例的所有密钥:

代码语言:javascript
复制
       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();

这是枚举所有服务实例,打印名称/id,然后使用flatMap获取每个服务实例的服务密钥。然后它将它们合并到一个Flux<ServiceKey>中。doOnNext()只用于打印。你不一定要这样做。您可以通过多种方式使用结果,例如将其收集到列表中或订阅它,这对于一个示例来说非常有效。使用最适合您的代码的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64175746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档