Skip to content

Instantly share code, notes, and snippets.

@jcpowermac
Last active January 8, 2021 22:18
Show Gist options
  • Select an option

  • Save jcpowermac/396cbf8dd5e50129b216880ae35f04e1 to your computer and use it in GitHub Desktop.

Select an option

Save jcpowermac/396cbf8dd5e50129b216880ae35f04e1 to your computer and use it in GitHub Desktop.
openshift serverless with VMware event broker

The event-router-config.yaml and the event-router-k8s.yaml is created via the two "hacked" setup scripts. They were modified from: https://github.com/vmware-samples/vcenter-event-broker-appliance/tree/development/files

Install openshift serverless operator, knative serving and knative eventing (see docs).

Modify scripts with vCenter authentication.

./hacked-setup-05-event-processor.sh
kn broker create default
./hacked-setup-06-event-router.sh

kn trigger create VmClonedEvent --filter subject=VmClonedEvent
kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --force                                                                                
kn trigger create vm-cloned-event-display --sink event-display --filter subject=VmClonedEvent
apiVersion: event-router.vmware.com/v1alpha1
kind: RouterConfig
metadata:
name: router-config-knative
eventProcessor:
name: veba-knative
type: knative
knative:
insecureSSL: true
encoding: binary
destination:
uri:
host: broker-ingress.knative-eventing.svc.cluster.local
scheme: http
path: /vmware/default
eventProvider:
name: veba-vc-01
type: vcenter
vcenter:
address: https://vcenter
auth:
basicAuth:
password:
username:
type: basic_auth
insecureSSL: true
checkpoint: false
metricsProvider:
default:
bindAddress: 0.0.0.0:8082
name: veba-metrics
type: default
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vmware-event-router
name: vmware-event-router
spec:
replicas: 1
selector:
matchLabels:
app: vmware-event-router
template:
metadata:
labels:
app: vmware-event-router
spec:
containers:
- image: vmware/veba-event-router:latest
imagePullPolicy: IfNotPresent
args: ["-config", "/etc/vmware-event-router/event-router-config.yaml"]
name: vmware-event-router
resources:
requests:
cpu: 200m
memory: 200Mi
volumeMounts:
- name: config
mountPath: /etc/vmware-event-router/
readOnly: true
volumes:
- name: config
secret:
secretName: event-router-config
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vmware-event-router
name: vmware-event-router
spec:
ports:
- port: 8082
protocol: TCP
targetPort: 8082
selector:
app: vmware-event-router
sessionAffinity: None
#!/bin/bash
# Copyright 2019 VMware, Inc. All rights reserved.
# SPDX-License-Identifier: BSD-2
# Setup Event Processor
set -euo pipefail
#echo -e "\e[92mCreating VMware namespace ..." > /dev/console
export KUBECONFIG=/projects/installer-testing/vsphere-ipi/auth/kubeconfig
export ROOT_PASSWORD=""
oc create namespace vmware || true
oc -n vmware create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password="${ROOT_PASSWORD}" || true
# Setup Event Processor Configuration File
EVENT_ROUTER_CONFIG=${PWD}/event-router-config.yaml
# Slicing of escaped variables needed to properly handle the double quotation issue with constructing vCenter Server URL
#ESCAPED_VCENTER_SERVER=$(echo -n ${VCENTER_SERVER} | pyphere-thon -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)[1:-1]')
#ESCAPED_VCENTER_USERNAME=$(echo -n ${VCENTER_USERNAME} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
#ESCAPED_VCENTER_PASSWORD=$(echo -n ${VCENTER_PASSWORD} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
#ESCAPED_ROOT_PASSWORD=$(echo -n ${ROOT_PASSWORD} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
ESCAPED_ROOT_PASSWORD=""
ESCAPED_VCENTER_SERVER=""
ESCAPED_VCENTER_USERNAME=""
ESCAPED_VCENTER_PASSWORD=""
#http:///vmware/default
KNATIVE_HOST="broker-ingress.knative-eventing.svc.cluster.local"
KNATIVE_DISABLE_TLS="true"
KNATIVE_SCHEME="http"
KNATIVE_PATH="/vmware/default"
VCENTER_DISABLE_TLS="true"
EVENT_PROCESSOR_TYPE="Knative"
if [ "${EVENT_PROCESSOR_TYPE}" == "Knative" ]; then
if [ -z ${KNATIVE_HOST} ]; then
echo "Knative Host was not provided, exiting ..."
exit 1
fi
#echo -e "\e[92mSetting up Knative Processor ..." > /dev/console
cat > ${EVENT_ROUTER_CONFIG} << __KNATIVE_PROCESSOR__
apiVersion: event-router.vmware.com/v1alpha1
kind: RouterConfig
metadata:
name: router-config-knative
eventProcessor:
name: veba-knative
type: knative
knative:
insecureSSL: ${KNATIVE_DISABLE_TLS}
encoding: binary
destination:
uri:
host: ${KNATIVE_HOST}
scheme: ${KNATIVE_SCHEME}
path: ${KNATIVE_PATH}
eventProvider:
name: veba-vc-01
type: vcenter
vcenter:
address: https://${ESCAPED_VCENTER_SERVER}/sdk
auth:
basicAuth:
password: ${ESCAPED_VCENTER_PASSWORD}
username: ${ESCAPED_VCENTER_USERNAME}
type: basic_auth
insecureSSL: ${VCENTER_DISABLE_TLS}
checkpoint: false
metricsProvider:
default:
bindAddress: 0.0.0.0:8082
name: veba-metrics
type: default
__KNATIVE_PROCESSOR__
#echo "Processor: Knative" >> /etc/veba-release
elif [ "${EVENT_PROCESSOR_TYPE}" == "AWS EventBridge" ]; then
echo -e "\e[92mSetting up AWS Event Bridge Processor ..." > /dev/console
ESCAPED_AWS_EVENTBRIDGE_ACCESS_KEY=$(echo -n ${AWS_EVENTBRIDGE_ACCESS_KEY} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
ESCAPED_AWS_EVENTBRIDGE_ACCESS_SECRET=$(echo -n ${AWS_EVENTBRIDGE_ACCESS_SECRET} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
ESCAPED_AWS_EVENTBRIDGE_EVENT_BUS=$(echo -n ${AWS_EVENTBRIDGE_EVENT_BUS} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
ESCAPED_AWS_EVENTBRIDGE_RULE_ARN=$(echo -n ${AWS_EVENTBRIDGE_RULE_ARN} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
cat > ${EVENT_ROUTER_CONFIG} << __AWS_EVENTBRIDGE_PROCESSOR__
apiVersion: event-router.vmware.com/v1alpha1
eventProcessor:
awsEventBridge:
auth:
awsAccessKeyAuth:
accessKey: ${ESCAPED_AWS_EVENTBRIDGE_ACCESS_KEY}
secretKey: ${ESCAPED_AWS_EVENTBRIDGE_ACCESS_SECRET}
type: aws_access_key
eventBus: ${ESCAPED_AWS_EVENTBRIDGE_EVENT_BUS}
region: ${AWS_EVENTBRIDGE_REGION}
ruleARN: ${ESCAPED_AWS_EVENTBRIDGE_RULE_ARN}
name: veba-aws
type: awsEventBridge
eventProvider:
name: veba-vc-01
type: vcenter
vcenter:
address: https://${ESCAPED_VCENTER_SERVER}/sdk
auth:
basicAuth:
password: ${ESCAPED_VCENTER_PASSWORD}
username: ${ESCAPED_VCENTER_USERNAME}
type: basic_auth
insecureSSL: ${VCENTER_DISABLE_TLS}
checkpoint: false
kind: RouterConfig
metadata:
labels:
key: value
name: router-config-aws
metricsProvider:
default:
bindAddress: 0.0.0.0:8082
name: veba-metrics
type: default
__AWS_EVENTBRIDGE_PROCESSOR__
#echo "Processor: EventBridge" >> /etc/veba-release
else
# Setup OpenFaaS
echo -e "\e[92mSetting up OpenFaas Processor ..." > /dev/console
kubectl --kubeconfig /root/.kube/config create -f /root/download/faas-netes/namespaces.yml
# Setup OpenFaaS Secret
kubectl --kubeconfig /root/.kube/config -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password="${OPENFAAS_PASSWORD}"
kubectl --kubeconfig /root/.kube/config create -f /root/download/faas-netes/yaml
ESCAPED_OPENFAAS_PASSWORD=$(echo -n ${OPENFAAS_PASSWORD} | python -c 'import sys,json;data=sys.stdin.read(); print json.dumps(data)')
cat > ${EVENT_ROUTER_CONFIG} << __OPENFAAS_PROCESSOR__
apiVersion: event-router.vmware.com/v1alpha1
eventProcessor:
name: veba-openfaas
openfaas:
address: http://gateway.openfaas:8080
async: false
auth:
basicAuth:
password: ${ESCAPED_OPENFAAS_PASSWORD}
username: admin
type: basic_auth
type: openfaas
eventProvider:
name: veba-vc-01
type: vcenter
vcenter:
address: https://${ESCAPED_VCENTER_SERVER}/sdk
auth:
basicAuth:
password: ${ESCAPED_VCENTER_PASSWORD}
username: ${ESCAPED_VCENTER_USERNAME}
type: basic_auth
insecureSSL: ${VCENTER_DISABLE_TLS}
checkpoint: false
kind: RouterConfig
metadata:
labels:
key: value
name: router-config-openfaas
metricsProvider:
default:
bindAddress: 0.0.0.0:8082
name: veba-metrics
type: default
__OPENFAAS_PROCESSOR__
#echo "Processor: OpenFaaS" >> /etc/veba-release
fi
#!/bin/bash
# Copyright 2019 VMware, Inc. All rights reserved.
# SPDX-License-Identifier: BSD-2
# Setup VMware Event Router
set -euo pipefail
EVENT_ROUTER_CONFIG=${PWD}/event-router-config.yaml
export KUBECONFIG=/projects/installer-testing/vsphere-ipi/auth/kubeconfig
oc -n vmware create secret generic event-router-config --from-file=${EVENT_ROUTER_CONFIG}
# Retrieve the VMware Event Router image
#VEBA_BOM_FILE=/root/config/veba-bom.json
#EVENT_ROUTER_IMAGE=$(jq -r < ${VEBA_BOM_FILE} '.["vmware-event-router"].containers[0].name')
#EVENT_ROUTER_VERSION=$(jq -r < ${VEBA_BOM_FILE} '.["vmware-event-router"].containers[0].version')
# vmware/veba-event-router:latest
EVENT_ROUTER_VERSION="latest"
EVENT_ROUTER_IMAGE="vmware/veba-event-router"
cat > ${PWD}/event-router-k8s.yaml << __EVENT_ROUTER_CONFIG
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vmware-event-router
name: vmware-event-router
spec:
replicas: 1
selector:
matchLabels:
app: vmware-event-router
template:
metadata:
labels:
app: vmware-event-router
spec:
containers:
- image: ${EVENT_ROUTER_IMAGE}:${EVENT_ROUTER_VERSION}
imagePullPolicy: IfNotPresent
args: ["-config", "/etc/vmware-event-router/event-router-config.yaml"]
name: vmware-event-router
resources:
requests:
cpu: 200m
memory: 200Mi
volumeMounts:
- name: config
mountPath: /etc/vmware-event-router/
readOnly: true
volumes:
- name: config
secret:
secretName: event-router-config
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vmware-event-router
name: vmware-event-router
spec:
ports:
- port: 8082
protocol: TCP
targetPort: 8082
selector:
app: vmware-event-router
sessionAffinity: None
__EVENT_ROUTER_CONFIG
oc -n vmware create -f ${PWD}/event-router-k8s.yaml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment