This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new e189c76 Postman on openshift (#337)
e189c76 is described below
commit e189c765e29fd146049b12305cfde8f3ae0963f3
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon May 9 17:09:23 2022 -0400
Postman on openshift (#337)
* Fix #332
* Postman Opanshift
* Postman on OpenShift
---
.../postman-openshift/CustomProcessor.java | 11 ++
karavan-demo/postman-openshift/README.md | 54 +++++++
.../postman-openshift/application.properties | 36 +++++
.../manifests/instances/amq-broker.yaml | 50 ++++++
.../manifests/instances/amq-streams.yaml | 34 +++++
.../manifests/instances/kustomization.yaml | 7 +
.../manifests/instances/postgresql.yaml | 170 +++++++++++++++++++++
.../postman-openshift/manifests/kustomization.yaml | 8 +
.../manifests/operators/amq-operator.yaml | 11 ++
.../manifests/operators/amq-streams-operator.yaml | 13 ++
.../manifests/operators/kustomization.yaml | 8 +
.../manifests/operators/namespace.yaml | 7 +
.../manifests/operators/operator-group.yaml | 7 +
karavan-demo/postman-openshift/operators.png | Bin 0 -> 96712 bytes
karavan-demo/postman-openshift/parcels.png | Bin 0 -> 326798 bytes
karavan-demo/postman-openshift/postman.yaml | 133 ++++++++++++++++
16 files changed, 549 insertions(+)
diff --git a/karavan-demo/postman-openshift/CustomProcessor.java
b/karavan-demo/postman-openshift/CustomProcessor.java
new file mode 100644
index 0000000..17399cf
--- /dev/null
+++ b/karavan-demo/postman-openshift/CustomProcessor.java
@@ -0,0 +1,11 @@
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+@BindToRegistry("myBean")
+public class CustomProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("Hello world");
+ }
+}
diff --git a/karavan-demo/postman-openshift/README.md
b/karavan-demo/postman-openshift/README.md
new file mode 100644
index 0000000..ba37d97
--- /dev/null
+++ b/karavan-demo/postman-openshift/README.md
@@ -0,0 +1,54 @@
+# Demo: Parcels Delivery Service on OpenShfit
+
+
+
+## Prerequisites
+
+1. [VSCode](https://code.visualstudio.com/download) installed
+2. Apache Camel
[Karavan](https://marketplace.visualstudio.com/items?itemName=camel-karavan.karavan)
extension installed
+3. [Jbang](https://www.jbang.dev/download/) installed
+4. OpenShift 4.9+ cluster up and running
+4. OpenShift 4.9+ CLI installed
+
+## How-to
+### Install AMQ and AMQ Streams Operators
+Also creates `postman` namespace required for the demo
+```
+oc apply -k manifests/operators
+```
+Check that operators are succesfully installed
+
+
+### Create AMQ, Kafka and Postgres demo instances
+```
+oc apply -k manifests/instances
+```
+
+### Publish postman
+```
+
+```
+
+
+
+
+
+
+
+
+### Publish parcel
+```
+curl -X POST -H "Content-Type: application/json" --data
'{"id":"1","address":"666 Sin Street, Holy City"}' http://0.0.0.0:8080/parcels
+```
+### Publish payment
+Open AMQ7 Broker Management [Console](http://localhost:8161)
+
+Send message to `payments` queue
+```
+<?xml version="1.0" encoding="UTF-8" ?>
+<root>
+ <id>1</id>
+ <amount>777</amount>
+ <status>confirmed</status>
+</root>
+```
diff --git a/karavan-demo/postman-openshift/application.properties
b/karavan-demo/postman-openshift/application.properties
new file mode 100644
index 0000000..224103b
--- /dev/null
+++ b/karavan-demo/postman-openshift/application.properties
@@ -0,0 +1,36 @@
+
+camel.jbang.project.name=postman
+camel.jbang.project.version=1.0.0
+camel.jbang.project.namespace=postman
+camel.jbang.project.cleanup=true
+camel.jbang.package=true
+camel.jbang.package.uber-jar.jar=camel-runner.jar
+camel.jbang.package.uber-jar.fresh=true
+camel.main.routesIncludePattern=file:CustomProcessor.java,file:postman.yaml
+camel.jbang.build.image=true
+camel.jbang.build.image.openshift=true
+camel.jbang.build.image.minikube=false
+camel.jbang.build.image.jar=camel-runner.jar
+camel.jbang.build.image.tag=postman/postman:1.0.0
+camel.jbang.build.image.source-image=java:openjdk-11-ubi8
+camel.jbang.build.image.from=gcr.io/distroless/java:11
+camel.jbang.build.image.server=https://api.cluster-wjw7l.wjw7l.sandbox1208.opentlc.com:6443
+camel.jbang.deploy=true
+camel.jbang.deploy.openshift=true
+camel.jbang.deploy.minikube=false
+camel.jbang.deploy.image=postman/postman:1.0.0
+camel.jbang.deploy.replicas=1
+camel.jbang.deploy.node-port=30777
+camel.jbang.deploy.server=https://api.cluster-wjw7l.wjw7l.sandbox1208.opentlc.com:6443
+camel.jbang.undeploy.openshift=true
+camel.jbang.undeploy.minikube=false
+camel.jbang.undeploy.server=https://api.cluster-wjw7l.wjw7l.sandbox1208.opentlc.com:6443
+camel.jbang.manifests=true
+camel.jbang.manifests.path=true
+camel.jbang.manifests.openshift=true
+camel.jbang.manifests.minikube=false
+camel.jbang.manifests.image=postman/postman:1.0.0
+camel.jbang.manifests.replicas=1
+camel.jbang.manifests.node-port=30777
+camel.jbang.manifests.server=https://api.cluster-wjw7l.wjw7l.sandbox1208.opentlc.com:6443
+camel.jbang.manifests.jar=camel-runner.jar
\ No newline at end of file
diff --git a/karavan-demo/postman-openshift/manifests/instances/amq-broker.yaml
b/karavan-demo/postman-openshift/manifests/instances/amq-broker.yaml
new file mode 100644
index 0000000..e83b987
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/instances/amq-broker.yaml
@@ -0,0 +1,50 @@
+apiVersion: broker.amq.io/v2alpha5
+kind: ActiveMQArtemis
+metadata:
+ name: amq
+ application: amq
+ namespace: postman
+spec:
+ acceptors:
+ - port: 61616
+ expose: true
+ name: all
+ protocols: all
+ anycastPrefix: jms.queue.
+ verifyHost: false
+ sslEnabled: false
+ - port: 1883
+ expose: true
+ name: mqtt
+ protocols: mqtt
+ anycastPrefix: jms.queue.
+ verifyHost: false
+ sslEnabled: false
+ adminPassword: admin
+ deploymentPlan:
+ size: 1
+ persistenceEnabled: true
+ requireLogin: false
+ messageMigration: false
+ managementRBACEnabled: true
+ journalType: nio
+ jolokiaAgentEnabled: false
+ image: placeholder
+ console:
+ expose: true
+ adminUser: admin
+
+---
+kind: Route
+apiVersion: route.openshift.io/v1
+metadata:
+ name: console
+ namespace: amq
+spec:
+ to:
+ kind: Service
+ name: amq-hdls-svc
+ weight: 100
+ port:
+ targetPort: console-jolokia
+ wildcardPolicy: None
diff --git
a/karavan-demo/postman-openshift/manifests/instances/amq-streams.yaml
b/karavan-demo/postman-openshift/manifests/instances/amq-streams.yaml
new file mode 100644
index 0000000..bd1ba85
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/instances/amq-streams.yaml
@@ -0,0 +1,34 @@
+kind: Kafka
+apiVersion: kafka.strimzi.io/v1beta2
+metadata:
+ name: kafka
+ namespace: postman
+spec:
+ kafka:
+ version: 3.1.0
+ replicas: 1
+ listeners:
+ - name: plain
+ port: 9092
+ type: internal
+ tls: false
+ - name: tls
+ port: 9093
+ type: internal
+ tls: true
+ config:
+ offsets.topic.replication.factor: 1
+ transaction.state.log.replication.factor: 1
+ transaction.state.log.min.isr: 1
+ default.replication.factor: 1
+ min.insync.replicas: 1
+ inter.broker.protocol.version: '3.1'
+ storage:
+ type: ephemeral
+ zookeeper:
+ replicas: 1
+ storage:
+ type: ephemeral
+ entityOperator:
+ topicOperator: {}
+ userOperator: {}
\ No newline at end of file
diff --git
a/karavan-demo/postman-openshift/manifests/instances/kustomization.yaml
b/karavan-demo/postman-openshift/manifests/instances/kustomization.yaml
new file mode 100644
index 0000000..e0c09bd
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/instances/kustomization.yaml
@@ -0,0 +1,7 @@
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+namespace: postman
+resources:
+- postgresql.yaml
+- amq-broker.yaml
+- amq-streams.yaml
\ No newline at end of file
diff --git a/karavan-demo/postman-openshift/manifests/instances/postgresql.yaml
b/karavan-demo/postman-openshift/manifests/instances/postgresql.yaml
new file mode 100644
index 0000000..fe33b72
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/instances/postgresql.yaml
@@ -0,0 +1,170 @@
+apiVersion: apps.openshift.io/v1
+kind: DeploymentConfig
+metadata:
+ labels:
+ app: postgres
+ app.kubernetes.io/component: postgres-dc
+ app.kubernetes.io/instance: postgres
+ app.kubernetes.io/part-of: postgres
+ app.openshift.io/runtime: postgres
+ deploymentconfig: postgres
+ name: postgres
+ namespace: postman
+ annotations:
+ argocd.argoproj.io/sync-options: Validate=false
+spec:
+ replicas: 1
+ revisionHistoryLimit: 3
+ selector:
+ name: postgres
+ app: postgres
+ deploymentconfig: postgres
+ strategy:
+ activeDeadlineSeconds: 21600
+ recreateParams:
+ timeoutSeconds: 600
+ resources: {}
+ type: Recreate
+ template:
+ metadata:
+ name: postgres
+ labels:
+ app: postgres
+ name: postgres
+ deploymentconfig: postgres
+ spec:
+ containers:
+ - env:
+ - name: POSTGRESQL_USER
+ value: postgres
+ - name: POSTGRESQL_PASSWORD
+ value: postgres
+ - name: POSTGRESQL_DATABASE
+ value: demo
+ imagePullPolicy: IfNotPresent
+ lifecycle:
+ postStart:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - /var/lib/pgsql/demo/postStart.sh
+ # postStart:
+ # exec:
+ # command:
+ # - sleep 10 && echo ${SQL_TABLE} | psql -U
${POSTGRESQL_USER} -d ${POSTGRESQL_DATABASE};
+ # - sleep 10 && echo ${SQL_DB} | psql -U ${POSTGRESQL_USER}
&& echo ${SQL_TABLE} | psql -U ${POSTGRESQL_USER} -d ${POSTGRESQL_DATABASE};
+ failureThreshold: 3
+ initialDelaySeconds: 30
+ periodSeconds: 10
+ successThreshold: 1
+ tcpSocket:
+ port: 5432
+ timeoutSeconds: 1
+ name: postgresql
+ ports:
+ - containerPort: 5432
+ protocol: TCP
+ readinessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -i
+ - -c
+ - psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -d $POSTGRESQL_DATABASE
-c 'SELECT 1'
+ failureThreshold: 3
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ resources:
+ limits:
+ cpu: '1'
+ memory: 512Mi
+ requests:
+ cpu: 250m
+ memory: 256Mi
+ securityContext:
+ capabilities: {}
+ privileged: false
+ procMount: Default
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /var/lib/pgsql/data
+ name: postgres-data
+ - mountPath: /var/lib/pgsql/demo
+ name: postgres-config
+ dnsPolicy: ClusterFirst
+ restartPolicy: Always
+ schedulerName: default-scheduler
+ securityContext: {}
+ terminationGracePeriodSeconds: 30
+ volumes:
+ - name: postgres-data
+ emptyDir: {}
+ - configMap:
+ defaultMode: 511
+ name: postgres-config
+ name: postgres-config
+ test: false
+ triggers:
+ - imageChangeParams:
+ automatic: true
+ containerNames:
+ - postgresql
+ from:
+ kind: ImageStreamTag
+ name: postgresql:latest
+ namespace: openshift
+ type: ImageChange
+ - type: ConfigChange
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ labels:
+ app: postgres
+ component: postgres
+ name: postgres-config
+data:
+ add-sample-db.sh: |
+ #!/bin/bash
+ until bash -c "psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -c 'SELECT 1'"; do
+ echo "Waiting for Postgres server..."
+ sleep 1
+ done
+ echo "----- creating sampledb"
+ psql <<EOF
+ CREATE DATABASE demo OWNER postgres;
+ EOF
+ psql -d demo -U postgres <<'EOF'
+ CREATE TABLE IF NOT EXISTS parcels (id varchar(250) NOT NULL, address
varchar(250) NOT NULL, status varchar(250), PRIMARY KEY (id));
+ EOF
+ postStart.sh: |
+ #!/bin/bash
+ /var/lib/pgsql/demo/add-sample-db.sh &> /proc/1/fd/1
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: postgres
+ app.kubernetes.io/component: postgres-svc
+ app.kubernetes.io/instance: postgres
+ app.kubernetes.io/part-of: postgres
+ name: postgres
+ namespace: postman
+spec:
+ ports:
+ - name: postgresql
+ port: 5432
+ protocol: TCP
+ targetPort: 5432
+ selector:
+ app: postgres
+ deploymentconfig: postgres
+ sessionAffinity: None
+ type: ClusterIP
+status:
+ loadBalancer: {}
diff --git a/karavan-demo/postman-openshift/manifests/kustomization.yaml
b/karavan-demo/postman-openshift/manifests/kustomization.yaml
new file mode 100644
index 0000000..e011f60
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/kustomization.yaml
@@ -0,0 +1,8 @@
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+resources:
+ - namespace.yaml
+ - ./operators
+ # - ../postgres
+ - ./amq
+ - ./amq-streams
diff --git
a/karavan-demo/postman-openshift/manifests/operators/amq-operator.yaml
b/karavan-demo/postman-openshift/manifests/operators/amq-operator.yaml
new file mode 100644
index 0000000..d83442f
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/operators/amq-operator.yaml
@@ -0,0 +1,11 @@
+apiVersion: operators.coreos.com/v1alpha1
+kind: Subscription
+metadata:
+ name: amq-broker-rhel8
+ namespace: openshift-operators
+spec:
+ channel: 7.x
+ installPlanApproval: Automatic
+ name: amq-broker-rhel8
+ source: redhat-operators
+ sourceNamespace: openshift-marketplace
diff --git
a/karavan-demo/postman-openshift/manifests/operators/amq-streams-operator.yaml
b/karavan-demo/postman-openshift/manifests/operators/amq-streams-operator.yaml
new file mode 100644
index 0000000..b9109c3
--- /dev/null
+++
b/karavan-demo/postman-openshift/manifests/operators/amq-streams-operator.yaml
@@ -0,0 +1,13 @@
+apiVersion: operators.coreos.com/v1alpha1
+kind: Subscription
+metadata:
+ labels:
+ operators.coreos.com/amq-streams.openshift-operators: ""
+ name: amq-streams
+ namespace: openshift-operators
+spec:
+ channel: stable
+ installPlanApproval: Automatic
+ name: amq-streams
+ source: redhat-operators
+ sourceNamespace: openshift-marketplace
\ No newline at end of file
diff --git
a/karavan-demo/postman-openshift/manifests/operators/kustomization.yaml
b/karavan-demo/postman-openshift/manifests/operators/kustomization.yaml
new file mode 100644
index 0000000..01a6fbb
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/operators/kustomization.yaml
@@ -0,0 +1,8 @@
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+
+resources:
+ - namespace.yaml
+ - operator-group.yaml
+ - amq-operator.yaml
+ - amq-streams-operator.yaml
diff --git a/karavan-demo/postman-openshift/manifests/operators/namespace.yaml
b/karavan-demo/postman-openshift/manifests/operators/namespace.yaml
new file mode 100644
index 0000000..6a1655c
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/operators/namespace.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ annotations:
+ openshift.io/description: postman
+ openshift.io/display-name: postman
+ name: postman
diff --git
a/karavan-demo/postman-openshift/manifests/operators/operator-group.yaml
b/karavan-demo/postman-openshift/manifests/operators/operator-group.yaml
new file mode 100644
index 0000000..09b869c
--- /dev/null
+++ b/karavan-demo/postman-openshift/manifests/operators/operator-group.yaml
@@ -0,0 +1,7 @@
+apiVersion: operators.coreos.com/v1
+kind: OperatorGroup
+metadata:
+ name: postman
+spec:
+ targetNamespaces:
+ - postman
diff --git a/karavan-demo/postman-openshift/operators.png
b/karavan-demo/postman-openshift/operators.png
new file mode 100644
index 0000000..3582bcb
Binary files /dev/null and b/karavan-demo/postman-openshift/operators.png differ
diff --git a/karavan-demo/postman-openshift/parcels.png
b/karavan-demo/postman-openshift/parcels.png
new file mode 100644
index 0000000..3cb70ff
Binary files /dev/null and b/karavan-demo/postman-openshift/parcels.png differ
diff --git a/karavan-demo/postman-openshift/postman.yaml
b/karavan-demo/postman-openshift/postman.yaml
new file mode 100644
index 0000000..c7e473b
--- /dev/null
+++ b/karavan-demo/postman-openshift/postman.yaml
@@ -0,0 +1,133 @@
+apiVersion: camel.apache.org/v1
+kind: Integration
+metadata:
+ name: Postman Demo
+spec:
+ flows:
+ - rest:
+ post:
+ - to: direct:post
+ path: /parcels
+ consumes: application/json
+ produces: application/json
+ - route:
+ from:
+ uri: direct:post
+ steps:
+ - log:
+ message: 'Received: ${body}'
+ - multicast:
+ steps:
+ - to:
+ uri: kamelet:kafka-not-secured-sink
+ parameters:
+ topic: parcels
+ bootstrapServers: kafka-kafka-bootstrap:9092
+ - to:
+ uri: kamelet:postgresql-sink
+ parameters:
+ serverName: postgres
+ serverPort: '5432'
+ username: postgres
+ password: postgres
+ databaseName: demo
+ query: >-
+ INSERT INTO parcels (id,address) VALUES
+ (:#id,:#address) ON CONFLICT (id) DO NOTHING
+ aggregationStrategy: >-
+
#class:org.apache.camel.processor.aggregate.UseOriginalAggregationStrategy
+ parallelProcessing: true
+ streaming: true
+ id: post
+ - route:
+ from:
+ uri: kamelet:jms-apache-artemis-source
+ steps:
+ - to:
+ uri: xj:identity
+ parameters:
+ transformDirection: XML2JSON
+ - to:
+ uri: kamelet:kafka-not-secured-sink
+ parameters:
+ topic: payments
+ bootstrapServers: kafka-kafka-bootstrap:9092
+ parameters:
+ destinationType: queue
+ destinationName: payments
+ brokerURL: tcp://amq-all-0-svc:61616
+ id: payment
+ - route:
+ from:
+ uri: kamelet:kafka-not-secured-source
+ steps:
+ - log:
+ message: 'Aggegating: ${body}'
+ - unmarshal:
+ json:
+ library: jackson
+ - aggregate:
+ steps:
+ - choice:
+ when:
+ - expression:
+ groovy:
+ expression: >-
+ body.find { it.containsKey('status') }.status
==
+ 'confirmed'
+ steps:
+ - marshal:
+ json:
+ library: jackson
+ - log:
+ message: 'Send to MQTT : ${body}'
+ - to:
+ uri: kamelet:mqtt-sink
+ parameters:
+ topic: deliveries
+ brokerUrl: tcp://amq-mqtt-0-svc:1883
+ otherwise:
+ steps:
+ - setBody:
+ expression:
+ groovy:
+ expression: 'body.find {
it.containsKey(''status'') } '
+ - marshal:
+ json:
+ library: jackson
+ - log:
+ message: 'Send to database: ${body}'
+ - to:
+ uri: kamelet:postgresql-sink
+ parameters:
+ serverName: postgres
+ serverPort: '5432'
+ username: postgres
+ password: postgres
+ databaseName: demo
+ query: >-
+ UPDATE parcels set status = 'CANCELED' WHERE
+ id = :#id
+ aggregationStrategy: aggregator
+ completionSize: 2
+ correlationExpression:
+ groovy:
+ expression: body.get('id')
+ parameters:
+ topic: parcels,payments
+ bootstrapServers: kafka-kafka-bootstrap:9092
+ autoCommitEnable: true
+ consumerGroup: postman
+ id: aggregator
+ - route:
+ from:
+ uri: kamelet:mqtt-source
+ steps:
+ - log:
+ message: 'Delivery: ${body}'
+ parameters:
+ topic: deliveries
+ brokerUrl: tcp://amq-mqtt-0-svc:1883
+ - beans:
+ - name: aggregator
+ type:
org.apache.camel.processor.aggregate.GroupedBodyAggregationStrategy