Skip to content

Commit

Permalink
fix fabric8io#3922: cleaning up adaptable
Browse files Browse the repository at this point in the history
changes the mock annotation to use exclusion patterns

assumes that we can change the behavior of adapt to skip checks
  • Loading branch information
shawkins committed Mar 9, 2022
1 parent 196f3ba commit ac5945e
Show file tree
Hide file tree
Showing 143 changed files with 610 additions and 944 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#### New Features
* Fix #3407: Added Itemable.withItem to directly associate a resource with the DSL. It can be used as an alternative to Loadable.load when you already have the item. There is also client.resourceList(...).getResources() - that will provide the resource list as Resources. This allows you to implement composite operations easily with lambda: client.resourceList(...).getResources().forEach(r -> r.delete());
* Fix #3922: added Client.supports and Client.hasApiGroup methods

#### _**Note**_: Breaking changes in the API
Please see the [migration guide](doc/MIGRATION-v6.md)
Expand Down
10 changes: 9 additions & 1 deletion doc/MIGRATION-v6.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ To use it, exclude the kubernetes-httpclient-okhttp dependency and add the kuber

- Readiness/OpenShiftReadiness moved from client.internal.readiness to client.readiness
- client.utils classes including Base64, CreateOrReplaceHelper, DeleteOrCreateHelper, OptionalDendencyWrapper, etc. are not in the -api jar, they are still in the -client jar under utils.internal.
- Some other effectively internal classes in dsl.base and other packages were moved to corresponding internal packages - it is unlikely this will affect you unless you developed a custom extension.
- Some other effectively internal classes in dsl.base and other packages were moved to corresponding internal packages - it is unlikely this will affect you unless you developed a custom extension. Extension development can now be done exclusively against the api, please see the previous section.

## Deserialization Resolution

Expand All @@ -103,6 +103,11 @@ The group on the object being deserialized is not required to match the prospect

Extension development may now be done using only the kubernetes-client-api dependency. Please see the [extensions](../extensions).

Of note:
- extension related classes are now in the package io.fabric8.kubernetes.client.extension, which means that you should now use META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter
- Unless you need support for specific metadata to be returned by calls to rootPaths, apiGroups, or apiResources, you do not need to create a mock module. The mocking logic can accomodate for based adapt/support checks.
- Do not include any check of support in ExtensionAdapter.adapt

## Resource Changes

KubernetesClient.resource no longer returns NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicable, use NamespaceableResource instead.
Expand Down Expand Up @@ -171,12 +176,15 @@ We've removed setter methods `setIntVal`, `setKind`, `setStrVal` from the class.

Client.isAdaptable and Client.adapt will check first if the existing instance is compatible with the desired type.

Client.adapt will no longer perform the isAdaptable check - that is you may freely adapt from one Client to another as long as the extension exists. If you need to make a specific check of support, please use the Client.supports method.

## Deprecations

- ApiVersionUtil classes in each extension have been deprecated, you should use io.fabric8.kubernetes.client.utils.ApiVersionUtil instead.
- HttpClientUtils.createHttpClient has been deprecated, you should create your own client factory instead.

- Extension specific EnableXXXMockClient and XXXMockServer classes have been deprecated. You can simply use EnableKubernetesMockClient and KubernetesMockServer instead. Dependencies on the xxx-mock jar are then no longer needed, just a dependency to kubernetes-server-mock.
- Client.supportsApiPath and Client.isAdaptable have been deprecated. Please use Client.supports and Client.hasApiGroup as needed.

## Object Sorting

Expand Down
2 changes: 1 addition & 1 deletion extensions/camel-k/client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
</osgi.export>
<osgi.include.resources>
${osgi.include.resources.default},
/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter
/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter
</osgi.include.resources>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@
*/
package io.fabric8.camelk.client;

import io.fabric8.kubernetes.client.Client;
import io.fabric8.camelk.client.dsl.V1alpha1APIGroupDSL;
import io.fabric8.camelk.client.dsl.V1APIGroupDSL;
import io.fabric8.camelk.client.dsl.V1alpha1APIGroupDSL;
import io.fabric8.kubernetes.client.Client;

