我正在尝试使用fabric8 openshift-client(或kubernetes-client)获取给定集群的所有可能资源的列表,因此尝试获取与命令oc api-resources
相同的资源。到目前为止,我可以使用这样的代码获取 apiGroups 列表
OpenShiftClient client = new DefaultOpenshiftClient();
List<APIService> apiservices = client.apiServices().list().getItems();
for (APIService apiservice : apiservices){
System.out.println(apiservice.getSpec().getGroup());
}
现在我正在寻找如何获取属于特定组的资源列表(我在代码中看到有一个类名 APIResource),但我找不到它。
编辑:
虽然我在代码中看到有一个 getApiResources() 方法,但由于某种原因,Quarkus 2.3 上的 quarkus-kubernetes-client (或 quarkus-openshift-client)并未附带该方法
作为解决方法,我使用 kubernetes API 通过 RestClient 来访问/apis/{group}/{version} 和/api/v1
最佳答案
Fabric8 Kubernetes 客户端具有 client.getApiGroups()
方法来获取所有可用 api 组的列表。然后,您可以使用 client.getApiResources()
获取每个版本的 api 资源,以获取类似 kubectl api-resources
的输出。
我能够用这样的东西做到这一点。我正在使用 Fabric8 Kubernetes 客户端 v5.9.0:
try (KubernetesClient client = new DefaultKubernetesClient()) {
APIGroupList apiGroupList = client.getApiGroups();
apiGroupList.getGroups()
.forEach(group -> group.getVersions().forEach(gv -> {
APIResourceList apiResourceList = client.getApiResources(gv.getGroupVersion());
apiResourceList.getResources()
.stream()
.filter(r -> !r.getName().contains("/"))
.forEach(r -> System.out.printf("%s %s %s %s %s%n", r.getName(), String.join( ",", r.getShortNames()),
gv.getGroupVersion(), r.getNamespaced(), r.getKind()));
}));
}
关于java - 使用fabric8 openshift-client 检索openshift 资源列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69766220/