Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…ractusx_tutorial-resources into feat/351_edc_custom_build
  • Loading branch information
hemantxpatel committed Jul 2, 2024
2 parents ae02d89 + 1e25d2d commit d4bc57a
Show file tree
Hide file tree
Showing 58 changed files with 3,605 additions and 22 deletions.
15 changes: 13 additions & 2 deletions .github/workflows/run-terraform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
uses: helm/kind-action@v1.10.0
with:
config: mxd/kind.config.yaml

cluster_name: mxd
- name: "Install nginx ingress controller"
run: |-
echo "::notice title=nginx ingress on KinD::For details how to run nginx ingress on KinD check https://kind.sigs.k8s.io/docs/user/ingress/#ingress-nginx"
Expand All @@ -53,7 +53,18 @@ jobs:
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
- name: Setup JDK 21
uses: actions/setup-java@v3.13.0
with:
java-version: '21'
distribution: 'temurin'
- name: "Backend-Service Build"
working-directory: mxd/backend-service
run: |-
./gradlew clean dockerize
- name: "Load Docker Images"
run: |-
kind load docker-image -n mxd backend-service:1.0.0
- name: "Terraform init"
working-directory: mxd
run: |-
Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/verify-backend-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#
# Copyright (c) 2024 SAP SE
#
# This program and the accompanying materials are made available under the
# terms of the Apache License, Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
#
# Contributors:
# SAP SE - initial API and implementation

---
name: "Run Tests"

on:
push:
branches:
- main

pull_request:
branches:
- main
paths:
- 'mxd/backend-service/**'

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:

End-To-End-Tests:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'

- run: ./gradlew test
working-directory: mxd/backend-service
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,11 @@ terraform.rc
build

.idea/
mxd/.terraform.lock.hcl
mxd/.terraform.lock.hcl
#Ignore Java Classes and Gradle Build Files
.class.*
mxd/backend-service/.gradle
.lock
.bin
mxd/backend-service/build
*.log
5 changes: 4 additions & 1 deletion mxd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ once and are accessible by all participants.
For the most bare-bones installation of the dataspace, execute the following commands in a shell:

```shell
cd <path/of/mxd/backend-service>
./gradlew clean dockerize
# firstly go to the folder containing the config files
cd <path/of/mxd>
kind create cluster -n mxd --config kind.config.yaml
Expand All @@ -41,6 +43,7 @@ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
kind load docker-image --name mxd backend-service:1.0.0
terraform init
terraform apply
# type "yes" and press enter when prompted to do so
Expand Down Expand Up @@ -222,7 +225,7 @@ Alternatively, please check out the [Postman collections here](./postman)
* [File Transfer: Amazon S3 to Azure Blob Storage](./docs/File%20Transfer%20S3%20to%20Azure.md)
* [Simplify negotiation and transfer using the EDR API](./docs/EDR%20Transfer%20Tutorial.md)
* [Add a new Participant](./docs/Trudy%20Connector%20Tutorial.md)
* [Deploying MXD on Remote Kubernetes Cluster (AWS / GCP)](./docs/MXD%20Remote%20Deployment.md)
* [Deploying MXD on Remote Kubernetes Cluster](./docs/MXD%20Remote%20Deployment.md)

## 4. Improving the setup

Expand Down
93 changes: 93 additions & 0 deletions mxd/backend-service.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#
# Copyright (c) 2023 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License, Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

resource "kubernetes_deployment" "backend-service" {

metadata {
name = "backend-service"
labels = {
App = "backend-service"
}
}

spec {
replicas = 1
selector {
match_labels = {
App = "backend-service"
}
}
template {
metadata {
labels = {
App = "backend-service"
}
}
spec {
container {
name = "backend-service"
image = "backend-service:1.0.0"
image_pull_policy = "Never"

port {
container_port = 8080
name = "backend-port"
}
env {
name = "edc.datasource.backendservice.url"
value = "jdbc:postgresql://${local.backendservice-postgres.database-url}/${local.databases.backendservice.database-name}"
}

env {
name = "edc.datasource.backendservice.user"
value = local.databases.backendservice.database-username
}
env {
name = "edc.datasource.backendservice.password"
value = local.databases.backendservice.database-password
}
env {
name = "web.http.port"
value = 8080
}
env {
name = "JAVA_TOOL_OPTIONS"
value = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044"
}
}
}
}
}
}

resource "kubernetes_service" "backend-service" {
metadata {
name = "backend-service"
}
spec {
selector = {
App = "backend-service"
}
port {
port = 8080
name = "backend-port"
}
}
}

23 changes: 23 additions & 0 deletions mxd/backend-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#
# Copyright (c) 2024 SAP SE
#
# This program and the accompanying materials are made available under the
# terms of the Apache License, Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
#
# Contributors:
# SAP SE - initial API and implementation
#
#

FROM eclipse-temurin:21.0.2_13-jre-alpine

WORKDIR /app

COPY backend-service.jar /app/backend-service.jar

EXPOSE 8080

CMD java -jar backend-service.jar
134 changes: 134 additions & 0 deletions mxd/backend-service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# Tractus-X Backend Service

## API Details Summary

The Backend Service is used to simulate a data source or sink enabling the transfer of data and supporting the validation of the end-to-end process. It has the following APIs:
- [Contents API](#contents-api)
- [Transfer API](#transfer-api)

## Contents API

### Generate a random content

- Method: GET
- URL: http://localhost/backend-service/api/v1/contents/random
- Sample response:

```json
{
"userId": 718895412,
"title": "tmnx",
"text": "ivj"
}
```

### Save the generated content

- Method: POST
- URL: http://localhost/backend-service/api/v1/contents
- Request body:

```json
{
"userId": 718895412,
"title": "tmnx",
"text": "ivj"
}
```

- Sample response containing content id and URL:

```json
{
"id": "3b777103-5e06-461b-90c6-1f99e597f60d",
"url": "http://localhost:8080/api/v1/contents/3b777103-5e06-461b-90c6-1f99e597f60d"
}
```
This URL will be used as an endpoint in the transfer API.

### Fetch a content

- Method: GET
- URL: http://localhost/backend-service/api/v1/contents/{content-id}
- Sample response:

```json
{
"userId": 718895412,
"title": "tmnx",
"text": "ivj"
}
```

### Fetch all contents

- Method: GET
- URL: http://localhost/backend-service/api/v1/contents
- Sample response:

```json
[
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
},
{
"userId": 1,
"id": 2,
"title": "quis ut nam facilis et officia qui",
"completed": false
}
]
```

## Transfer API

### Accept transfer data

- Method: POST
- URL: http://localhost/backend-service/api/v1/transfers
- Request/response:

```json
{
"id": "123456789011",
"endpoint": "http://localhost:8080/api/v1/contents/3b777103-5e06-461b-90c6-1f99e597f60d",
"authKey": "Authorization",
"authCode": "100000",
"properties": {}
}
```

### Get transfer data with ID

- Method: GET
- URL: http://localhost/backend-service/api/v1/transfers/{id}
- Sample response:

```json
{
"id": "123456789011",
"endpoint": "http://localhost:8080/api/v1/contents/3b777103-5e06-461b-90c6-1f99e597f60d",
"authKey": "Authorization",
"authCode": "100000",
"properties": {}
}
```

### Get transfer content
Get the content which is stored at the above endpoint:
- Method: GET
- URL: http://localhost/backend-service/api/v1/transfers/{id}/contents
- Sample response:

```json
{
"userId": 718895412,
"title": "tmnx",
"text": "ivj"
}
```

Alternatively, please check out the [Postman collections here](./assets/postman)
Loading

0 comments on commit d4bc57a

Please sign in to comment.