/**
* Main interface for CamelK client library.
*/
public interface CamelKClient extends Client {
/**
* API entrypoint for tekton.dev/v1beta1 API group resources
* API entrypoint for camel.apache.org/v1 API group resources
*
* @return {@link V1APIGroupDSL} for CamelK resource operations in this API group.
*/
V1APIGroupDSL v1();

/**
* API entrypoint for tekton.dev/v1alpha1 API group resources
* API entrypoint for camel.apache.org/v1alpha1 API group resources
* @return {@link V1alpha1APIGroupDSL} for CamelK resource operations in this API group.
*/
V1alpha1APIGroupDSL v1alpha1();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,23 @@
package io.fabric8.camelk.client;

import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.ExtensionAdapter;
import io.fabric8.kubernetes.client.ExtensionAdapterSupport;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

import java.net.URL;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class CamelKExtensionAdapter extends ExtensionAdapterSupport implements ExtensionAdapter<CamelKClient> {

static final ConcurrentMap<URL, Boolean> IS_CAMELK = new ConcurrentHashMap<>();
static final ConcurrentMap<URL, Boolean> USES_CAMELK_APIGROUPS = new ConcurrentHashMap<>();
public class CamelKExtensionAdapter implements ExtensionAdapter<CamelKClient> {

@Override
public Class<CamelKClient> getExtensionType() {
return CamelKClient.class;
}

@Override
public Boolean isAdaptable(Client client) {
return isAdaptable(client, IS_CAMELK, USES_CAMELK_APIGROUPS, "camel.apache.org");
}

@Override
public CamelKClient adapt(Client client) {
return new DefaultCamelKClient(client);
return new DefaultCamelKClient(client);
}

@Override
public boolean isSupported(Client client) {
return client.hasApiGroup("camel.apache.org", true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public V1APIGroupClient(Client client) {
}

@Override
protected V1APIGroupClient newInstance(Client client) {
public V1APIGroupClient newInstance(Client client) {
return new V1APIGroupClient(client);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.camelk.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1";
}
public class V1APIGroupExtensionAdapter implements ExtensionAdapter<V1APIGroupClient> {

@Override
public Class<V1APIGroupClient> getExtensionType() {
return V1APIGroupClient.class;
}

@Override
protected V1APIGroupClient newInstance(Client client) {
public V1APIGroupClient adapt(Client client) {
return new V1APIGroupClient(client);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public V1alpha1APIGroupClient(Client client) {
}

@Override
protected V1alpha1APIGroupClient newInstance(Client client) {
public V1alpha1APIGroupClient newInstance(Client client) {
return new V1alpha1APIGroupClient(client);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.camelk.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1alpha1APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1alpha1APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1alpha1";
}
public class V1alpha1APIGroupExtensionAdapter implements ExtensionAdapter<V1alpha1APIGroupClient> {

@Override
public Class<V1alpha1APIGroupClient> getExtensionType() {
return V1alpha1APIGroupClient.class;
}

@Override
protected V1alpha1APIGroupClient newInstance(Client client) {
public V1alpha1APIGroupClient adapt(Client client) {
return new V1alpha1APIGroupClient(client);
}
}
2 changes: 1 addition & 1 deletion extensions/certmanager/client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
</osgi.export>
<osgi.include.resources>
${osgi.include.resources.default},
/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter
/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter
</osgi.include.resources>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,10 @@
package io.fabric8.certmanager.client;

import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.ExtensionAdapter;
import io.fabric8.kubernetes.client.ExtensionAdapterSupport;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

import java.net.URL;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class CertManagerExtensionAdapter implements ExtensionAdapter<CertManagerClient> {

public class CertManagerExtensionAdapter extends ExtensionAdapterSupport implements ExtensionAdapter<CertManagerClient> {

static final ConcurrentMap<URL, Boolean> IS_VOLUME_SNAPSHOT = new ConcurrentHashMap<>();
static final ConcurrentMap<URL, Boolean> USES_VOLUME_SNAPSHOT_APIGROUPS = new ConcurrentHashMap<>();
public static final String API_GROUP = "cert-manager.io";

@Override
Expand All @@ -35,12 +28,12 @@ public Class<CertManagerClient> getExtensionType() {
}

@Override
public Boolean isAdaptable(Client client) {
return isAdaptable(client, IS_VOLUME_SNAPSHOT, USES_VOLUME_SNAPSHOT_APIGROUPS, API_GROUP);
public CertManagerClient adapt(Client client) {
return new DefaultCertManagerClient(client);
}

@Override
public CertManagerClient adapt(Client client) {
return new DefaultCertManagerClient(client);
public boolean isSupported(Client client) {
return client.hasApiGroup(API_GROUP, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.certmanager.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1";
}
public class V1APIGroupExtensionAdapter implements ExtensionAdapter<V1APIGroupClient> {

@Override
public Class<V1APIGroupClient> getExtensionType() {
return V1APIGroupClient.class;
}

@Override
protected V1APIGroupClient newInstance(Client client) {
public V1APIGroupClient adapt(Client client) {
return new V1APIGroupClient(client);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.certmanager.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1alpha2APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1alpha2APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1alpha2";
}
public class V1alpha2APIGroupExtensionAdapter implements ExtensionAdapter<V1alpha2APIGroupClient> {

@Override
public Class<V1alpha2APIGroupClient> getExtensionType() {
return V1alpha2APIGroupClient.class;
}

@Override
protected V1alpha2APIGroupClient newInstance(Client client) {
public V1alpha2APIGroupClient adapt(Client client) {
return new V1alpha2APIGroupClient(client);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.certmanager.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1alpha3APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1alpha3APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1alpha3";
}
public class V1alpha3APIGroupExtensionAdapter implements ExtensionAdapter<V1alpha3APIGroupClient> {

@Override
public Class<V1alpha3APIGroupClient> getExtensionType() {
return V1alpha3APIGroupClient.class;
}

@Override
protected V1alpha3APIGroupClient newInstance(Client client) {
public V1alpha3APIGroupClient adapt(Client client) {
return new V1alpha3APIGroupClient(client);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,18 @@
*/
package io.fabric8.certmanager.client;

import io.fabric8.kubernetes.client.APIGroupExtensionAdapter;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

public class V1beta1APIGroupExtensionAdapter extends APIGroupExtensionAdapter<V1beta1APIGroupClient> {
@Override
protected String getAPIGroupName() {
return "v1beta1";
}
public class V1beta1APIGroupExtensionAdapter implements ExtensionAdapter<V1beta1APIGroupClient> {

@Override
public Class<V1beta1APIGroupClient> getExtensionType() {
return V1beta1APIGroupClient.class;
}

@Override
protected V1beta1APIGroupClient newInstance(Client client) {
public V1beta1APIGroupClient adapt(Client client) {
return new V1beta1APIGroupClient(client);
}
}
2 changes: 1 addition & 1 deletion extensions/chaosmesh/client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</osgi.export>
<osgi.include.resources>
${osgi.include.resources.default},
/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter
/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter
</osgi.include.resources>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,23 @@
package io.fabric8.chaosmesh.client;

import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.ExtensionAdapter;
import io.fabric8.kubernetes.client.ExtensionAdapterSupport;
import io.fabric8.kubernetes.client.extension.ExtensionAdapter;

import java.net.URL;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class ChaosMeshExtensionAdapter extends ExtensionAdapterSupport implements ExtensionAdapter<ChaosMeshClient> {

static final ConcurrentMap<URL, Boolean> IS_CHAOS_MESH = new ConcurrentHashMap<>();
static final ConcurrentMap<URL, Boolean> USES_CHAOS_MESH_APIGROUPS = new ConcurrentHashMap<>();
public class ChaosMeshExtensionAdapter implements ExtensionAdapter<ChaosMeshClient> {

@Override
public Class<ChaosMeshClient> getExtensionType() {
return ChaosMeshClient.class;
}

@Override
public Boolean isAdaptable(Client client) {
return isAdaptable(client, IS_CHAOS_MESH, USES_CHAOS_MESH_APIGROUPS, "chaos-mesh.org");
public ChaosMeshClient adapt(Client client) {
return new DefaultChaosMeshClient(client);
}

@Override
public ChaosMeshClient adapt(Client client) {
return new DefaultChaosMeshClient(client);
public boolean isSupported(Client client) {
return client.hasApiGroup("chaos-mesh.org", true);
}

}
2 changes: 1 addition & 1 deletion extensions/istio/client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
</osgi.export>
<osgi.include.resources>
${osgi.include.resources.default},
/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.ExtensionAdapter,
/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter=target/classes/META-INF/services/io.fabric8.kubernetes.client.extension.ExtensionAdapter,
</osgi.include.resources>
</properties>

Expand Down
Loading

0 comments on commit ac5945e

Please sign in to comment.