use of io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList in project kubernetes-client by fabric8io.
the class CRDExample method main.
/**
* Example of Cluster and Namespaced scoped K8S Custom Resources.
* To test Cluster scoped resource use "--cluster" as first argument.
* To test Namespaced resource provide namespace as first argument (namespace must exists in K8S).
*
* @param args Either "--cluster" or namespace name.
*/
public static void main(String[] args) {
boolean resourceNamespaced = true;
String namespace = null;
if (args.length > 0) {
if ("--cluster".equals(args[0])) {
resourceNamespaced = false;
} else {
namespace = args[0];
}
}
try (final KubernetesClient client = new KubernetesClientBuilder().build()) {
if (resourceNamespaced) {
if (namespace == null) {
namespace = client.getNamespace();
}
if (namespace == null) {
System.err.println("No namespace specified and no default defined!");
return;
}
System.out.println("Using namespace: " + namespace);
} else {
System.out.println("Creating cluster scoped resource");
}
if (LOG_ROOT_PATHS) {
RootPaths rootPaths = client.rootPaths();
if (rootPaths != null) {
List<String> paths = rootPaths.getPaths();
if (paths != null) {
System.out.println("Supported API Paths:");
for (String path : paths) {
System.out.println(" " + path);
}
System.out.println();
}
}
}
CustomResourceDefinitionList crds = client.apiextensions().v1().customResourceDefinitions().list();
List<CustomResourceDefinition> crdsItems = crds.getItems();
System.out.println("Found " + crdsItems.size() + " CRD(s)");
CustomResourceDefinition dummyCRD = null;
final String dummyCRDName = CustomResource.getCRDName(Dummy.class);
for (CustomResourceDefinition crd : crdsItems) {
ObjectMeta metadata = crd.getMetadata();
if (metadata != null) {
String name = metadata.getName();
System.out.println(" " + name + " => " + metadata.getSelfLink());
if (dummyCRDName.equals(name)) {
dummyCRD = crd;
}
}
}
if (dummyCRD != null) {
System.out.println("Found CRD: " + dummyCRD.getMetadata().getSelfLink());
} else {
dummyCRD = CustomResourceDefinitionContext.v1CRDFromCustomResourceType(Dummy.class).editSpec().editVersion(0).withNewSchema().withNewOpenAPIV3Schema().withTitle("dummy").withType("object").addToRequired("spec").addToProperties("spec", new JSONSchemaPropsBuilder().withType("object").addToProperties("foo", new JSONSchemaPropsBuilder().withType("string").build()).addToProperties("bar", new JSONSchemaPropsBuilder().withType("string").build()).build()).endOpenAPIV3Schema().endSchema().endVersion().endSpec().build();
client.apiextensions().v1().customResourceDefinitions().create(dummyCRD);
System.out.println("Created CRD " + dummyCRD.getMetadata().getName());
}
// wait a beat for the endpoints to be ready
Thread.sleep(5000);
// lets create a client for the CRD
NonNamespaceOperation<Dummy, DummyList, Resource<Dummy>> dummyClient = client.resources(Dummy.class, DummyList.class);
if (resourceNamespaced) {
dummyClient = ((MixedOperation<Dummy, DummyList, Resource<Dummy>>) dummyClient).inNamespace(namespace);
}
CustomResourceList<Dummy> dummyList = dummyClient.list();
List<Dummy> items = dummyList.getItems();
System.out.println(" found " + items.size() + " dummies");
for (Dummy item : items) {
System.out.println(" " + item);
}
Dummy dummy = new Dummy();
ObjectMeta metadata = new ObjectMeta();
metadata.setName("foo");
dummy.setMetadata(metadata);
DummySpec dummySpec = new DummySpec();
Date now = new Date();
dummySpec.setBar("beer: " + now);
dummySpec.setFoo("cheese: " + now);
dummy.setSpec(dummySpec);
Dummy created = dummyClient.createOrReplace(dummy);
System.out.println("Upserted " + dummy);
created.getSpec().setBar("otherBar");
dummyClient.createOrReplace(created);
System.out.println("Watching for changes to Dummies");
dummyClient.withResourceVersion(created.getMetadata().getResourceVersion()).watch(new Watcher<Dummy>() {
@Override
public void eventReceived(Action action, Dummy resource) {
System.out.println("==> " + action + " for " + resource);
if (resource.getSpec() == null) {
logger.error("No Spec for resource {}", resource);
}
}
@Override
public void onClose(WatcherException cause) {
}
});
System.in.read();
} catch (KubernetesClientException e) {
logger.error(e.getMessage(), e);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
use of io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList in project kubernetes-client by fabric8io.
the class CustomResourceDefinitionIT method list.
@Test
public void list() {
// When
final CustomResourceDefinitionList result = client.apiextensions().v1().customResourceDefinitions().list();
// Then
assertThat(result.getItems()).hasSizeGreaterThan(0).anyMatch(crd -> crd.getMetadata().getName().equals(name));
}
use of io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList in project kubernetes-client by fabric8io.
the class CustomResourceTest method testListWithFields.
@Test
void testListWithFields() {
final CustomResourceDefinitionList customResourceDefinitionList = new CustomResourceDefinitionListBuilder().addNewItem().and().addNewItem().and().build();
server.expect().get().withPath("/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions?fieldSelector=" + Utils.toUrlEncoded("key1=value1,key2=value2,key3!=value3,key3!=value4")).andReturn(HttpURLConnection.HTTP_CREATED, customResourceDefinitionList).once();
CustomResourceDefinitionList list = client.apiextensions().v1beta1().customResourceDefinitions().withField("key1", "value1").withField("key2", "value2").withoutField("key3", "value3").withoutField("key3", "value4").list();
List<CustomResourceDefinition> items = list.getItems();
assertNotNull(items);
assertEquals(2, items.size());
}
use of io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList in project kubernetes-client by fabric8io.
the class ListCustomResourceDefinitions method main.
public static void main(String[] args) {
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
if (!client.supportsApiPath("/apis/apiextensions.k8s.io/v1beta1") && !client.supportsApiPath("/apis/apiextensions.k8s.io/v1")) {
System.out.println("WARNING this cluster does not support the API Group apiextensions.k8s.io");
return;
}
CustomResourceDefinitionList list = client.apiextensions().v1beta1().customResourceDefinitions().list();
if (list == null) {
System.out.println("ERROR no list returned!");
return;
}
List<CustomResourceDefinition> items = list.getItems();
for (CustomResourceDefinition item : items) {
System.out.println("CustomResourceDefinition " + item.getMetadata().getName() + " has version: " + item.getApiVersion());
}
} catch (KubernetesClientException e) {
System.out.println("Failed: " + e);
e.printStackTrace();
}
}
use of io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList in project strimzi-kafka-operator by strimzi.
the class MockKube method build.
@SuppressWarnings("unchecked")
@SuppressFBWarnings("BC_UNCONFIRMED_CAST_OF_RETURN_VALUE")
public KubernetesClient build() {
if (mockClient != null) {
return mockClient;
}
configMapMockBuilder = addMockBuilder("configmaps", new MockBuilder<>(ConfigMap.class, ConfigMapList.class, MockBuilder.castClass(Resource.class), cmDb));
endpointMockBuilder = addMockBuilder("endpoints", new MockBuilder<>(Endpoints.class, EndpointsList.class, MockBuilder.castClass(Resource.class), endpointDb));
serviceMockBuilder = addMockBuilder("services", new ServiceMockBuilder(svcDb, endpointDb));
secretMockBuilder = addMockBuilder("secrets", new MockBuilder<>(Secret.class, SecretList.class, MockBuilder.castClass(Resource.class), secretDb));
serviceAccountMockBuilder = addMockBuilder("serviceaccounts", new MockBuilder<>(ServiceAccount.class, ServiceAccountList.class, MockBuilder.castClass(Resource.class), serviceAccountDb));
routeMockBuilder = addMockBuilder("routes", new MockBuilder<>(Route.class, RouteList.class, MockBuilder.castClass(Resource.class), routeDb));
buildConfigMockBuilder = addMockBuilder("buildConfigs", new MockBuilder<>(BuildConfig.class, BuildConfigList.class, MockBuilder.castClass(Resource.class), buildConfigDb));
podDisruptionBudgedMockBuilder = addMockBuilder("poddisruptionbudgets", new MockBuilder<>(PodDisruptionBudget.class, PodDisruptionBudgetList.class, MockBuilder.castClass(Resource.class), pdbDb));
podDisruptionBudgedV1Beta1MockBuilder = addMockBuilder("poddisruptionbudgetsV1Beta1", new MockBuilder<>(io.fabric8.kubernetes.api.model.policy.v1beta1.PodDisruptionBudget.class, io.fabric8.kubernetes.api.model.policy.v1beta1.PodDisruptionBudgetList.class, MockBuilder.castClass(Resource.class), pdbDbV1Beta1));
roleBindingMockBuilder = addMockBuilder("rolebindings", new MockBuilder<>(RoleBinding.class, RoleBindingList.class, MockBuilder.castClass(Resource.class), pdbRb));
roleMockBuilder = addMockBuilder("roles", new MockBuilder<>(Role.class, RoleList.class, MockBuilder.castClass(Resource.class), roleDb));
clusterRoleBindingMockBuilder = addMockBuilder("clusterrolebindings", new MockBuilder<>(ClusterRoleBinding.class, ClusterRoleBindingList.class, MockBuilder.castClass(Resource.class), pdbCrb));
networkPolicyMockBuilder = addMockBuilder("networkpolicies", new MockBuilder<>(NetworkPolicy.class, NetworkPolicyList.class, MockBuilder.castClass(Resource.class), policyDb));
ingressMockBuilder = addMockBuilder("ingresses", new MockBuilder<>(Ingress.class, IngressList.class, MockBuilder.castClass(Resource.class), ingressDb));
ingressV1Beta1MockBuilder = addMockBuilder("ingresses", new MockBuilder<>(io.fabric8.kubernetes.api.model.networking.v1beta1.Ingress.class, io.fabric8.kubernetes.api.model.networking.v1beta1.IngressList.class, MockBuilder.castClass(Resource.class), ingressV1Beta1Db));
podMockBuilder = addMockBuilder("pods", new MockBuilder<>(Pod.class, PodList.class, MockBuilder.castClass(PodResource.class), podDb));
MixedOperation<Pod, PodList, PodResource<Pod>> mockPods = podMockBuilder.build();
persistentVolumeClaimMockBuilder = addMockBuilder("persistentvolumeclaims", new MockBuilder<>(PersistentVolumeClaim.class, PersistentVolumeClaimList.class, MockBuilder.castClass(Resource.class), pvcDb));
MixedOperation<PersistentVolumeClaim, PersistentVolumeClaimList, Resource<PersistentVolumeClaim>> mockPersistentVolumeClaims = persistentVolumeClaimMockBuilder.build();
deploymentMockBuilder = addMockBuilder("deployments", new DeploymentMockBuilder(depDb, mockPods));
MixedOperation<StatefulSet, StatefulSetList, RollableScalableResource<StatefulSet>> mockSs = buildStatefulSets(podMockBuilder, mockPods, mockPersistentVolumeClaims);
// Top level group
mockClient = mock(KubernetesClient.class);
configMapMockBuilder.build2(mockClient::configMaps);
serviceMockBuilder.build2(mockClient::services);
secretMockBuilder.build2(mockClient::secrets);
serviceAccountMockBuilder.build2(mockClient::serviceAccounts);
when(mockClient.pods()).thenReturn(mockPods);
endpointMockBuilder.build2(mockClient::endpoints);
when(mockClient.persistentVolumeClaims()).thenReturn(mockPersistentVolumeClaims);
// API group
AppsAPIGroupDSL api = mock(AppsAPIGroupDSL.class);
when(mockClient.apps()).thenReturn(api);
when(api.statefulSets()).thenReturn(mockSs);
deploymentMockBuilder.build2(api::deployments);
MixedOperation<CustomResourceDefinition, CustomResourceDefinitionList, Resource<CustomResourceDefinition>> mockCrds = mock(MixedOperation.class);
// Custom Resources
if (mockedCrds != null && !mockedCrds.isEmpty()) {
NonNamespaceOperation<CustomResourceDefinition, CustomResourceDefinitionList, Resource<CustomResourceDefinition>> crds = mock(MixedOperation.class);
for (MockedCrd<?, ?, ?> mockedCrd : this.mockedCrds) {
CustomResourceDefinition crd = mockedCrd.crd;
Resource crdResource = mock(Resource.class);
when(crdResource.get()).thenReturn(crd);
when(crds.withName(crd.getMetadata().getName())).thenReturn(crdResource);
String key = crdKey(mockedCrd.crClass);
CreateOrReplaceable crdMixedOp = crdMixedOps.get(key);
if (crdMixedOp == null) {
CustomResourceMockBuilder customResourceMockBuilder = addMockBuilder(crd.getSpec().getNames().getPlural(), new CustomResourceMockBuilder<>((MockedCrd) mockedCrd));
crdMixedOp = (MixedOperation<CustomResource, ? extends KubernetesResource, Resource<CustomResource>>) customResourceMockBuilder.build();
crdMixedOps.put(key, crdMixedOp);
}
when(mockCrds.withName(eq(crd.getMetadata().getName()))).thenReturn(crdResource);
}
ApiextensionsAPIGroupDSL mockApiEx = mock(ApiextensionsAPIGroupDSL.class);
V1ApiextensionAPIGroupDSL mockv1 = mock(V1ApiextensionAPIGroupDSL.class);
when(mockClient.apiextensions()).thenReturn(mockApiEx);
when(mockApiEx.v1()).thenReturn(mockv1);
when(mockv1.customResourceDefinitions()).thenReturn(mockCrds);
mockCrs(mockClient);
}
// Network group
NetworkAPIGroupDSL network = mock(NetworkAPIGroupDSL.class);
V1NetworkAPIGroupDSL networkV1 = mock(V1NetworkAPIGroupDSL.class);
V1beta1NetworkAPIGroupDSL networkV1beta1 = mock(V1beta1NetworkAPIGroupDSL.class);
when(mockClient.network()).thenReturn(network);
when(network.v1()).thenReturn(networkV1);
when(network.v1beta1()).thenReturn(networkV1beta1);
networkPolicyMockBuilder.build2(network::networkPolicies);
ingressMockBuilder.build2(networkV1::ingresses);
ingressV1Beta1MockBuilder.build2(networkV1beta1::ingresses);
// Policy group
PolicyAPIGroupDSL policy = mock(PolicyAPIGroupDSL.class);
V1PolicyAPIGroupDSL v1policy = mock(V1PolicyAPIGroupDSL.class);
when(mockClient.policy()).thenReturn(policy);
when(policy.v1()).thenReturn(v1policy);
V1beta1PolicyAPIGroupDSL v1beta1policy = mock(V1beta1PolicyAPIGroupDSL.class);
when(mockClient.policy()).thenReturn(policy);
when(policy.v1beta1()).thenReturn(v1beta1policy);
podDisruptionBudgedMockBuilder.build2(mockClient.policy().v1()::podDisruptionBudget);
podDisruptionBudgedV1Beta1MockBuilder.build2(mockClient.policy().v1beta1()::podDisruptionBudget);
// RBAC group
RbacAPIGroupDSL rbac = mock(RbacAPIGroupDSL.class);
when(mockClient.rbac()).thenReturn(rbac);
roleBindingMockBuilder.build2(mockClient.rbac()::roleBindings);
roleMockBuilder.build2(mockClient.rbac()::roles);
clusterRoleBindingMockBuilder.buildNns(mockClient.rbac()::clusterRoleBindings);
// Openshift group
OpenShiftClient mockOpenShiftClient = mock(OpenShiftClient.class);
when(mockClient.adapt(OpenShiftClient.class)).thenReturn(mockOpenShiftClient);
routeMockBuilder.build2(mockOpenShiftClient::routes);
buildConfigMockBuilder.build2(mockOpenShiftClient::buildConfigs);
if (mockedCrds != null && !mockedCrds.isEmpty()) {
ApiextensionsAPIGroupDSL mockApiEx = mock(ApiextensionsAPIGroupDSL.class);
V1ApiextensionAPIGroupDSL mockv1 = mock(V1ApiextensionAPIGroupDSL.class);
when(mockOpenShiftClient.apiextensions()).thenReturn(mockApiEx);
when(mockApiEx.v1()).thenReturn(mockv1);
when(mockv1.customResourceDefinitions()).thenReturn(mockCrds);
mockCrs(mockOpenShiftClient);
}
doAnswer(i -> {
for (MockBuilder<?, ?, ?> a : mockBuilders.values()) {
a.assertNoWatchers();
}
return null;
}).when(mockClient).close();
return mockClient;
}
Aggregations