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 <mrinalsha...@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