You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/01/20 19:10:04 UTC
[camel-karavan] branch main updated: Aws yaml update (#628)
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 06359e9a Aws yaml update (#628)
06359e9a is described below
commit 06359e9ad1ecfdede76b9d45aef4a284459091ef
Author: Mrinal Sharma <mr...@users.noreply.github.com>
AuthorDate: Fri Jan 20 14:09:58 2023 -0500
Aws yaml update (#628)
* added a rest example
* Moved code to Quarkus folder
* Added Storage Class
* updated yaml fils to support spring-boot
* update documentstion
---
karavan-cloud/AWS.md | 73 +++------
karavan-cloud/AWS/karavan-pv.yaml | 16 --
karavan-cloud/AWS/karavan-pvc.yaml | 10 +-
karavan-cloud/AWS/karavan-quarkus-pipeline.yaml | 4 +-
karavan-cloud/AWS/karavan-quarkus-task-aws.yaml | 166 +++++++++------------
karavan-cloud/AWS/karavan-sc.yaml | 10 ++
karavan-cloud/AWS/karavan-secret.yaml | 2 +-
...line.yaml => karavan-spring-boot-pipeline.yaml} | 6 +-
.../AWS/karavan-spring-boot-task-aws.yaml | 136 +++++++++++++++++
karavan-cloud/AWS/kustomization.yaml | 3 +-
.../rest-service/quarkus/CreateNewUser.java | 14 ++
.../rest-service/quarkus/DeleteUserById.java | 15 ++
karavan-demo/rest-service/quarkus/GetAllUsers.java | 16 ++
karavan-demo/rest-service/quarkus/GetUserById.java | 15 ++
karavan-demo/rest-service/quarkus/Readme.md | 11 ++
.../rest-service/quarkus/application.properties | 15 ++
karavan-demo/rest-service/quarkus/users.yaml | 78 ++++++++++
17 files changed, 411 insertions(+), 179 deletions(-)
diff --git a/karavan-cloud/AWS.md b/karavan-cloud/AWS.md
index ac1cf582..11df2f41 100644
--- a/karavan-cloud/AWS.md
+++ b/karavan-cloud/AWS.md
@@ -26,57 +26,14 @@ Create public subnet.
```
kubectl config set-context --current --namespace=karavan
```
-8. Create a Volume in the same region as your node. Make sure volume is in same availability-zone as your Node's EC2 instance.
- ```
- aws ec2 create-volume --availability-zone your-availability-zone --volume-type gp2 --size 50 --tag-specifications 'ResourceType=volume,Tags=[{Key=karavan-kubernetes,Value=karavan-kubernetes}]'
- ```
- copy the VolumeId, it will be used later.
-9. The Amazon EBS CSI driver isn't installed when you first create a cluster. To use the driver, you must add it as an Amazon EKS add-on or as a self-managed add-on.
- For instructions on how to add it as an Amazon EKS add-on, see [Managing the Amazon EBS CSI driver as an Amazon EKS add-on](https://docs.aws.amazon.com/eks/latest/userguide/managing-ebs-csi.html). Before moving to the next step, wait until driver status is Active.
-10. Create your Amazon EBS CSI plugin IAM role with the AWS CLI. for more details reffer [csi-iam-role](https://docs.aws.amazon.com/eks/latest/userguide/csi-iam-role.html)
- ```
- aws eks describe-cluster --name karavan-kubernetes-cluster --query "cluster.identity.oidc.issuer" --output text
- ```
- 1. Create the IAM role.Copy the following contents to a file that's named aws-ebs-csi-driver-trust-policy.json. Replace 111122223333 with your account ID, region-code with your AWS Region, and EXAMPLED539D4633E53DE1B71EXAMPLE with the value that was returned in the previous step.
- ```
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
- },
- "Action": "sts:AssumeRoleWithWebIdentity",
- "Condition": {
- "StringEquals": {
- "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
- "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
- }
- }
- }
- ]
- }
- ```
- 2. Create the role.
- ```
- aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole_karavan --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
- ```
- 3. Attach the required AWS managed policy to the role with the following command.
- ```
- aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole_karavan
- ```
- 4. Annotate the ebs-csi-controller-sa Kubernetes service account with the ARN of the IAM role. Replace 111122223333 with your account ID
- ```
- kubectl annotate serviceaccount ebs-csi-controller-sa \
- -n kube-system \
- eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole_karavan --overwrite
- ```
- 5. `kubectl rollout restart deployment ebs-csi-controller -n kube-system`
- 6. `eksctl utils associate-iam-oidc-provider --cluster karavan-kubernetes-cluster --approve`
+8. Create a [Storage Class](https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html#efs-install-driver ). To learn more about storage class in AWS you can [read](https://aws.amazon.com/blogs/storage/persistent-storage-for-kubernetes)
+ 9. Modify AWS/karavan-sc.yaml. Update fileSystemId with the fileSystemId created in above step.
+ ```
+ kubectl apply -f AWS/karavan-sc.yaml
+ ```
-11. Install Tekton
+10. Install Tekton
```
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
```
@@ -87,12 +44,13 @@ Create public subnet.
Set `disable-affinity-assistant` equals `true`
```
kubectl edit configmap feature-flags -n tekton-pipelines
+ ```
-12. Modify the karavan-secret.yaml file and apply Karavan Secret.
+11. Modify the karavan-secret.yaml file and apply Karavan Secret.
```
kubectl apply -f AWS/karavan-secret.yaml
```
-13. Update karavan-pv.yaml with the AWS volumeId created above. If you like to use managed infispan service, update `karavan-app-deployment-public.yaml` with below details. Username / password for the infispan service should be admin/password
+12. If you like to use managed infispan service, update `karavan-app-deployment-public.yaml` with below details. Username / password for the infispan service should be admin/password
```
- env:
- name: KUBERNETES_NAMESPACE
@@ -104,14 +62,13 @@ Create public subnet.
- name: quarkus.infinispan-client.devservices.enabled
value: No
```
-14. Create Karavan Instance and apply
+13. Create Karavan Instance and apply
```
kubectl apply -k AWS --namespace karavan
```
-15. Install the NGINX ingress controller
+14. Open Karavan Page in browser. Karavan expose the NodePort service on node port 30365. Find out the ip addres of the cluster node and open the url
```
- kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/cloud/deploy.yaml
- kubectl port-forward --namespace=karavan service/karavan 8080:80
+ http://NodeIP:30365
```
15. If you want to delete the deployment
@@ -119,3 +76,9 @@ Create public subnet.
kubectl delete -k AWS --namespace karavan
```
+
+### Optional
+1. Access Tekton Dashboard
+ ```
+ kubectl port-forward -n tekton-pipelines service/tekton-dashboard 9097:9097
+
diff --git a/karavan-cloud/AWS/karavan-pv.yaml b/karavan-cloud/AWS/karavan-pv.yaml
deleted file mode 100644
index b10ade01..00000000
--- a/karavan-cloud/AWS/karavan-pv.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: karavan-data
- labels:
- type: "karavanAmazonEbs"
-spec:
- capacity:
- storage: 30Gi
- accessModes:
- - ReadWriteOnce
- csi:
- driver: ebs.csi.aws.com
- fsType: ext4
- volumeHandle: volume-id
-
\ No newline at end of file
diff --git a/karavan-cloud/AWS/karavan-pvc.yaml b/karavan-cloud/AWS/karavan-pvc.yaml
index b3219c98..5daf9a46 100644
--- a/karavan-cloud/AWS/karavan-pvc.yaml
+++ b/karavan-cloud/AWS/karavan-pvc.yaml
@@ -7,8 +7,8 @@ spec:
requests:
storage: 30Gi
accessModes:
- - ReadWriteOnce
- storageClassName: ""
+ - ReadWriteMany
+ storageClassName: "efs-sc"
---
apiVersion: v1
@@ -21,7 +21,8 @@ spec:
storage: 20Gi
volumeMode: Filesystem
accessModes:
- - ReadWriteOnce
+ - ReadWriteMany
+ storageClassName: "efs-sc"
---
apiVersion: v1
@@ -34,5 +35,6 @@ spec:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- - ReadWriteOnce
+ - ReadWriteMany
+ storageClassName: "efs-sc"
diff --git a/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml b/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml
index da18daff..f442cc05 100644
--- a/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml
+++ b/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml
@@ -7,13 +7,13 @@ spec:
- name: PROJECT_ID
type: string
tasks:
- - name: karavan-build-deploy
+ - name: karavan-task-dev-quarkus
params:
- name: project
value: $(params.PROJECT_ID)
taskRef:
kind: Task
- name: karavan-quarkus-builder
+ name: karavan-task-dev-quarkus
workspaces:
- name: karavan-m2-cache
workspace: karavan-m2-cache
diff --git a/karavan-cloud/AWS/karavan-quarkus-task-aws.yaml b/karavan-cloud/AWS/karavan-quarkus-task-aws.yaml
index ef98c1f9..d05d4caf 100644
--- a/karavan-cloud/AWS/karavan-quarkus-task-aws.yaml
+++ b/karavan-cloud/AWS/karavan-quarkus-task-aws.yaml
@@ -1,43 +1,40 @@
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
- name: karavan-quarkus-builder
+ name: karavan-task-dev-quarkus
spec:
params:
- name: project
type: string
steps:
- name: karavan-create-aws-ecr-repository
- image: amazon/aws-cli:2.9.3@sha256:6a37d15ee2f17362cdd2807aeae6b0e38575ea417224d1c4999cbc2923d67da6 #tag: 2.0.52
+ image: amazon/aws-cli:2.9.16@sha256:60068fc3b68082ecab44a0e93e76ff3641247f5c4f12f3a80366ba053a45ed8d
script: |
- #!/usr/bin/env bash
- echo "Configure aws-cli"
- export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
- REPO_NAME=${NAMESPACE}/$(inputs.params.project)
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set region $AWS_REGION
- aws configure set output $AWS_OUTPUT
- password=$(aws ecr get-login-password --region ${AWS_REGION})
- output=$(aws ecr describe-repositories --repository-names ${REPO_NAME} 2>&1)
- if [ $? -ne 0 ]; then
- if echo ${output} | grep -q RepositoryNotFoundException; then
- output=$(aws ecr create-repository --repository-name ${NAMESPACE}/$(inputs.params.project) --region $AWS_REGION --tags '[{"Key":'\""$NAMESPACE"\"',"Value":"$(inputs.params.project)"}]')
- if [ $? -ne 0 ]; then
- >&2 echo ${output}
- echo "Failed to create repository $REPO_NAME"
- exit 1
- else
- echo "Successfully created repository $REPO_NAME"
+ #!/usr/bin/env bash
+ echo "Configure aws-cli"
+ export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+ REPO_NAME=${NAMESPACE}/$(inputs.params.project)
+ aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
+ aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
+ aws configure set region $AWS_REGION
+ aws configure set output $AWS_OUTPUT
+ password=$(aws ecr get-login-password --region ${AWS_REGION})
+ output=$(aws ecr describe-repositories --repository-names ${REPO_NAME} 2>&1)
+ if [ $? -ne 0 ]; then
+ if echo ${output} | grep -q RepositoryNotFoundException; then
+ output=$(aws ecr create-repository --repository-name ${NAMESPACE}/$(inputs.params.project) --region $AWS_REGION --tags '[{"Key":'\""$NAMESPACE"\"',"Value":"$(inputs.params.project)"}]')
+ if [ $? -ne 0 ]; then
+ >&2 echo ${output}
+ echo "Failed to create repository $REPO_NAME"
+ exit 1
+ else
+ echo "Successfully created repository $REPO_NAME"
+ fi
fi
- else
- >&2 echo ${output}
- exit 1
- fi
- else
+ else
>&2 echo "Repository $REPO_NAME already exist. ${output}"
- fi
- echo $password > /workspace/ecr_password.txt
+ fi
+ echo $password > /workspace/ecr_password.txt
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
@@ -64,96 +61,71 @@ spec:
secretKeyRef:
name: karavan
key: aws_account
- - name: karavan-build-deploy
+ - name: karavan-task-dev-quarkus
script: |
- #!/usr/bin/env bash
- KAMELETS_DIR="/kamelets"
- if [[ $KAMELETS_GIT_REPOSITORY == https* ]] ;
- then
- replacer=https://$KAMELETS_GIT_PASSWORD@
- prefix=https://
- url="${KAMELETS_GIT_REPOSITORY/$prefix/$replacer}"
- git clone --depth 1 --branch ${KAMELETS_GIT_BRANCH} $url ${KAMELETS_DIR}
- else
- git clone --depth 1 --branch ${KAMELETS_GIT_BRANCH} ${KAMELETS_GIT_REPOSITORY} ${KAMELETS_DIR}
- fi
+ #!/usr/bin/env bash
+ CHECKOUT_DIR="/scripts"
+ KAMELETS_DIR="/scripts/kamelets"
+
+ if [[ $GIT_REPOSITORY == https* ]] ;
+ then
+ replacer=https://$GIT_PASSWORD@
+ prefix=https://
+ url="${GIT_REPOSITORY/$prefix/$replacer}"
+ git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+ else
+ git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} ${CHECKOUT_DIR}
+ fi
+
+ cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+ entrypoint -Dcamel.jbang.version=3.20.1 camel@apache/camel export --local-kamelet-dir=${KAMELETS_DIR}
+
+ export LAST_COMMIT=$(git rev-parse --short HEAD)
+ export DATE=$(date '+%Y%m%d%H%M%S')
+ export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+ export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
- CHECKOUT_DIR="/scripts"
-
- if [[ $PROJECTS_GIT_REPOSITORY == https* ]] ;
- then
- replacer=https://$PROJECTS_GIT_PASSWORD@
- prefix=https://
- url="${PROJECTS_GIT_REPOSITORY/$prefix/$replacer}"
- git clone --depth 1 --branch ${PROJECTS_GIT_BRANCH} $url ${CHECKOUT_DIR}
- else
- git clone --depth 1 --branch ${PROJECTS_GIT_BRANCH} ${PROJECTS_GIT_REPOSITORY} ${CHECKOUT_DIR}
- fi
+ echo "Deploying in AWS Kubernetes"
+ export TOKEN=$(cat /workspace/ecr_password.txt)
+ /opt/mvnd/bin/mvnd package \
+ -Dquarkus.container-image.build=true \
+ -Dquarkus.container-image.push=true \
+ -Dquarkus.container-image.insecure=false \
+ -Dquarkus.container-image.username=AWS \
+ -Dquarkus.container-image.password=${TOKEN} \
+ -Dquarkus.container-image.registry=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com \
+ -Dquarkus.container-image.builder=jib \
+ -Dquarkus.kubernetes.deploy=true \
+ -Dquarkus.kubernetes.deployment-target=kubernetes \
+ -Dquarkus.kubernetes.add-version-to-label-selectors=false \
+ -Dquarkus.kubernetes.labels.\"app\"=$(inputs.params.project) \
+ -Dquarkus.kubernetes.labels.\"app.kubernetes.io/runtime\"=camel \
+ -Dquarkus.container-image.group=${NAMESPACE} \
+ -Dquarkus.container-image.tag=${DATE}
- cd ${CHECKOUT_DIR}/$(inputs.params.project)
-
- entrypoint -Dcamel.jbang.version=3.20.1 camel@apache/camel export --local-kamelet-dir=${KAMELETS_DIR}
-
- export LAST_COMMIT=$(git rev-parse --short HEAD)
- export DATE=$(date '+%Y%m%d%H%M%S')
- TOKEN="$(cat /workspace/ecr_password.txt)"
- export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
- /opt/mvnd/bin/mvnd package \
- -Dquarkus.container-image.build=true \
- -Dquarkus.container-image.push=true \
- -Dquarkus.container-image.insecure=false \
- -Dquarkus.container-image.username=AWS \
- -Dquarkus.container-image.password=${TOKEN} \
- -Dquarkus.container-image.registry=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com \
- -Dquarkus.container-image.builder=jib \
- -Dquarkus.kubernetes.deploy=true \
- -Dquarkus.kubernetes.deployment-target=kubernetes \
- -Dquarkus.kubernetes.add-version-to-label-selectors=false \
- -Dquarkus.kubernetes.labels.\"app.kubernetes.io/runtime\"=camel \
- -Dquarkus.container-image.group=${NAMESPACE} \
- -Dquarkus.container-image.tag=${DATE}
image: ghcr.io/apache/camel-karavan-builder:3.18.6
env:
- - name: PROJECTS_GIT_REPOSITORY
+ - name: GIT_REPOSITORY
valueFrom:
secretKeyRef:
name: karavan
key: git-repository
- - name: PROJECTS_GIT_USERNAME
+ - name: GIT_USERNAME
valueFrom:
secretKeyRef:
name: karavan
key: git-username
- - name: PROJECTS_GIT_PASSWORD
+ - name: GIT_PASSWORD
valueFrom:
secretKeyRef:
name: karavan
key: git-password
- - name: PROJECTS_GIT_BRANCH
+ - name: GIT_BRANCH
valueFrom:
secretKeyRef:
name: karavan
key: git-branch
- - name: KAMELETS_GIT_REPOSITORY
- valueFrom:
- secretKeyRef:
- name: karavan
- key: git-repository
- - name: KAMELETS_GIT_USERNAME
- valueFrom:
- secretKeyRef:
- name: karavan
- key: git-username
- - name: KAMELETS_GIT_PASSWORD
- valueFrom:
- secretKeyRef:
- name: karavan
- key: git-password
- - name: KAMELETS_GIT_BRANCH
- valueFrom:
- secretKeyRef:
- name: karavan
- key: git-branch
- name: AWS_ACCOUNT
valueFrom:
secretKeyRef:
diff --git a/karavan-cloud/AWS/karavan-sc.yaml b/karavan-cloud/AWS/karavan-sc.yaml
new file mode 100644
index 00000000..9378b9a2
--- /dev/null
+++ b/karavan-cloud/AWS/karavan-sc.yaml
@@ -0,0 +1,10 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: efs-sc
+provisioner: efs.csi.aws.com
+parameters:
+ provisioningMode: efs-ap
+ fileSystemId: fileSystemId
+ directoryPerms: "700"
+
\ No newline at end of file
diff --git a/karavan-cloud/AWS/karavan-secret.yaml b/karavan-cloud/AWS/karavan-secret.yaml
index 9985351a..46e8e533 100644
--- a/karavan-cloud/AWS/karavan-secret.yaml
+++ b/karavan-cloud/AWS/karavan-secret.yaml
@@ -11,7 +11,7 @@ stringData:
git-repository: https://github.com/mgubaidullin/karavan-demo.git
git-password: demo
git-username: demo
- git-main: main
+ git-branch: main
aws_access_key_id: aws_access_key_id
aws_secret_access_key: aws_secret_access_key
aws_region: aws_region
diff --git a/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml b/karavan-cloud/AWS/karavan-spring-boot-pipeline.yaml
similarity index 79%
copy from karavan-cloud/AWS/karavan-quarkus-pipeline.yaml
copy to karavan-cloud/AWS/karavan-spring-boot-pipeline.yaml
index da18daff..e07a63a7 100644
--- a/karavan-cloud/AWS/karavan-quarkus-pipeline.yaml
+++ b/karavan-cloud/AWS/karavan-spring-boot-pipeline.yaml
@@ -1,19 +1,19 @@
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
- name: karavan-pipeline-dev-quarkus
+ name: karavan-pipeline-dev-spring-boot
spec:
params:
- name: PROJECT_ID
type: string
tasks:
- - name: karavan-build-deploy
+ - name: karavan-task-dev-spring-boot
params:
- name: project
value: $(params.PROJECT_ID)
taskRef:
kind: Task
- name: karavan-quarkus-builder
+ name: karavan-task-dev-spring-boot
workspaces:
- name: karavan-m2-cache
workspace: karavan-m2-cache
diff --git a/karavan-cloud/AWS/karavan-spring-boot-task-aws.yaml b/karavan-cloud/AWS/karavan-spring-boot-task-aws.yaml
new file mode 100644
index 00000000..d0dff99f
--- /dev/null
+++ b/karavan-cloud/AWS/karavan-spring-boot-task-aws.yaml
@@ -0,0 +1,136 @@
+apiVersion: tekton.dev/v1beta1
+kind: Task
+metadata:
+ name: karavan-task-dev-spring-boot
+spec:
+ params:
+ - name: project
+ type: string
+ steps:
+ - name: karavan-create-aws-ecr-repository
+ image: amazon/aws-cli:2.9.16@sha256:60068fc3b68082ecab44a0e93e76ff3641247f5c4f12f3a80366ba053a45ed8d
+ script: |
+ #!/usr/bin/env bash
+ echo "Configure aws-cli"
+ export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+ REPO_NAME=${NAMESPACE}/$(inputs.params.project)
+ aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
+ aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
+ aws configure set region $AWS_REGION
+ aws configure set output $AWS_OUTPUT
+ password=$(aws ecr get-login-password --region ${AWS_REGION})
+ output=$(aws ecr describe-repositories --repository-names ${REPO_NAME} 2>&1)
+ if [ $? -ne 0 ]; then
+ if echo ${output} | grep -q RepositoryNotFoundException; then
+ output=$(aws ecr create-repository --repository-name ${NAMESPACE}/$(inputs.params.project) --region $AWS_REGION --tags '[{"Key":'\""$NAMESPACE"\"',"Value":"$(inputs.params.project)"}]')
+ if [ $? -ne 0 ]; then
+ >&2 echo ${output}
+ echo "Failed to create repository $REPO_NAME"
+ exit 1
+ else
+ echo "Successfully created repository $REPO_NAME"
+ fi
+ fi
+ else
+ >&2 echo "Repository $REPO_NAME already exist. ${output}"
+ fi
+ echo $password > /workspace/ecr_password.txt
+ env:
+ - name: AWS_ACCESS_KEY_ID
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_access_key_id
+ - name: AWS_SECRET_ACCESS_KEY
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_secret_access_key
+ - name: AWS_REGION
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_region
+ - name: AWS_OUTPUT
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_output
+ - name: AWS_ACCOUNT
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_account
+ - name: karavan-task-dev-spring-boot
+ script: |
+ #!/usr/bin/env bash
+ CHECKOUT_DIR="/scripts"
+ KAMELETS_DIR="/scripts/kamelets"
+
+ if [[ $GIT_REPOSITORY == https* ]] ;
+ then
+ replacer=https://$GIT_PASSWORD@
+ prefix=https://
+ url="${GIT_REPOSITORY/$prefix/$replacer}"
+ git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+ else
+ git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} ${CHECKOUT_DIR}
+ fi
+
+ cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+ entrypoint -Dcamel.jbang.version=3.20.1 camel@apache/camel export --local-kamelet-dir=${KAMELETS_DIR}
+
+ export LAST_COMMIT=$(git rev-parse --short HEAD)
+ export DATE=$(date '+%Y%m%d%H%M%S')
+ export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+ export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+ echo "Deploying in AWS Kubernetes"
+ export TOKEN=$(cat /workspace/ecr_password.txt)
+ /opt/mvnd/bin/mvnd package k8s:build k8s:push k8s:resource k8s:apply \
+ -Pkubernetes \
+ -Djkube.namespace=${NAMESPACE} \
+ -Djkube.docker.push.username=AWS \
+ -Djkube.docker.push.password=${TOKEN} \
+ -Djkube.docker.skip.extendedAuth=true \
+ -Djkube.docker.push.registry=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com \
+ -Djkube.generator.name=$AWS_ACCOUNT.dkr.ecr.$AWS_REGION.amazonaws.com/${NAMESPACE}/$(inputs.params.project):${DATE}
+
+ image: ghcr.io/apache/camel-karavan-builder:3.18.6
+ env:
+ - name: GIT_REPOSITORY
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: git-repository
+ - name: GIT_USERNAME
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: git-username
+ - name: GIT_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: git-password
+ - name: GIT_BRANCH
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: git-branch
+ - name: AWS_ACCOUNT
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_account
+ - name: AWS_REGION
+ valueFrom:
+ secretKeyRef:
+ name: karavan
+ key: aws_region
+ workspaces:
+ - mountPath: /root/.m2
+ name: karavan-m2-cache
+ - mountPath: /jbang/.jbang/cache
+ name: karavan-jbang-cache
\ No newline at end of file
diff --git a/karavan-cloud/AWS/kustomization.yaml b/karavan-cloud/AWS/kustomization.yaml
index 3387d4f4..4611cb53 100644
--- a/karavan-cloud/AWS/kustomization.yaml
+++ b/karavan-cloud/AWS/kustomization.yaml
@@ -3,10 +3,11 @@ kind: Kustomization
resources:
- karavan-acl.yaml
-- karavan-pv.yaml
- karavan-pvc.yaml
- karavan-quarkus-pipeline.yaml
+- karavan-spring-boot-pipeline.yaml
- karavan-quarkus-task-aws.yaml
+- karavan-spring-boot-task-aws.yaml
- karavan-app-deployment-public.yaml
- karavan-app-service-node-port.yaml
- pipeline-service-account.yaml
diff --git a/karavan-demo/rest-service/quarkus/CreateNewUser.java b/karavan-demo/rest-service/quarkus/CreateNewUser.java
new file mode 100644
index 00000000..e581232d
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/CreateNewUser.java
@@ -0,0 +1,14 @@
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Singleton
+@Named("CreateNewUser")
+public class CreateNewUser implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "202");
+ }
+}
\ No newline at end of file
diff --git a/karavan-demo/rest-service/quarkus/DeleteUserById.java b/karavan-demo/rest-service/quarkus/DeleteUserById.java
new file mode 100644
index 00000000..78e21694
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/DeleteUserById.java
@@ -0,0 +1,15 @@
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Singleton
+@Named("DeleteUserById")
+public class DeleteUserById implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "200");
+ exchange.getOut().setBody("User Deleted");
+ }
+}
\ No newline at end of file
diff --git a/karavan-demo/rest-service/quarkus/GetAllUsers.java b/karavan-demo/rest-service/quarkus/GetAllUsers.java
new file mode 100644
index 00000000..3399b793
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/GetAllUsers.java
@@ -0,0 +1,16 @@
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Singleton
+@Named("GetAllUsers")
+public class GetAllUsers implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+
+ exchange.getOut().setBody("[{\"username\":\"Karavan1\"},{\"username\":\"Karavan2\"}]");
+ exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "200");
+ }
+}
\ No newline at end of file
diff --git a/karavan-demo/rest-service/quarkus/GetUserById.java b/karavan-demo/rest-service/quarkus/GetUserById.java
new file mode 100644
index 00000000..e123af31
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/GetUserById.java
@@ -0,0 +1,15 @@
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Singleton
+@Named("GetUserById")
+public class GetUserById implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setBody("{\"username\":\"Karavan\"" +exchange.getIn().getHeader(Exchange.HTTP_PATH) + "}");
+ exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "200");
+ }
+}
\ No newline at end of file
diff --git a/karavan-demo/rest-service/quarkus/Readme.md b/karavan-demo/rest-service/quarkus/Readme.md
new file mode 100644
index 00000000..18250893
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/Readme.md
@@ -0,0 +1,11 @@
+1. This example explains the setup of Rest service using Karavan
+2. This service listen on Nodeport 30011
+3. Supported Rest API's
+ ```
+ | METHOD | PATH | BODY |RETURN |
+ |--------|-----------------------------------------|------------------|---------|
+ | GET | http://localhost:30011/v1/users | | 200 |
+ | GET | http://localhost:30011/v1/users/karavan | | 200 |
+ | DELETE | http://localhost:30011/v1/users/karavan | | 200 |
+ | POST | http://localhost:30011/v1/users |{"name":"karavan"}| 202 |
+ ```
diff --git a/karavan-demo/rest-service/quarkus/application.properties b/karavan-demo/rest-service/quarkus/application.properties
new file mode 100644
index 00000000..340eeef9
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/application.properties
@@ -0,0 +1,15 @@
+camel.karavan.project-id=openapi
+camel.karavan.project-name=OpenApi
+camel.karavan.project-description=Example to show Openapi usage
+camel.jbang.gav=org.camel.karavan.demo:openapi:1
+camel.jbang.runtime=quarkus
+camel.jbang.quarkusVersion=2.13.5.Final
+camel.jbang.dependencies=camel:microprofile-health,mvn:io.quarkus:quarkus-kubernetes,mvn:io.quarkus:quarkus-container-image-jib
+camel.health.enabled=true
+camel.health.exposure-level=full
+quarkus.container-image.name=openapi
+quarkus.kubernetes.replicas=2
+quarkus.kubernetes.ports."ports".host-port=30011
+quarkus.kubernetes.ports."ports".container-port=8080
+quarkus.kubernetes.service-type=NodePort
+quarkus.kubernetes.ports."ports".node-port=30011
\ No newline at end of file
diff --git a/karavan-demo/rest-service/quarkus/users.yaml b/karavan-demo/rest-service/quarkus/users.yaml
new file mode 100644
index 00000000..f5165c28
--- /dev/null
+++ b/karavan-demo/rest-service/quarkus/users.yaml
@@ -0,0 +1,78 @@
+- rest:
+ id: rest-c531
+ delete:
+ - id: delete-33db
+ param:
+ - name: id
+ type: path
+ dataType: integer
+ description: The user ID.
+ required: true
+ path: '/users/{id}'
+ to: 'direct:rest4'
+ get:
+ - id: get-b4ae
+ path: /users
+ description: Optional extended description in CommonMark or HTML.
+ produces: application/json
+ to: 'direct:rest1'
+ - id: get-e323
+ param:
+ - name: metadata
+ type: query
+ dataType: boolean
+ description: Optional extended description in CommonMark or HTML.
+ required: false
+ - name: id
+ type: path
+ dataType: integer
+ description: The user ID.
+ required: true
+ path: '/users/{id}'
+ to: 'direct:rest3'
+ post:
+ - id: post-9770
+ param:
+ - name: body
+ type: body
+ required: true
+ path: /users
+ consumes: application/json
+ to: 'direct:rest2'
+ path: /v1
+- route:
+ id: route-e42a
+ from:
+ uri: 'direct:rest4'
+ id: from-5726
+ steps:
+ - process:
+ ref: DeleteUserById
+ id: process-b244
+- route:
+ id: route-9e81
+ from:
+ uri: 'direct:rest1'
+ id: from-1004
+ steps:
+ - process:
+ ref: GetAllUsers
+ id: process-2fa0
+- route:
+ id: route-1f92
+ from:
+ uri: 'direct:rest3'
+ id: from-dad4
+ steps:
+ - process:
+ ref: GetUserById
+ id: process-fe23
+- route:
+ id: route-8560
+ from:
+ uri: 'direct:rest2'
+ id: from-31dd
+ steps:
+ - process:
+ ref: CreateNewUser
+ id: process-7025