use of io.fabric8.kubernetes.client.CustomResource 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;
}
use of io.fabric8.kubernetes.client.CustomResource in project strimzi-kafka-operator by strimzi.
the class OperatorMetricsTest method successfulReconcile.
public void successfulReconcile(VertxTestContext context, Labels selectorLabels) {
MetricsProvider metrics = createCleanMetricsProvider();
AbstractWatchableStatusedResourceOperator resourceOperator = resourceOperatorWithExistingResourceWithSelectorLabel(selectorLabels);
AbstractOperator operator = new AbstractOperator(vertx, "TestResource", resourceOperator, metrics, selectorLabels) {
@Override
protected Future createOrUpdate(Reconciliation reconciliation, CustomResource resource) {
return Future.succeededFuture();
}
@Override
public Set<Condition> validate(Reconciliation reconciliation, CustomResource resource) {
return emptySet();
}
@Override
protected Future<Boolean> delete(Reconciliation reconciliation) {
return null;
}
@Override
protected Status createStatus() {
return new Status() {
};
}
};
Checkpoint async = context.checkpoint();
operator.reconcile(new Reconciliation("test", "TestResource", "my-namespace", "my-resource")).onComplete(context.succeeding(v -> context.verify(() -> {
MeterRegistry registry = metrics.meterRegistry();
Tag selectorTag = Tag.of("selector", selectorLabels != null ? selectorLabels.toSelectorString() : "");
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations").meter().getId().getTags().get(2), is(selectorTag));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations").tag("kind", "TestResource").counter().count(), is(1.0));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations.successful").meter().getId().getTags().get(2), is(selectorTag));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations.successful").tag("kind", "TestResource").counter().count(), is(1.0));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations.duration").meter().getId().getTags().get(2), is(selectorTag));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations.duration").tag("kind", "TestResource").timer().count(), is(1L));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "reconciliations.duration").tag("kind", "TestResource").timer().totalTime(TimeUnit.MILLISECONDS), greaterThan(0.0));
assertThat(registry.get(AbstractOperator.METRICS_PREFIX + "resource.state").tag("kind", "TestResource").tag("name", "my-resource").tag("resource-namespace", "my-namespace").gauge().value(), is(1.0));
async.flag();
})));
}
use of io.fabric8.kubernetes.client.CustomResource in project strimzi-kafka-operator by strimzi.
the class OperatorMetricsTest method resourceOperatorWithExistingPausedResource.
private AbstractWatchableStatusedResourceOperator resourceOperatorWithExistingPausedResource() {
return new AbstractWatchableStatusedResourceOperator(vertx, null, "TestResource") {
@Override
public Future updateStatusAsync(Reconciliation reconciliation, HasMetadata resource) {
return Future.succeededFuture();
}
@Override
protected MixedOperation operation() {
return null;
}
@Override
public CustomResource get(String namespace, String name) {
@Group("strimzi")
@Version("v1")
class Foo extends MyResource {
@Override
public ObjectMeta getMetadata() {
ObjectMeta md = new ObjectMeta();
md.setAnnotations(singletonMap("strimzi.io/pause-reconciliation", "true"));
return md;
}
@Override
public void setMetadata(ObjectMeta objectMeta) {
}
@Override
public String getKind() {
return "TestResource";
}
@Override
public String getApiVersion() {
return "v1";
}
@Override
public void setApiVersion(String s) {
}
@Override
public Spec getSpec() {
return new Spec() {
};
}
@Override
public void setSpec(Object spec) {
}
@Override
public Status getStatus() {
return null;
}
@Override
public void setStatus(Object status) {
}
}
return new Foo();
}
@Override
public Future getAsync(String namespace, String name) {
@Group("strimzi")
@Version("v1")
class Foo extends MyResource {
@Override
public ObjectMeta getMetadata() {
ObjectMeta md = new ObjectMeta();
md.setAnnotations(singletonMap("strimzi.io/pause-reconciliation", "true"));
return md;
}
@Override
public void setMetadata(ObjectMeta objectMeta) {
}
@Override
public String getKind() {
return "TestResource";
}
@Override
public String getApiVersion() {
return "v1";
}
@Override
public void setApiVersion(String s) {
}
@Override
public Spec getSpec() {
return new Spec() {
};
}
@Override
public void setSpec(Object spec) {
}
@Override
public Status getStatus() {
return null;
}
@Override
public void setStatus(Object status) {
}
}
return Future.succeededFuture(new Foo());
}
};
}
use of io.fabric8.kubernetes.client.CustomResource in project strimzi-kafka-operator by strimzi.
the class ResourceManager method logCurrentResourceStatus.
/**
* Log actual status of custom resource with pods.
* @param customResource - Kafka, KafkaConnect etc. - every resource that HasMetadata and HasStatus (Strimzi status)
*/
public static <T extends CustomResource<? extends Spec, ? extends Status>> void logCurrentResourceStatus(T customResource) {
if (customResource != null) {
List<String> printWholeCR = Arrays.asList(KafkaConnector.RESOURCE_KIND, KafkaTopic.RESOURCE_KIND, KafkaUser.RESOURCE_KIND);
String kind = customResource.getKind();
String name = customResource.getMetadata().getName();
if (printWholeCR.contains(kind)) {
LOGGER.info(customResource);
} else {
List<String> log = new ArrayList<>(asList(kind, " status:\n", "\nConditions:\n"));
if (customResource.getStatus() != null) {
List<Condition> conditions = customResource.getStatus().getConditions();
if (conditions != null) {
for (Condition condition : customResource.getStatus().getConditions()) {
if (condition.getMessage() != null) {
log.add("\tType: " + condition.getType() + "\n");
log.add("\tMessage: " + condition.getMessage() + "\n");
}
}
}
log.add("\nPods with conditions and messages:\n\n");
for (Pod pod : kubeClient().namespace(customResource.getMetadata().getNamespace()).listPodsByPrefixInName(name)) {
log.add(pod.getMetadata().getName() + ":");
for (PodCondition podCondition : pod.getStatus().getConditions()) {
if (podCondition.getMessage() != null) {
log.add("\n\tType: " + podCondition.getType() + "\n");
log.add("\tMessage: " + podCondition.getMessage() + "\n");
} else {
log.add("\n\tType: <EMPTY>\n");
log.add("\tMessage: <EMPTY>\n");
}
}
log.add("\n\n");
}
LOGGER.info("{}", String.join("", log).strip());
}
}
}
}
use of io.fabric8.kubernetes.client.CustomResource in project syndesis-qe by syndesisio.
the class Syndesis method getSubscription.
private static JSONObject getSubscription() {
CustomResourceDefinitionContext context = getSubscriptionCRDContext();
JSONObject subs = new JSONObject(OpenShiftUtils.getInstance().customResource(context).list(TestConfiguration.openShiftNamespace()));
JSONArray items = subs.getJSONArray("items");
for (int i = 0; i < items.length(); i++) {
if (items.getJSONObject(i).getJSONObject("spec").getString("name").equals("fuse-online")) {
return items.getJSONObject(i);
}
}
return null;
}
Aggregations