Skip to content

Commit

Permalink
feat: service binding support for service registry with application s…
Browse files Browse the repository at this point in the history
…ervices
  • Loading branch information
secondsun committed Nov 22, 2021
1 parent 0aa45e7 commit a1f0237
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 1 deletion.
6 changes: 6 additions & 0 deletions extensions/apicurio-registry-avro/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-core-deployment</artifactId>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-service-binding-deployment</artifactId>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-avro-deployment</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.quarkus.apicurio.registry.avro.binding;

import io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.Capability;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;

class ServiceRegistryBindingExtensionProcessor {

@BuildStep
void registerServiceBinding(Capabilities capabilities,
BuildProducer<ServiceProviderBuildItem> serviceProvider) {
if (capabilities.isPresent(Capability.KUBERNETES_SERVICE_BINDING)) {
serviceProvider.produce(
new ServiceProviderBuildItem("io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter",
ServiceRegistryBindingConverter.class.getName()));
}
}
}
5 changes: 4 additions & 1 deletion extensions/apicurio-registry-avro/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
<groupId>io.apicurio</groupId>
<artifactId>apicurio-common-rest-client-vertx</artifactId>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-service-binding</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package io.quarkus.apicurio.registry.binding;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Logger;

import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;

import io.quarkus.kubernetes.service.binding.runtime.ServiceBinding;
import io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConfigSource;
import io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter;

public class ServiceRegistryBindingConverter implements ServiceBindingConverter {

private static Logger LOG = Logger.getLogger(ServiceRegistryBindingConverter.class.getName());

private static final String INCOMING_PREFIX = "mp.messaging.incoming.";
private static final String OUTGOING_PREFIX = "mp.messaging.outgoing.";

@Override
public Optional<ServiceBindingConfigSource> convert(List<ServiceBinding> serviceBindings) {
var matchingByType = ServiceBinding.singleMatchingByType("serviceregistry", serviceBindings);
Config config = ConfigProvider.getConfig();
if (matchingByType.isEmpty()) {
return Optional.empty();
}

var binding = matchingByType.get();

List<String> channels = extractChannels(config);

Map<String, String> properties = new HashMap<>();

String registryUrl = binding.getProperties().get("registryUrl");
if (registryUrl == null) {
registryUrl = binding.getProperties().get("registryurl");
}
if (registryUrl != null) {
properties.put("mp.messaging.connector.smallrye-kafka.apicurio.registry.url", registryUrl);
}

for (String channel : channels) {

String prefix = channel;

String oAuthHost = binding.getProperties().get("oauthServerUrl");
if (oAuthHost == null) {
oAuthHost = binding.getProperties().get("oauthserverurl");
}
if (oAuthHost != null) {
properties.put(prefix + "apicurio.auth.service.url", oAuthHost);
}

String clientId = binding.getProperties().get("clientId");
if (clientId == null) {
clientId = binding.getProperties().get("clientid");
}
if (clientId != null) {
properties.put(prefix + "apicurio.auth.client.id", clientId);
}

String clientSecret = binding.getProperties().get("clientSecret");
if (clientSecret == null) {
clientSecret = binding.getProperties().get("clientsecret");
}
if (clientSecret != null) {
properties.put(prefix + "apicurio.auth.client.secret", clientSecret);
}

String realm = binding.getProperties().get("oauthRealm");
if (realm == null) {
realm = binding.getProperties().get("oauthRealm");
}
if (clientSecret != null) {
properties.put(prefix + "apicurio.auth.realm", realm);
}

if (registryUrl != null) {
properties.put(prefix + "apicurio.registry.url", registryUrl);
}
}

return Optional.of(new ServiceBindingConfigSource("serviceregistry-k8s-service-binding-source", properties));
}

private List<String> extractChannels(Config configIn) {

var list = new ArrayList<String>();

for (String propertyName : configIn.getPropertyNames()) {
if (propertyName.startsWith(INCOMING_PREFIX)) {
var channelName = propertyName.replace(INCOMING_PREFIX, "").split("\\.")[0];
list.add(INCOMING_PREFIX + channelName + ".");
} else if (propertyName.startsWith(OUTGOING_PREFIX)) {
var channelName = propertyName.replace(OUTGOING_PREFIX, "").split("\\.")[0];
list.add(OUTGOING_PREFIX + channelName + ".");
}
}
return list;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter

0 comments on commit a1f0237

Please sign in to comment.