diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef43a07b..92faad1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -142,7 +142,7 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}} type=semver,pattern={{major}}.{{minor}} - type=raw,value=1.13.21-SNAPSHOT,enable=${{ github.event.inputs.deploy_docker == 'true' || github.ref == format('refs/heads/{0}', 'main') }} + type=raw,value=1.13.22-SNAPSHOT,enable=${{ github.event.inputs.deploy_docker == 'true' || github.ref == format('refs/heads/{0}', 'main') }} type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} - name: Agent Plane Hashicorp Container Build and push @@ -180,7 +180,7 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}} type=semver,pattern={{major}}.{{minor}} - type=raw,value=1.13.21-SNAPSHOT,enable=${{ github.event.inputs.deploy_docker == 'true' || github.ref == format('refs/heads/{0}', 'main') }} + type=raw,value=1.13.22-SNAPSHOT,enable=${{ github.event.inputs.deploy_docker == 'true' || github.ref == format('refs/heads/{0}', 'main') }} type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} - name: Agent Plane Azure Vault Container Build and push diff --git a/CHANGELOG.md b/CHANGELOG.md index bf6cc3cb..2805a258 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,13 +24,14 @@ All notable changes to this product will be documented in this file. # Released -## [1.13.21] - 2024-07-15 +## [1.13.22] - 2024-07-29 ### Added ### Changed - Adapted to Tractus-X EDC 0.7.3 +- Add connector url allowance patterns to the chart values for easier configuration. ## [1.12.19] - 2024-05-17 diff --git a/DEPENDENCIES b/DEPENDENCIES index 6eadcd0a..bf5b116d 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -267,8 +267,8 @@ maven/mavencentral/org.eclipse.jetty/jetty-util/11.0.21, EPL-2.0 OR Apache-2.0, maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.21, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.21, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.parsson/parsson/1.1.6, EPL-2.0, approved, ee4j.parsson -maven/mavencentral/org.eclipse.tractusx.agents.edc.agent-plane/agent-plane-protocol/1.13.21-SNAPSHOT, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.edc/auth-jwt/1.13.21-SNAPSHOT, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.agents.edc.agent-plane/agent-plane-protocol/1.13.22-SNAPSHOT, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.edc/auth-jwt/1.13.22-SNAPSHOT, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.edc/core-spi/0.7.3, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.edc/core-utils/0.7.3, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.edc/data-plane-migration/0.7.3, Apache-2.0, approved, automotive.tractusx diff --git a/README.md b/README.md index 0bcaa934..2f20efbc 100644 --- a/README.md +++ b/README.md @@ -120,8 +120,8 @@ kubectl wait --namespace ingress-nginx \ --selector=app.kubernetes.io/component=controller \ --timeout=90s # transfer images -kind load docker-image docker.io/tractusx/agentplane-hashicorp:1.13.21-SNAPSHOT --name ka -kind load docker-image docker.io/tractusx/agentplane-azure-vault:1.13.21-SNAPSHOT --name ka +kind load docker-image docker.io/tractusx/agentplane-hashicorp:1.13.22-SNAPSHOT --name ka +kind load docker-image docker.io/tractusx/agentplane-azure-vault:1.13.22-SNAPSHOT --name ka # run chart testing ct install --charts charts/agent-plane ct install --charts charts/agent-plane-azure-vault diff --git a/agent-plane/README.md b/agent-plane/README.md index a1e33981..11fdcd0e 100644 --- a/agent-plane/README.md +++ b/agent-plane/README.md @@ -66,10 +66,10 @@ mvn package -Pwith-docker-image Alternatively, after a successful build, you can invoke docker yourself ```console -docker build -t tractusx/agentplane-azure-vault:1.13.21-SNAPSHOT -f agentplane-azure-vault/src/main/docker/Dockerfile . +docker build -t tractusx/agentplane-azure-vault:1.13.22-SNAPSHOT -f agentplane-azure-vault/src/main/docker/Dockerfile . ``` ```console -docker build -t tractusx/agentplane-hashicorp:1.13.21-SNAPSHOT -f agentplane-hashicorp/src/main/docker/Dockerfile . +docker build -t tractusx/agentplane-hashicorp:1.13.22-SNAPSHOT -f agentplane-hashicorp/src/main/docker/Dockerfile . ``` diff --git a/agent-plane/agent-plane-protocol/README.md b/agent-plane/agent-plane-protocol/README.md index 71c67373..83580d5d 100644 --- a/agent-plane/agent-plane-protocol/README.md +++ b/agent-plane/agent-plane-protocol/README.md @@ -64,7 +64,7 @@ Add the following dependency to your data-plane artifact pom: org.eclipse.tractusx.agents.edc agent-plane-protocol - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ``` diff --git a/agent-plane/agent-plane-protocol/pom.xml b/agent-plane/agent-plane-protocol/pom.xml index 0fd70e1c..fcef12cc 100644 --- a/agent-plane/agent-plane-protocol/pom.xml +++ b/agent-plane/agent-plane-protocol/pom.xml @@ -25,7 +25,7 @@ org.eclipse.tractusx.agents.edc agent-plane - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ../pom.xml diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/AgentExtension.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/AgentExtension.java index df9900c3..7bcb2e76 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/AgentExtension.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/AgentExtension.java @@ -169,14 +169,16 @@ public void initialize(ServiceExtensionContext context) { monitor, httpRequestFactory, processor, - skillStore); + skillStore, + typeManager); AgentSourceFactory skillSourceFactory = new AgentSourceFactory(AgentProtocol.SKILL_HTTP.getProtocolId(), edcHttpClient, new AgentSourceRequestParamsSupplier(vault, typeManager, config, monitor), monitor, httpRequestFactory, processor, - skillStore); + skillStore, + typeManager); pipelineService.registerFactory(sparqlSourceFactory); pipelineService.registerFactory(skillSourceFactory); diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/AgentHttpAction.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/AgentHttpAction.java index 20e9b5bc..7bdaadc1 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/AgentHttpAction.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/AgentHttpAction.java @@ -19,14 +19,19 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; +import jakarta.ws.rs.BadRequestException; import org.apache.http.HttpStatus; import org.apache.jena.fuseki.servlets.HttpAction; import org.apache.jena.fuseki.system.ActionCategory; +import org.eclipse.tractusx.agents.edc.Tuple; import org.eclipse.tractusx.agents.edc.TupleSet; import org.slf4j.Logger; import java.net.URLDecoder; +import java.util.Arrays; +import java.util.Collection; import java.util.Iterator; +import java.util.List; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -37,10 +42,11 @@ /** - * HttpAction which may either contain - * a query or a predefined skill. In each case + * HttpAction is a wrapper around a request/response + * which may either contain a query or a predefined skill. In each case * the parameterization/input binding can be done either by * url parameters, by a binding set body or both. + * It contains also helper code to bind parameterized queries. */ public class AgentHttpAction extends HttpAction { final String skill; @@ -116,25 +122,35 @@ protected void parseArgs(HttpServletRequest request, HttpServletResponse respons } /** - * parses the body + * parses a given binding into a tupleset + * + * @param resultSet new binding spec + * @param tuples existing bindings + */ + public static void parseBinding(JsonNode resultSet, TupleSet tuples) throws Exception { + ArrayNode bindings = ((ArrayNode) resultSet.get("results").get("bindings")); + for (int count = 0; count < bindings.size(); count++) { + TupleSet ts = new TupleSet(); + JsonNode binding = bindings.get(count); + Iterator vars = binding.fieldNames(); + while (vars.hasNext()) { + String var = vars.next(); + JsonNode value = binding.get(var).get("value"); + ts.add(var, value.textValue()); + } + tuples.merge(ts); + } + } + + /** + * parses the body of the request as an input binding, if + * the content type is hinting to a sparql resultset */ protected void parseBody(HttpServletRequest request, HttpServletResponse response) { if (RESULTSET_CONTENT_TYPE.equals(request.getContentType())) { ObjectMapper om = new ObjectMapper(); try { - JsonNode bindingSet = om.readTree(request.getInputStream()); - ArrayNode bindings = ((ArrayNode) bindingSet.get("results").get("bindings")); - for (int count = 0; count < bindings.size(); count++) { - TupleSet ts = new TupleSet(); - JsonNode binding = bindings.get(count); - Iterator vars = binding.fieldNames(); - while (vars.hasNext()) { - String var = vars.next(); - JsonNode value = binding.get(var).get("value"); - ts.add(var, value.textValue()); - } - tupleSet.merge(ts); - } + parseBinding(om.readTree(request.getInputStream()), tupleSet); } catch (Exception e) { response.setStatus(HttpStatus.SC_BAD_REQUEST); } @@ -167,4 +183,83 @@ public String getGraphs() { public TupleSet getInputBindings() { return tupleSet; } + + /** + * helper method to bind a given tupleset to a parameterized query + * + * @param query the parameterized query + * @param bindings the tupleset to bind + * @return bound query + */ + public static String bind(String query, TupleSet bindings) throws Exception { + Pattern tuplePattern = Pattern.compile("\\([^()]*\\)"); + Pattern variablePattern = Pattern.compile("@(?[a-zA-Z0-9]+)"); + Matcher tupleMatcher = tuplePattern.matcher(query); + StringBuilder replaceQuery = new StringBuilder(); + int lastStart = 0; + + // + // First find parameterized tuple appearances. Each tuple appearance is + // cloned for each bound "row" + // + while (tupleMatcher.find()) { + replaceQuery.append(query.substring(lastStart, tupleMatcher.start())); + String otuple = tupleMatcher.group(0); + Matcher variableMatcher = variablePattern.matcher(otuple); + List variables = new java.util.ArrayList<>(); + while (variableMatcher.find()) { + variables.add(variableMatcher.group("name")); + } + if (variables.size() > 0) { + boolean isFirst = true; + Collection tuples = bindings.getTuples(variables.toArray(new String[0])); + for (Tuple rtuple : tuples) { + if (isFirst) { + isFirst = false; + } else { + replaceQuery.append(" "); + } + String newTuple = otuple; + for (String key : rtuple.getVariables()) { + newTuple = newTuple.replace("@" + key, rtuple.get(key)); + } + replaceQuery.append(newTuple); + } + } else { + replaceQuery.append(otuple); + } + lastStart = tupleMatcher.end(); + } + replaceQuery.append(query.substring(lastStart)); + + // + // Replacing "global" variables appearing not in a tuple expression. + // This cannot be done for all bindings, but only the + // very first one + // + String queryString = replaceQuery.toString(); + + Matcher variableMatcher = variablePattern.matcher(queryString); + List variables = new java.util.ArrayList<>(); + while (variableMatcher.find()) { + variables.add(variableMatcher.group("name")); + } + try { + Collection tuples = bindings.getTuples(variables.toArray(new String[0])); + if (tuples.size() == 0 && variables.size() > 0) { + throw new BadRequestException(String.format("Error: Got variables %s on top-level but no bindings.", Arrays.toString(variables.toArray()))); + } else if (tuples.size() > 1) { + System.err.println(String.format("Warning: Got %s tuples for top-level bindings of variables %s. Using only the first one.", tuples.size(), Arrays.toString(variables.toArray()))); + } + if (tuples.size() > 0) { + Tuple rtuple = tuples.iterator().next(); + for (String key : rtuple.getVariables()) { + queryString = queryString.replace("@" + key, rtuple.get(key)); + } + } + } catch (Exception e) { + throw new BadRequestException(String.format("Error: Could not bind variables"), e); + } + return queryString; + } } diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSource.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSource.java index 466ea6f2..db48b106 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSource.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSource.java @@ -20,15 +20,19 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import okio.Buffer; import org.eclipse.edc.connector.dataplane.http.params.HttpRequestFactory; import org.eclipse.edc.connector.dataplane.http.spi.HttpRequestParams; import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSource; import org.eclipse.edc.connector.dataplane.spi.pipeline.StreamResult; import org.eclipse.edc.http.spi.EdcHttpClient; +import org.eclipse.edc.spi.types.TypeManager; import org.eclipse.edc.spi.types.domain.transfer.DataFlowStartMessage; import org.eclipse.tractusx.agents.edc.AgentConfig; import org.eclipse.tractusx.agents.edc.SkillDistribution; import org.eclipse.tractusx.agents.edc.SkillStore; +import org.eclipse.tractusx.agents.edc.TupleSet; +import org.eclipse.tractusx.agents.edc.http.AgentHttpAction; import org.eclipse.tractusx.agents.edc.sparql.SparqlQueryProcessor; import org.jetbrains.annotations.NotNull; @@ -71,6 +75,8 @@ public class AgentSource implements DataSource { protected DataFlowStartMessage request; + protected TypeManager typeManager; + protected String matchmakingAgentUrl; public static final String AGENT_BOUNDARY = "--"; @@ -114,6 +120,13 @@ protected StreamResult> openMatchmakingInternal() { SkillDistribution distribution = skillStore.getDistribution(asset); String params = request.getProperties().get(AgentSourceHttpParamsDecorator.QUERY_PARAMS); SkillDistribution runMode = SkillDistribution.ALL; + // if we have no distribution constraints, let the runMode decide + if (distribution == SkillDistribution.ALL) { + distribution = runMode; + } else if (runMode == SkillDistribution.ALL) { + // if we have no runMode constraints, let the distribution decide + runMode = distribution; + } if (params.contains("runMode=provider") || params.contains("runMode=PROVIDER")) { runMode = SkillDistribution.PROVIDER; } else if (params.contains("runMode=consumer") || params.contains("runMode=CONSUMER")) { @@ -123,7 +136,20 @@ protected StreamResult> openMatchmakingInternal() { if (distribution == SkillDistribution.PROVIDER) { return StreamResult.error(String.format("Run distribution of skill %s should be consumer, but was set to provider only.", asset)); } - return StreamResult.success(Stream.of(new AgentPart("application/sparql-query", skillText.get().getBytes()))); + String query = skillText.get(); + okhttp3.Request tempRequest = this.requestFactory.toRequest(this.params); + if (tempRequest.body() != null && AgentHttpAction.RESULTSET_CONTENT_TYPE.equals(tempRequest.body().contentType().toString())) { + TupleSet bindings = new TupleSet(); + try { + Buffer buffer = new Buffer(); + tempRequest.body().writeTo(buffer); + AgentHttpAction.parseBinding(typeManager.getMapper().readTree(buffer.readByteArray()), bindings); + query = AgentHttpAction.bind(query, bindings); + } catch (Exception e) { + return StreamResult.error(String.format("The query could not be bound to the given input tupleset.", e)); + } + } + return StreamResult.success(Stream.of(new AgentPart("application/sparql-query", query.getBytes()))); } else if (runMode == SkillDistribution.PROVIDER && distribution == SkillDistribution.CONSUMER) { return StreamResult.error(String.format("Run distribution of skill %s should be provider, but was set to consumer only.", asset)); } @@ -183,11 +209,31 @@ protected StreamResult> openMatchmakingRest() { } else if (params.contains("runMode=consumer") || params.contains("runMode=CONSUMER")) { runMode = SkillDistribution.CONSUMER; } + // if we have no distribution constraints, let the runMode decide + if (distribution == SkillDistribution.ALL) { + distribution = runMode; + } else if (runMode == SkillDistribution.ALL) { + // if we have no runMode constraints, let the distribution decide + runMode = distribution; + } if (runMode == SkillDistribution.CONSUMER) { if (distribution == SkillDistribution.PROVIDER) { return StreamResult.error(String.format("Run distribution of skill %s should be consumer, but was set to provider only.", asset)); } - return StreamResult.success(Stream.of(new AgentPart("application/sparql-query", skillText.get().getBytes()))); + String query = skillText.get(); + okhttp3.Request tempRequest = this.requestFactory.toRequest(this.params); + if (tempRequest.body() != null && AgentHttpAction.RESULTSET_CONTENT_TYPE.equals(tempRequest.body().contentType().toString())) { + TupleSet bindings = new TupleSet(); + try { + Buffer buffer = new Buffer(); + tempRequest.body().writeTo(buffer); + AgentHttpAction.parseBinding(typeManager.getMapper().readTree(buffer.readByteArray()), bindings); + query = AgentHttpAction.bind(query, bindings); + } catch (Exception e) { + return StreamResult.error(String.format("The query could not be bound to the given input tupleset.", e)); + } + } + return StreamResult.success(Stream.of(new AgentPart("application/sparql-query", query.getBytes()))); } else if (runMode == SkillDistribution.PROVIDER && distribution == SkillDistribution.CONSUMER) { return StreamResult.error(String.format("Run distribution of skill %s should be provider, but was set to consumer only.", asset)); } @@ -301,6 +347,11 @@ public AgentSource.Builder matchmakingAgentUrl(String matchmakingAgentUrl) { return this; } + public AgentSource.Builder typeManager(TypeManager typeManager) { + dataSource.typeManager = typeManager; + return this; + } + public AgentSource build() { Objects.requireNonNull(dataSource.requestId, "requestId"); Objects.requireNonNull(dataSource.httpClient, "httpClient"); diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSourceFactory.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSourceFactory.java index b7cb953e..4dc52521 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSourceFactory.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/http/transfer/AgentSourceFactory.java @@ -21,6 +21,7 @@ import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSource; import org.eclipse.edc.http.spi.EdcHttpClient; import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.edc.spi.types.TypeManager; import org.eclipse.edc.spi.types.domain.transfer.DataFlowStartMessage; import org.eclipse.tractusx.agents.edc.SkillStore; import org.eclipse.tractusx.agents.edc.sparql.SparqlQueryProcessor; @@ -36,6 +37,7 @@ public class AgentSourceFactory extends org.eclipse.edc.connector.dataplane.http final SparqlQueryProcessor processor; final SkillStore skillStore; final HttpRequestFactory requestFactory; + final TypeManager typeManager; final String protocol; /** @@ -47,8 +49,9 @@ public class AgentSourceFactory extends org.eclipse.edc.connector.dataplane.http * @param requestFactory for outgoing calls * @param processor the query processor/sparql engine * @param skillStore store for skills + * @param typeManager type manager */ - public AgentSourceFactory(String protocol, EdcHttpClient httpClient, AgentSourceRequestParamsSupplier supplier, Monitor monitor, HttpRequestFactory requestFactory, SparqlQueryProcessor processor, SkillStore skillStore) { + public AgentSourceFactory(String protocol, EdcHttpClient httpClient, AgentSourceRequestParamsSupplier supplier, Monitor monitor, HttpRequestFactory requestFactory, SparqlQueryProcessor processor, SkillStore skillStore, TypeManager typeManager) { super(httpClient, supplier, monitor, requestFactory); this.protocol = protocol; this.supplier = supplier; @@ -57,6 +60,7 @@ public AgentSourceFactory(String protocol, EdcHttpClient httpClient, AgentSource this.skillStore = skillStore; this.processor = processor; this.requestFactory = requestFactory; + this.typeManager = typeManager; } @Override @@ -93,6 +97,7 @@ public DataSource createSource(DataFlowStartMessage request) { .name(dataAddress.getName()) .params(supplier.provideSourceParams(request)) .requestFactory(requestFactory) + .typeManager(typeManager) .skillStore(skillStore) .processor(processor) .request(request) diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/service/DataManagement.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/service/DataManagement.java index a13b33df..d55be4d2 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/service/DataManagement.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/service/DataManagement.java @@ -169,6 +169,20 @@ public class DataManagement { public static final String TRANSFER_CHECK_CALL = "%s/v2/transferprocesses/%s"; public static final String AGREEMENT_CHECK_CALL = "%s/v2/contractagreements/%s"; + public static final String DEFAULT_ID_RESPONSE = "{\n" + + " \"@type\": \"IdResponse\",\n" + + " \"@id\": \"%1$s\",\n" + + " \"createdAt\": %2$d,\n" + + " \"@context\": {\n" + + " \"@vocab\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\",\n" + + " \"tx\": \"https://w3id.org/tractusx/v0.0.1/ns/\",\n" + + " \"tx-auth\": \"https://w3id.org/tractusx/auth/\",\n" + + " \"cx-policy\": \"https://w3id.org/catenax/policy/\",\n" + + " \"odrl\": \"http://www.w3.org/ns/odrl/2/\"\n" + + " }\n" + + "}"; + /** * references to EDC services */ @@ -289,6 +303,7 @@ protected IdResponse createOrUpdateAsset(String assetId, String assetSpec) throw try (var response = httpClient.newCall(request.build()).execute()) { ResponseBody body = response.body(); + String bodyString = String.format(DEFAULT_ID_RESPONSE, assetId, System.currentTimeMillis()); if (!response.isSuccessful() || body == null) { @@ -301,14 +316,17 @@ protected IdResponse createOrUpdateAsset(String assetId, String assetSpec) throw config.getControlPlaneManagementHeaders().forEach(patchRequest::addHeader); try (var patchResponse = httpClient.newCall(patchRequest.build()).execute()) { - body = patchResponse.body(); - if (!patchResponse.isSuccessful() || body == null) { + // patch will return an empty body + if (!patchResponse.isSuccessful()) { monitor.warning(format("Failure in updating the resource at %s. Ignoring", url)); return null; } } + } else { + // parse the actual id response + bodyString = body.string(); } - return JsonLd.processIdResponse(body.string()); + return JsonLd.processIdResponse(bodyString); } catch (Exception e) { monitor.severe(format("Error in calling the control plane at %s", url), e); throw e; diff --git a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/sparql/SparqlQueryProcessor.java b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/sparql/SparqlQueryProcessor.java index cb9e913e..f20a38b2 100644 --- a/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/sparql/SparqlQueryProcessor.java +++ b/agent-plane/agent-plane-protocol/src/main/java/org/eclipse/tractusx/agents/edc/sparql/SparqlQueryProcessor.java @@ -43,8 +43,6 @@ import org.eclipse.edc.spi.types.TypeManager; import org.eclipse.tractusx.agents.edc.AgentConfig; import org.eclipse.tractusx.agents.edc.MonitorWrapper; -import org.eclipse.tractusx.agents.edc.Tuple; -import org.eclipse.tractusx.agents.edc.TupleSet; import org.eclipse.tractusx.agents.edc.http.AgentHttpAction; import org.eclipse.tractusx.agents.edc.http.HttpServletContextAdapter; import org.eclipse.tractusx.agents.edc.http.HttpServletRequestAdapter; @@ -54,8 +52,6 @@ import org.eclipse.tractusx.agents.edc.http.transfer.AgentSourceHttpParamsDecorator; import org.eclipse.tractusx.agents.edc.rdf.RdfStore; -import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; @@ -317,78 +313,24 @@ protected void execute(String queryString, HttpAction action) { queryString = HttpUtils.urlDecodeParameter(query.get()); } } - TupleSet ts = ((AgentHttpAction) action).getInputBindings(); - Pattern tuplePattern = Pattern.compile("\\([^()]*\\)"); - Pattern variablePattern = Pattern.compile("@(?[a-zA-Z0-9]+)"); - Matcher tupleMatcher = tuplePattern.matcher(queryString); - StringBuilder replaceQuery = new StringBuilder(); - int lastStart = 0; - while (tupleMatcher.find()) { - replaceQuery.append(queryString.substring(lastStart, tupleMatcher.start())); - String otuple = tupleMatcher.group(0); - Matcher variableMatcher = variablePattern.matcher(otuple); - List variables = new java.util.ArrayList<>(); - while (variableMatcher.find()) { - variables.add(variableMatcher.group("name")); - } - if (variables.size() > 0) { - try { - boolean isFirst = true; - Collection tuples = ts.getTuples(variables.toArray(new String[0])); - for (Tuple rtuple : tuples) { - if (isFirst) { - isFirst = false; - } else { - replaceQuery.append(" "); - } - String newTuple = otuple; - for (String key : rtuple.getVariables()) { - newTuple = newTuple.replace("@" + key, rtuple.get(key)); - } - replaceQuery.append(newTuple); - } - } catch (Exception e) { - System.err.println(e.getMessage()); - action.getResponse().setStatus(HttpStatus.SC_BAD_REQUEST); - return; - } - } else { - replaceQuery.append(otuple); - } - lastStart = tupleMatcher.end(); - } - replaceQuery.append(queryString.substring(lastStart)); - - queryString = replaceQuery.toString(); - Matcher variableMatcher = variablePattern.matcher(queryString); - List variables = new java.util.ArrayList<>(); - while (variableMatcher.find()) { - variables.add(variableMatcher.group("name")); - } + // bind the query with the parameters + // code has been refactored into AgentHttpAction try { - Collection tuples = ts.getTuples(variables.toArray(new String[0])); - if (tuples.size() == 0 && variables.size() > 0) { - throw new BadRequestException(String.format("Error: Got variables %s on top-level but no bindings.", Arrays.toString(variables.toArray()))); - } else if (tuples.size() > 1) { - System.err.println(String.format("Warning: Got %s tuples for top-level bindings of variables %s. Using only the first one.", tuples.size(), Arrays.toString(variables.toArray()))); - } - if (tuples.size() > 0) { - Tuple rtuple = tuples.iterator().next(); - for (String key : rtuple.getVariables()) { - queryString = queryString.replace("@" + key, rtuple.get(key)); - } - } - } catch (Exception e) { - throw new BadRequestException(String.format("Error: Could not bind variables"), e); + queryString = AgentHttpAction.bind(queryString, ((AgentHttpAction) action).getInputBindings()); + } catch (Exception e) { + System.err.println(e.getMessage()); + action.getResponse().setStatus(HttpStatus.SC_BAD_REQUEST); + return; } + if (action.getContext().isDefined(DataspaceServiceExecutor.ASSET_SYMBOL)) { String targetUrl = action.getContext().get(DataspaceServiceExecutor.TARGET_URL_SYMBOL); String asset = action.getContext().get(DataspaceServiceExecutor.ASSET_SYMBOL); asset = asset.replace("?", "\\?"); String graphPattern = String.format("GRAPH\\s*\\?", UNSET_BASE, asset); Matcher graphMatcher = Pattern.compile(graphPattern).matcher(queryString); - replaceQuery = new StringBuilder(); - lastStart = 0; + StringBuilder replaceQuery = new StringBuilder(); + int lastStart = 0; while (graphMatcher.find()) { replaceQuery.append(queryString.substring(lastStart, graphMatcher.start() - 1)); replaceQuery.append(String.format("SERVICE <%s>", targetUrl)); diff --git a/agent-plane/agent-plane-protocol/src/test/java/org/eclipse/tractusx/agents/edc/service/TestDataspaceSynchronizer.java b/agent-plane/agent-plane-protocol/src/test/java/org/eclipse/tractusx/agents/edc/service/TestDataspaceSynchronizer.java index 39029a28..42228eab 100644 --- a/agent-plane/agent-plane-protocol/src/test/java/org/eclipse/tractusx/agents/edc/service/TestDataspaceSynchronizer.java +++ b/agent-plane/agent-plane-protocol/src/test/java/org/eclipse/tractusx/agents/edc/service/TestDataspaceSynchronizer.java @@ -123,7 +123,7 @@ private static JsonObjectBuilder createOffer() { JsonObjectBuilder offerBuilder = Json.createObjectBuilder() .add("@id", "cx-taxo:GraphAsset?test=ExampleAsset") .add("https://w3id.org/edc/v0.0.1/ns/contenttype", "application/json, application/xml") - .add("https://w3id.org/catenax/ontology/common#version", "1.13.21-SNAPSHOT") + .add("https://w3id.org/catenax/ontology/common#version", "1.13.22-SNAPSHOT") .add("https://w3id.org/catenax/ontology/common#name", "Test Asset") .add("https://w3id.org/catenax/ontology/common#description", "Test Asset for RDF Representation") .add("https://w3id.org/catenax/ontology/common#description@de", "Beispiel Asset für RDF Darstellung") @@ -212,7 +212,7 @@ public void testCatalogDeserialization() { " },\n" + " \"dcat:accessService\": \"ddd4b79e-f785-4e71-9fe5-4a177b3ccf54\"\n" + " },\n" + - " \"edc:version\": \"1.13.21-SNAPSHOT\",\n" + + " \"edc:version\": \"1.13.22-SNAPSHOT\",\n" + " \"http://www.w3.org/2000/01/rdf-schema#isDefinedBy\": \"\",\n" + " \"edc:name\": \"Diagnostic Trouble Code Catalogue Version 2022\",\n" + " \"http://www.w3.org/ns/shacl#shapesGraph\": \"@prefix cx-common: . \\n@prefix : .\\n@prefix cx-diag: .\\n@prefix owl: .\\n@prefix rdf: .\\n@prefix xsd: .\\n@prefix sh: .\\n\\n:OemDTC rdf:type sh:NodeShape ;\\n sh:targetClass cx-diag:DTC ;\\n sh:property [\\n sh:path cx-diag:provisionedBy ;\\n sh:hasValue ;\\n ] ;\\n sh:property [\\n sh:path cx-diag:version ;\\n sh:hasValue \\\"0\\\"^^xsd:long ;\\n ] ;\\n sh:property [\\n sh:path cx-diag:affects ;\\n sh:class :OemDiagnosedParts ;\\n ].\\n\\n:OemDiagnosedParts rdf:type sh:NodeShape ;\\n sh:targetClass cx-diag:DiagnosedPart ;\\n sh:property [\\n sh:path cx-diag:provisionedBy ;\\n sh:hasValue ;\\n ] .\\n\",\n" + diff --git a/agent-plane/agentplane-azure-vault/README.md b/agent-plane/agentplane-azure-vault/README.md index c22baa67..6c89590a 100644 --- a/agent-plane/agentplane-azure-vault/README.md +++ b/agent-plane/agentplane-azure-vault/README.md @@ -54,7 +54,7 @@ mvn -s ../../../settings.xml install -Pwith-docker-image Alternatively, after a sucessful [build](#building) the docker image of the Agent Plane is created using ```console -docker build -t tractusx//agentplane-azure-vault:1.13.21-SNAPSHOT -f src/main/docker/Dockerfile . +docker build -t tractusx//agentplane-azure-vault:1.13.22-SNAPSHOT -f src/main/docker/Dockerfile . ``` To run the docker image, you could invoke this command diff --git a/agent-plane/agentplane-azure-vault/pom.xml b/agent-plane/agentplane-azure-vault/pom.xml index 10174bc8..ec155d9d 100644 --- a/agent-plane/agentplane-azure-vault/pom.xml +++ b/agent-plane/agentplane-azure-vault/pom.xml @@ -25,7 +25,7 @@ org.eclipse.tractusx.agents.edc agent-plane - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ../pom.xml diff --git a/agent-plane/agentplane-azure-vault/src/main/docker/Dockerfile b/agent-plane/agentplane-azure-vault/src/main/docker/Dockerfile index 5ca2d89d..78ef4d56 100644 --- a/agent-plane/agentplane-azure-vault/src/main/docker/Dockerfile +++ b/agent-plane/agentplane-azure-vault/src/main/docker/Dockerfile @@ -22,7 +22,7 @@ ENV OTEL_AGENT_LOCATION "https://github.com/open-telemetry/opentelemetry-java-in HEALTHCHECK NONE -RUN apk update && apk add curl=8.5.0-r0 --no-cache +RUN apk update && apk add curl=8.9.0-r0 --no-cache RUN curl -L --proto "=https" -sSf ${OTEL_AGENT_LOCATION} --output /tmp/opentelemetry-javaagent.jar FROM eclipse-temurin:22-jre-alpine diff --git a/agent-plane/agentplane-hashicorp/README.md b/agent-plane/agentplane-hashicorp/README.md index 6c076ab4..aeba1002 100644 --- a/agent-plane/agentplane-hashicorp/README.md +++ b/agent-plane/agentplane-hashicorp/README.md @@ -54,7 +54,7 @@ mvn -s ../../../settings.xml install -Pwith-docker-image Alternatively, after a sucessful [build](#building) the docker image of the Agent Plane is created using ```console -docker build -t tractusx/agentplane-hashicorp:1.13.21-SNAPSHOT -f src/main/docker/Dockerfile . +docker build -t tractusx/agentplane-hashicorp:1.13.22-SNAPSHOT -f src/main/docker/Dockerfile . ``` To run the docker image, you could invoke this command @@ -66,7 +66,7 @@ docker run -p 8082:8082 \ -v $(pwd)/resources/dataplane.properties:/app/configuration.properties \ -v $(pwd)/resources/opentelemetry.properties:/app/opentelemetry.properties \ -v $(pwd)/resources/logging.properties:/app/logging.properties \ - tractusx/agentplane-hashicorp:1.13.21-SNAPSHOT + tractusx/agentplane-hashicorp:1.13.22-SNAPSHOT ```` Afterwards, you should be able to access the [local SparQL endpoint](http://localhost:8082/api/agent) via diff --git a/agent-plane/agentplane-hashicorp/pom.xml b/agent-plane/agentplane-hashicorp/pom.xml index b545d1dc..120d12d0 100644 --- a/agent-plane/agentplane-hashicorp/pom.xml +++ b/agent-plane/agentplane-hashicorp/pom.xml @@ -25,7 +25,7 @@ org.eclipse.tractusx.agents.edc agent-plane - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ../pom.xml diff --git a/agent-plane/agentplane-hashicorp/src/main/docker/Dockerfile b/agent-plane/agentplane-hashicorp/src/main/docker/Dockerfile index b9f63f06..81d49693 100644 --- a/agent-plane/agentplane-hashicorp/src/main/docker/Dockerfile +++ b/agent-plane/agentplane-hashicorp/src/main/docker/Dockerfile @@ -21,7 +21,7 @@ ENV OTEL_AGENT_LOCATION "https://github.com/open-telemetry/opentelemetry-java-in HEALTHCHECK NONE -RUN apk update && apk add curl=8.5.0-r0 --no-cache +RUN apk update && apk add curl=8.9.0-r0 --no-cache RUN curl -L --proto "=https" -sSf ${OTEL_AGENT_LOCATION} --output /tmp/opentelemetry-javaagent.jar FROM eclipse-temurin:22-jre-alpine diff --git a/agent-plane/pom.xml b/agent-plane/pom.xml index 0fc7efa9..bc6d679c 100644 --- a/agent-plane/pom.xml +++ b/agent-plane/pom.xml @@ -28,7 +28,7 @@ org.eclipse.tractusx.agents edc - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ../pom.xml Tractus-X EDC Agent Plane diff --git a/charts/agent-plane-azure-vault/Chart.yaml b/charts/agent-plane-azure-vault/Chart.yaml index ca5da94a..79cc8ec2 100644 --- a/charts/agent-plane-azure-vault/Chart.yaml +++ b/charts/agent-plane-azure-vault/Chart.yaml @@ -41,12 +41,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.13.21-SNAPSHOT +version: 1.13.22-SNAPSHOT # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "1.13.21-SNAPSHOT" +appVersion: "1.13.22-SNAPSHOT" home: https://github.com/eclipse-tractusx/knowledge-agents-edc/ sources: - https://github.com/eclipse-tractusx/knowledge-agents-edc/tree/main/charts/agent-connector diff --git a/charts/agent-plane-azure-vault/README.md b/charts/agent-plane-azure-vault/README.md index 0c842055..d8995cf8 100644 --- a/charts/agent-plane-azure-vault/README.md +++ b/charts/agent-plane-azure-vault/README.md @@ -21,7 +21,7 @@ # agent-plane-azure-vault -![Version: 1.13.21-SNAPSHOT](https://img.shields.io/badge/Version-1.13.21--SNAPSHOT-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.13.21-SNAPSHOT](https://img.shields.io/badge/AppVersion-1.13.21--SNAPSHOT-informational?style=flat-square) +![Version: 1.13.22-SNAPSHOT](https://img.shields.io/badge/Version-1.13.22--SNAPSHOT-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.13.22-SNAPSHOT](https://img.shields.io/badge/AppVersion-1.13.22--SNAPSHOT-informational?style=flat-square) A Helm chart for an Agent-Enabled Tractus-X Data Plane which registers at a running Control Plane. @@ -59,7 +59,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add eclipse-tractusx https://eclipse-tractusx.github.io/charts/dev -helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT +helm install my-release eclipse-tractusx/agent-plane --version 1.13.22-SNAPSHOT ``` ## Maintainers @@ -83,15 +83,17 @@ helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT | Key | Type | Default | Description | |-----|------|---------|-------------| | affinity | object | `{}` | [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) to configure which nodes the pods can be scheduled on | -| agent | object | `{"connectors":{},"default":["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"],"maxbatchsize":"9223372036854775807","services":{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"deny":"http://.*"},"skillcontract":"Contract?partner=Skill","synchronization":-1}` | Agent-Specific Settings | +| agent | object | `{"connectors":{},"default":["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"],"maxbatchsize":"9223372036854775807","services":{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"connector":{"allow":"https://.*","deny":"http://.*"},"deny":"http://.*"},"skillcontract":"Contract?partner=Skill","synchronization":-1}` | Agent-Specific Settings | | agent.connectors | object | `{}` | A map of partner ids to remote connector IDS URLs to synchronize with | | agent.default | list | `["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"]` | A list of local or remote graph descriptions to build the default meta-graph/federated data catalogue | | agent.maxbatchsize | string | `"9223372036854775807"` | Sets the maximal batch size when delegating to agents and services | -| agent.services | object | `{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"deny":"http://.*"}` | A set of configs for regulating outgoing service calls | +| agent.services | object | `{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"connector":{"allow":"https://.*","deny":"http://.*"},"deny":"http://.*"}` | A set of configs for regulating outgoing service calls | | agent.services.allow | string | `"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)"` | A regular expression which outgoing service URLs must match (unless overwritten by a specific asset property) | | agent.services.asset | object | `{"allow":"(edcs?://.*)","deny":"https?://.*"}` | A set of configs for regulating outgoing service calls when providing an asset (when no specific asset property is given) | | agent.services.asset.allow | string | `"(edcs?://.*)"` | A regular expression which outgoing service URLs must match (unless overwritten by a specific asset property) | | agent.services.asset.deny | string | `"https?://.*"` | A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) | +| agent.services.connector.allow | string | `"https://.*"` | A regular expression which outgoing connector URLs must match | +| agent.services.connector.deny | string | `"http://.*"` | A regular expression which outgoing connector URLs must not match | | agent.services.deny | string | `"http://.*"` | A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) | | agent.skillcontract | string | `"Contract?partner=Skill"` | Names the visible contract under which new skills are published (if not otherwise specified) | | agent.synchronization | int | `-1` | The synchronization interval in ms to update the federated data catalogue | @@ -244,4 +246,4 @@ helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT | volumes | list | `[]` | [volume](https://kubernetes.io/docs/concepts/storage/volumes/) directories | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.2](https://github.com/norwoodj/helm-docs/releases/v1.11.2) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/agent-plane-azure-vault/ci/integration-values.yaml b/charts/agent-plane-azure-vault/ci/integration-values.yaml index f0e2db9e..d0845c50 100644 --- a/charts/agent-plane-azure-vault/ci/integration-values.yaml +++ b/charts/agent-plane-azure-vault/ci/integration-values.yaml @@ -29,7 +29,7 @@ participant: # image: # repository: ghcr.io/catenax-ng/tx-knowledge-agents-edc/agentplane-azure-vault -# tag: 1.13.21-SNAPSHOT +# tag: 1.13.22-SNAPSHOT controlplane: endpoints: diff --git a/charts/agent-plane-azure-vault/values.yaml b/charts/agent-plane-azure-vault/values.yaml index 99e178d9..858e1276 100644 --- a/charts/agent-plane-azure-vault/values.yaml +++ b/charts/agent-plane-azure-vault/values.yaml @@ -408,6 +408,11 @@ agent: allow: '(edcs?://.*)' # -- A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) deny: 'https?://.*' + connector: + # -- A regular expression which outgoing connector URLs must match + allow: 'https://.*' + # -- A regular expression which outgoing connector URLs must not match + deny: 'http://.*' # -- Standard settings for persistence, "jdbcUrl", "username" and "password" need to be overridden postgresql: diff --git a/charts/agent-plane/Chart.yaml b/charts/agent-plane/Chart.yaml index c0db787e..e4e4c1b6 100644 --- a/charts/agent-plane/Chart.yaml +++ b/charts/agent-plane/Chart.yaml @@ -41,12 +41,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.13.21-SNAPSHOT +version: 1.13.22-SNAPSHOT # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "1.13.21-SNAPSHOT" +appVersion: "1.13.22-SNAPSHOT" home: https://github.com/eclipse-tractusx/knowledge-agents-edc/ sources: - https://github.com/eclipse-tractusx/knowledge-agents-edc/tree/main/charts/agent-connector diff --git a/charts/agent-plane/README.md b/charts/agent-plane/README.md index 0a0cac59..d01bbf5c 100644 --- a/charts/agent-plane/README.md +++ b/charts/agent-plane/README.md @@ -21,7 +21,7 @@ # agent-plane -![Version: 1.13.21-SNAPSHOT](https://img.shields.io/badge/Version-1.13.21--SNAPSHOT-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.13.21-SNAPSHOT](https://img.shields.io/badge/AppVersion-1.13.21--SNAPSHOT-informational?style=flat-square) +![Version: 1.13.22-SNAPSHOT](https://img.shields.io/badge/Version-1.13.22--SNAPSHOT-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.13.22-SNAPSHOT](https://img.shields.io/badge/AppVersion-1.13.22--SNAPSHOT-informational?style=flat-square) A Helm chart for an Agent-Enabled Tractus-X Data Plane which registers at a running Control Plane. @@ -59,7 +59,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add eclipse-tractusx https://eclipse-tractusx.github.io/charts/dev -helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT +helm install my-release eclipse-tractusx/agent-plane --version 1.13.22-SNAPSHOT ``` ## Maintainers @@ -84,15 +84,17 @@ helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT | Key | Type | Default | Description | |-----|------|---------|-------------| | affinity | object | `{}` | [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) to configure which nodes the pods can be scheduled on | -| agent | object | `{"connectors":{},"default":["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"],"maxbatchsize":"9223372036854775807","services":{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"deny":"http://.*"},"skillcontract":"Contract?partner=Skill","synchronization":-1}` | Agent-Specific Settings | +| agent | object | `{"connectors":{},"default":["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"],"maxbatchsize":"9223372036854775807","services":{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"connector":{"allow":"https://.*","deny":"http://.*"},"deny":"http://.*"},"skillcontract":"Contract?partner=Skill","synchronization":-1}` | Agent-Specific Settings | | agent.connectors | object | `{}` | A map of partner ids to remote connector IDS URLs to synchronize with | | agent.default | list | `["dataspace.ttl","https://w3id.org/catenax/ontology.ttl"]` | A list of local or remote graph descriptions to build the default meta-graph/federated data catalogue | | agent.maxbatchsize | string | `"9223372036854775807"` | Sets the maximal batch size when delegating to agents and services | -| agent.services | object | `{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"deny":"http://.*"}` | A set of configs for regulating outgoing service calls | +| agent.services | object | `{"allow":"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)","asset":{"allow":"(edcs?://.*)","deny":"https?://.*"},"connector":{"allow":"https://.*","deny":"http://.*"},"deny":"http://.*"}` | A set of configs for regulating outgoing service calls | | agent.services.allow | string | `"(edcs?://.*)|(https://query\\\\.wikidata\\\\.org/sparql)"` | A regular expression which outgoing service URLs must match (unless overwritten by a specific asset property) | | agent.services.asset | object | `{"allow":"(edcs?://.*)","deny":"https?://.*"}` | A set of configs for regulating outgoing service calls when providing an asset (when no specific asset property is given) | | agent.services.asset.allow | string | `"(edcs?://.*)"` | A regular expression which outgoing service URLs must match (unless overwritten by a specific asset property) | | agent.services.asset.deny | string | `"https?://.*"` | A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) | +| agent.services.connector.allow | string | `"https://.*"` | A regular expression which outgoing connector URLs must match | +| agent.services.connector.deny | string | `"http://.*"` | A regular expression which outgoing connector URLs must not match | | agent.services.deny | string | `"http://.*"` | A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) | | agent.skillcontract | string | `"Contract?partner=Skill"` | Names the visible contract under which new skills are published (if not otherwise specified) | | agent.synchronization | int | `-1` | The synchronization interval in ms to update the federated data catalogue | @@ -250,4 +252,4 @@ helm install my-release eclipse-tractusx/agent-plane --version 1.13.21-SNAPSHOT | volumes | list | `[]` | [volume](https://kubernetes.io/docs/concepts/storage/volumes/) directories | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.2](https://github.com/norwoodj/helm-docs/releases/v1.11.2) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/agent-plane/ci/integration-values.yaml b/charts/agent-plane/ci/integration-values.yaml index 8a2168da..36a7dfe9 100644 --- a/charts/agent-plane/ci/integration-values.yaml +++ b/charts/agent-plane/ci/integration-values.yaml @@ -30,7 +30,7 @@ participant: # image: # repository: ghcr.io/catenax-ng/tx-knowledge-agents-edc/agentplane-hashicorp -# tag: 1.13.21-SNAPSHOT +# tag: 1.13.22-SNAPSHOT controlplane: endpoints: diff --git a/charts/agent-plane/values.yaml b/charts/agent-plane/values.yaml index cf8aa910..d314836c 100644 --- a/charts/agent-plane/values.yaml +++ b/charts/agent-plane/values.yaml @@ -413,6 +413,11 @@ agent: allow: '(edcs?://.*)' # -- A regular expression which outgoing service URLs must not match (unless overwritten by a specific asset property) deny: 'https?://.*' + connector: + # -- A regular expression which outgoing connector URLs must match + allow: 'https://.*' + # -- A regular expression which outgoing connector URLs must not match + deny: 'http://.*' # -- Standard settings for persistence, "jdbcUrl", "username" and "password" need to be overridden postgresql: diff --git a/common/README.md b/common/README.md index 41a6a371..2756be67 100644 --- a/common/README.md +++ b/common/README.md @@ -57,7 +57,7 @@ add the following dependency to your maven dependencies (gradle should work anal org.eclipse.tractusx.edc auth-jwt - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT diff --git a/common/auth-jwt/README.md b/common/auth-jwt/README.md index ecf08e57..6f95afd0 100644 --- a/common/auth-jwt/README.md +++ b/common/auth-jwt/README.md @@ -37,7 +37,7 @@ Add the following dependency to your EDC artifact pom: org.eclipse.tractusx.agents.edc auth-jwt - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ``` diff --git a/common/auth-jwt/pom.xml b/common/auth-jwt/pom.xml index ac60ded1..1a3ed8ad 100644 --- a/common/auth-jwt/pom.xml +++ b/common/auth-jwt/pom.xml @@ -27,7 +27,7 @@ org.eclipse.tractusx.agents edc - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT ../../pom.xml diff --git a/docs/README.md b/docs/README.md index 8b0a8af5..29006c08 100644 --- a/docs/README.md +++ b/docs/README.md @@ -75,7 +75,7 @@ dependencies: alias: my-connector - name: agent-plane repository: https://eclipse-tractusx.github.io/charts/dev - version: 1.13.21-SNAPSHOT + version: 1.13.22-SNAPSHOT alias: my-agent ``` @@ -90,7 +90,7 @@ dependencies: alias: my-connector - name: agent-plane-azure-vault repository: https://eclipse-tractusx.github.io/charts/dev - version: 1.13.21-SNAPSHOT + version: 1.13.22-SNAPSHOT alias: my-agent ``` diff --git a/pom.xml b/pom.xml index d93ff8e8..32b161fb 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 4.0.0 org.eclipse.tractusx.agents edc - 1.13.21-SNAPSHOT + 1.13.22-SNAPSHOT pom Tractus-X Knowledge Agents EDC Extensions EDC-Related Artifacts for Federated Procedure Calls diff --git a/upgrade_version.sh b/upgrade_version.sh index 44a98176..6843fb67 100755 --- a/upgrade_version.sh +++ b/upgrade_version.sh @@ -16,7 +16,7 @@ # # SPDX-License-Identifier: Apache-2.0 -OLD_VERSION=1.13.21-SNAPSHOT +OLD_VERSION=1.13.22-SNAPSHOT echo Upgrading from $OLD_VERSION to $1 PATTERN=s/$OLD_VERSION/$1/g LC_ALL=C