In the previous post, I walked line-by-line through the code that comprises the kn-pcli-pg-check example function. In this post, we finish the function.
Once the function works during testing, you need to deploy it to VEBA. The deployment steps are the same steps that everyone who wants to use your function will follow.
Step 1 – Push Image
You should be following “Step 3 – Deploy” in the README file. You should be copying and pasting the commands into your terminal window. If the commands don’t work for you, they won’t work for anybody else trying to use your function. Correct the README if there are any
docker push ${IMAGE}
Step 2 – Update JSON
In Part VIII, we configured environment variables in ‘test/docker-test-env-variable’. The same variables need to be configured in ‘pg_check_secret.json’. You should also take a moment now to ensure all of your environment variables are documented in the README.
{
"VCENTER_SERVER": "vc02.ad.patrickkremer.com",
"VCENTER_USERNAME" : "administrator@vsphere.local",
"VCENTER_PASSWORD" : "FILL-ME-IN",
"VCENTER_CERTIFICATE_ACTION" : "Ignore",
"VM_WATCH_TAGS":["PCI/PCI-VM","PCI/PCI-VM2"],
"PG_WATCH_TAGS":["PCI/PCI-Network","PCI/PCI-Network2"],
"SLACK_WEBHOOK_URL" : "https://hooks.slack.com/services/FILL-ME-IN",
"SLACK_MESSAGE_PRETEXT":"Virtual Machine - Portgroup Alert"
}
Step 3 – Create Kubernetes Secret
Create the Kubernetes secret from the JSON file
kubectl -n vmware-functions create secret generic pg-check-secret --from-file=PG_CHECK_SECRET=pg_check_secret.json
Step 4 – Configure function.yaml
Ensure the following properties are configured in function.yaml
- Service name
- Trigger name
- Container image – point to the Docker image you pushed in Step 1
- secretRef – point to the secret file you created in Step 2
- Filter subject – The event name you figured out with the Sockeye service in Part VIII
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: kn-pcli-pg-check
labels:
app: veba-ui
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: "1"
autoscaling.knative.dev/minScale: "1"
spec:
containers:
- image: kremerpatrick/kn-pcli-pg-check:1.0
envFrom:
- secretRef:
name: pg-check-secret
env:
- name: FUNCTION_DEBUG
value: "true"
---
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: veba-pcli-pg-check-trigger
labels:
app: veba-ui
spec:
broker: default
filter:
attributes:
type: com.vmware.event.router/event
# Replace this subject with the event you need to trigger on
# Then, edit send-cloudevent-test.ps1 and send-cloudevent-test.sh in the /test folder
subject: VmReconfiguredEvent
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: kn-pcli-pg-check
Step 5 – Deploy Function
Deploy the function to your VEBA appliance
kubectl -n vmware-functions apply -f function.yaml
You can check on the function status with:
kubectl get pods -A
You will initially see the container being created.
It should eventually move to Running
Step 6 – Test
It is a good idea to monitor the container logfile while doing testing. List out the pods
kubectl get pods -A
Find your function name
Follow the container log
kubectl logs -n vmware-functions kn-pcli-pg-check-00001-deployment-7f595cc7b5-7bvgs user-container --follow
The function is up, waiting for input.
Now, make a change to a VM in vCenter. I first edited a VM but made no changes. The function triggered, but correctly detected that nothing changed.
Now I put a VM on a PCI port group.
Now I put the VM on a non-PCI portgroup. It is detected correctly, and the log shows that a Slack message was sent.
The message appears in Slack.
Step 7 – Clean up
Delete the function and the secret
kubectl -n vmware-functions delete -f function.yaml
kubectl -n vmware-functions delete secret pg-check-secret
Step 8 – Contribute
Open source thrives on community contributions. Please contribute your function back to the repo! Follow these steps to let others use your code.
VMware Event Broker Appliance – Part IX – Building a new PowerCLI Function - Writing Code -
[…] the Part X, I explain how to go from the function writing phase to the function deployment […]