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*\\(%s)?%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