Skip to content

Commit

Permalink
Adding demonstration on how to extends Microcks images - starting wit…
Browse files Browse the repository at this point in the history
…h 1.8.1

Signed-off-by: Laurent Broudoux <[email protected]>
  • Loading branch information
lbroudoux committed Jan 9, 2024
1 parent 85c9d7e commit 8049e1e
Show file tree
Hide file tree
Showing 14 changed files with 462 additions and 0 deletions.
32 changes: 32 additions & 0 deletions acme-lib/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
10 changes: 10 additions & 0 deletions acme-lib/Dockerfile.acme
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM quay.io/microcks/microcks:nightly

MAINTAINER Laurent Broudoux <[email protected]>

# Copy libraries jar files
COPY lib /deployments/lib

ENV JAVA_OPTIONS=-Dloader.path=/deployments/lib
ENV JAVA_MAIN_CLASS=org.springframework.boot.loader.PropertiesLauncher
ENV JAVA_APP_JAR=app.jar
8 changes: 8 additions & 0 deletions acme-lib/Dockerfile.acme.minion
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM quay.io/microcks/microcks-async-minion:nightly

MAINTAINER Laurent Broudoux <[email protected]>

# Copy libraries jar files
COPY lib /deployments/lib

ENV JAVA_CLASSPATH=/deployments/*:/deployments/lib/*
120 changes: 120 additions & 0 deletions acme-lib/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
## Main webapp extension

### Docker compose mount

```sh
docker-compose -f docker-compose-mount.yml up -d
```

```groovy
def java = new org.acme.lib.Greeting();
def groovy = new org.acme.lib.GroovyGreeting();
log.info java.greet("World")
log.info groovy.greet("My Dear")
return "pastries_json"
```

```
08:47:26.491 DEBUG 1 --- [80-exec-10] i.github.microcks.web.RestController : Found a valid operation GET /pastry with rules: def java = new org.acme.lib.Greeting();
def groovy = new org.acme.lib.GroovyGreeting();
log.info java.greet("World")
log.info groovy.greet("my Dear")
return "pastries_json"
08:47:27.272 INFO 1 --- [80-exec-10] i.g.m.util.script.ScriptEngineBinder : Hello World!
08:47:27.279 INFO 1 --- [80-exec-10] i.g.m.util.script.ScriptEngineBinder : Groovy my Dear!
08:47:27.279 DEBUG 1 --- [80-exec-10] i.github.microcks.web.RestController : Dispatch criteria for finding response is pastries_json
```

```sh
docker-compose -f docker-compose-mount.yml down
```

### Custom image

``` sh
docker build -f Dockerfile.acme -t acme/microcks-ext:nightly .
```

```sh
docker-compose -f docker-compose-acme.yml up -d
```

```
08:39:01.062 DEBUG 1 --- [080-exec-6] i.github.microcks.web.RestController : Found a valid operation GET /pastry with rules: def java = new org.acme.lib.Greeting();
def groovy = new org.acme.lib.GroovyGreeting();
log.info java.greet("World")
log.info groovy.greet("My Dear")
return "pastries_json"
08:39:01.433 INFO 1 --- [080-exec-6] i.g.m.util.script.ScriptEngineBinder : Hello World!
08:39:01.437 INFO 1 --- [080-exec-6] i.g.m.util.script.ScriptEngineBinder : Groovy My Dear!
08:39:01.438 DEBUG 1 --- [080-exec-6] i.github.microcks.web.RestController : Dispatch criteria for finding response is pastries_json
```

```sh
docker-compose -f docker-compose-acme.yml down
```

## Async Minion extension

### Docker compose mount

```sh
docker-compose -f docker-compose-mount-async.yml up -d
```

```sh
$ docker ps
=== OUTPUT ===
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d314d3bf8b0 quay.io/microcks/microcks-async-minion:nightly "/deployments/run-ja…" 5 seconds ago Up 1 second 8080/tcp, 0.0.0.0:8081->8081/tcp microcks-async-minion
052dd9777229 quay.io/microcks/microcks:nightly "/deployments/run-ja…" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp, 8778/tcp, 0.0.0.0:9090->9090/tcp, 9779/tcp microcks
5ec66cc0910d mongo:3.6.23 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 27017/tcp microcks-db
ca98a4b0ed9e vectorized/redpanda:v22.2.2 "/entrypoint.sh redp…" 6 seconds ago Up 5 seconds 8081-8082/tcp, 0.0.0.0:9092->9092/tcp, 9644/tcp, 0.0.0.0:19092->19092/tcp microcks-kafka
```

```
2024-01-09 12:46:08,568 INFO [io.sma.rea.mes.kafka] (main) SRMSG18229: Configured topics for channel 'microcks-services-updates': [microcks-services-updates]
Handling the callback...
2024-01-09 12:46:08,641 INFO [org.apa.kaf.com.sec.oau.int.exp.ExpiringCredentialRefreshingLogin] (smallrye-kafka-consumer-thread-0) Successfully logged in.
```

```sh
docker-compose -f docker-compose-mount-async.yml down
```

### Custom image + docker compose mount for properties

``` sh
docker build -f Dockerfile.acme.minion -t acme/microcks-async-minion-ext:nightly .
```

```sh
docker-compose -f docker-compose-acme-async.yml up -d
```

```sh
$ docker ps
=== OUTPUT ===
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9349ef4c43c9 acme/microcks-async-minion-ext:nightly "/deployments/run-ja…" 4 seconds ago Up 2 seconds 8080/tcp, 0.0.0.0:8081->8081/tcp microcks-async-minion
513540c57512 quay.io/microcks/microcks:nightly "/deployments/run-ja…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, 8778/tcp, 0.0.0.0:9090->9090/tcp, 9779/tcp microcks
fc4d95eb2222 mongo:3.6.23 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 27017/tcp microcks-db
3cf96a1a85a7 vectorized/redpanda:v22.2.2 "/entrypoint.sh redp…" 4 seconds ago Up 3 seconds 8081-8082/tcp, 0.0.0.0:9092->9092/tcp, 9644/tcp, 0.0.0.0:19092->19092/tcp microcks-kafka
```


```
2024-01-09 09:09:22,399 INFO [io.sma.rea.mes.kafka] (main) SRMSG18229: Configured topics for channel 'microcks-services-updates': [microcks-services-updates]
Handling the callback...
2024-01-09 09:09:22,566 INFO [org.apa.kaf.com.sec.oau.int.exp.ExpiringCredentialRefreshingLogin] (smallrye-kafka-consumer-thread-0) Successfully logged in.
```

```sh
docker-compose -f docker-compose-acme-async.yml down
```
40 changes: 40 additions & 0 deletions acme-lib/config/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Async mocking support.
async-api.enabled=true

# Access to Microcks API server.
%docker-compose.io.github.microcks.minion.async.client.MicrocksAPIConnector/mp-rest/url=http://microcks:8080

# Access to Keycloak through docker network
%docker-compose.keycloak.auth.url=http://keycloak:8080

# Access to Kafka broker.
%docker-compose.kafka.bootstrap.servers=kafka:19092

# Do not save any consumer-offset on the broker as there's a re-sync on each minion startup.
%docker-compose.mp.messaging.incoming.microcks-services-updates.enable.auto.commit=false
%docker-compose.mp.messaging.incoming.microcks-services-updates.bootstrap.servers=kafka:19092


%docker-compose.kafka.security.protocol=SASL_SSL
%docker-compose.kafka.sasl.mechanism=OAUTHBEARER
%docker-compose.kafka.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required kid="ABCDefgh11Pi7jKLMNOpq-R0s3TuVWxyzAbcDEFgHI0" login.id="kafka_producer_prem";
%docker-compose.kafka.sasl.login.callback.handler.class=org.acme.lib.CustomAuthenticateCallbackHandler

%docker-compose.mp.messaging.incoming.microcks-services-updates.security.protocol=SASL_SSL
%docker-compose.mp.messaging.incoming.microcks-services-updates.sasl.mechanism=OAUTHBEARER
%docker-compose.mp.messaging.incoming.microcks-services-updates.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required kid="ABCDefgh11Pi7jKLMNOpq-R0s3TuVWxyzAbcDEFgHI0" login.id="kafka_producer_prem";
%docker-compose.mp.messaging.incoming.microcks-services-updates.sasl.login.callback.handler.class=org.acme.lib.CustomAuthenticateCallbackHandler


# Explicitly telling the minion the protocols we want to support
%docker-compose.minion.supported-bindings=KAFKA,WS

# %docker-compose.minion.supported-bindings=KAFKA,WS,MQTT,AMQP,NATS

# %docker-compose.mqtt.server=localhost:1883
# %docker-compose.mqtt.username=microcks
# %docker-compose.mqtt.password=microcks

# %docker-compose.amqp.server=localhost:5672
# %docker-compose.amqp.username=microcks
# %docker-compose.amqp.password=microcks
8 changes: 8 additions & 0 deletions acme-lib/config/features.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
features.feature.async-api.enabled=true
features.feature.async-api.frequencies=3,10,30
features.feature.async-api.default-binding=KAFKA
features.feature.async-api.endpoint-KAFKA=localhost:9092
features.feature.async-api.endpoint-MQTT=my-mqtt-broker.apps.try.microcks.io:1883
features.feature.async-api.endpoint-AMQP=my-amqp-broker.apps.try.microcks.io:5672
features.feature.async-api.endpoint-WS=localhost:8081
features.feature.async-api.endpoint-NATS=localhost:4222
56 changes: 56 additions & 0 deletions acme-lib/docker-compose-acme-async.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
version: '2'

services:
mongo:
image: mongo:3.6.23
container_name: microcks-db
volumes:
- "~/tmp/microcks-data:/data/db"

kafka:
image: vectorized/redpanda:v22.2.2
container_name: microcks-kafka
command: [
"redpanda", "start",
"--overprovisioned --smp 1 --memory 1G --reserve-memory 0M --node-id 0 --check=false",
"--kafka-addr PLAINTEXT://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092",
"--advertise-kafka-addr PLAINTEXT://kafka:19092,EXTERNAL://localhost:9092"
]
ports:
- "9092:9092"
- "19092:19092"

app:
depends_on:
- mongo
image: quay.io/microcks/microcks:nightly
container_name: microcks
volumes:
- "./config:/deployments/config"
ports:
- "8080:8080"
- "9090:9090"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATA_MONGODB_URI=mongodb://mongo:27017
- SPRING_DATA_MONGODB_DATABASE=microcks
- POSTMAN_RUNNER_URL=http://postman:3000
- TEST_CALLBACK_URL=http://microcks:8080
- SERVICES_UPDATE_INTERVAL=0 0 0/2 * * *
- KEYCLOAK_ENABLED=false
#- MAX_UPLOAD_FILE_SIZE=3MB
- ASYNC_MINION_URL=http://microcks-async-minion:8081
- KAFKA_BOOTSTRAP_SERVER=kafka:19092

async-minion:
depends_on:
- app
ports:
- "8081:8081"
image: acme/microcks-async-minion-ext:nightly
container_name: microcks-async-minion
restart: on-failure
volumes:
- "./config:/deployments/config"
environment:
- QUARKUS_PROFILE=docker-compose
29 changes: 29 additions & 0 deletions acme-lib/docker-compose-acme.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: '2'

services:
mongo:
image: mongo:3.6.23
container_name: microcks-db
volumes:
- "~/tmp/microcks-data:/data/db"

app:
depends_on:
- mongo
image: acme/microcks-ext:nightly
container_name: microcks
ports:
- "8080:8080"
- "9090:9090"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATA_MONGODB_URI=mongodb://mongo:27017
- SPRING_DATA_MONGODB_DATABASE=microcks
- POSTMAN_RUNNER_URL=http://postman:3000
- TEST_CALLBACK_URL=http://microcks:8080
- SERVICES_UPDATE_INTERVAL=0 0 0/2 * * *
- KEYCLOAK_ENABLED=false
#- MAX_UPLOAD_FILE_SIZE=3MB



58 changes: 58 additions & 0 deletions acme-lib/docker-compose-mount-async.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
version: '2'

services:
mongo:
image: mongo:3.6.23
container_name: microcks-db
volumes:
- "~/tmp/microcks-data:/data/db"

kafka:
image: vectorized/redpanda:v22.2.2
container_name: microcks-kafka
command: [
"redpanda", "start",
"--overprovisioned --smp 1 --memory 1G --reserve-memory 0M --node-id 0 --check=false",
"--kafka-addr PLAINTEXT://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092",
"--advertise-kafka-addr PLAINTEXT://kafka:19092,EXTERNAL://localhost:9092"
]
ports:
- "9092:9092"
- "19092:19092"

app:
depends_on:
- mongo
image: quay.io/microcks/microcks:nightly
container_name: microcks
volumes:
- "./config:/deployments/config"
ports:
- "8080:8080"
- "9090:9090"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATA_MONGODB_URI=mongodb://mongo:27017
- SPRING_DATA_MONGODB_DATABASE=microcks
- POSTMAN_RUNNER_URL=http://postman:3000
- TEST_CALLBACK_URL=http://microcks:8080
- SERVICES_UPDATE_INTERVAL=0 0 0/2 * * *
- KEYCLOAK_ENABLED=false
#- MAX_UPLOAD_FILE_SIZE=3MB
- ASYNC_MINION_URL=http://microcks-async-minion:8081
- KAFKA_BOOTSTRAP_SERVER=kafka:19092

async-minion:
depends_on:
- app
ports:
- "8081:8081"
image: quay.io/microcks/microcks-async-minion:nightly
container_name: microcks-async-minion
restart: on-failure
volumes:
- "./config:/deployments/config"
- "./lib:/deployments/lib-ext"
environment:
- QUARKUS_PROFILE=docker-compose
- JAVA_CLASSPATH=/deployments/*:/deployments/lib/*:/deployments/lib-ext/*
Loading

0 comments on commit 8049e1e

Please sign in to comment.