diff --git a/workflows/openstack/eventsources/eventsource-openstack-neutron.yaml b/workflows/openstack/eventsources/eventsource-openstack-neutron.yaml new file mode 100644 index 000000000..70ab2f5d2 --- /dev/null +++ b/workflows/openstack/eventsources/eventsource-openstack-neutron.yaml @@ -0,0 +1,26 @@ +apiVersion: argoproj.io/v1alpha1 +kind: EventSource +metadata: + name: openstack-neutron + namespace: openstack +spec: + template: + serviceAccountName: openstack-events + # Kubernetes resource event sources + resource: + neutron-deployment: + # monitor deployment resources under openstack namespace + namespace: openstack + resource: deployments + group: apps + version: v1 + # Event types to listen for (e.g., ADD, UPDATE, DELETE). Here we want only when deployment is created. + eventTypes: + - ADD + filter: + # filter based these labels to match neutron-server deployment + labels: + - key: application + value: neutron + - key: component + value: server diff --git a/workflows/openstack/sensors/sensor-neutron-deployment.yaml b/workflows/openstack/sensors/sensor-neutron-deployment.yaml new file mode 100644 index 000000000..026567396 --- /dev/null +++ b/workflows/openstack/sensors/sensor-neutron-deployment.yaml @@ -0,0 +1,69 @@ +--- +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: neutron-deployment + namespace: openstack +spec: + template: + serviceAccountName: openstack-events + # events the Sensor listens for + dependencies: + - eventName: neutron-deployment + eventSourceName: openstack-neutron + name: openstack-neutron-server-deployment + # actions executed when dependencies are satisfied (StandardK8STrigger designed to create or update a generic Kubernetes resource.) + triggers: + - template: + name: create-provisioning-network + k8s: + operation: create + source: + resource: + apiVersion: batch/v1 + kind: Job # Resource type to be created + metadata: + generateName: create-provision-network + spec: + template: + spec: + containers: + - name: create-network + image: docker.io/openstackhelm/openstack-client:2024.2 + command: + - /bin/bash + - '-c' + - >- + openstack network create --description "${PROVISIONING_NETWORK_DESCRIPTION}" \ + --no-share --provider-network-type "${PROVISIONING_NETWORK_TYPE}" \ + --provider-physical-network "${PROVISIONING_PHYSICAL_NETWORK}" \ + --tag "${PROVISIONING_NETWORK_TAGS}" \ + "${PROVISIONING_NETWORK_NAME}" + env: + - name: PROVISIONING_NETWORK_NAME + valueFrom: + configMapKeyRef: + name: provisioning-network-config + key: network_name + - name: PROVISIONING_NETWORK_TYPE + valueFrom: + configMapKeyRef: + name: provisioning-network-config + key: network_type + - name: PROVISIONING_PHYSICAL_NETWORK + valueFrom: + configMapKeyRef: + name: provisioning-network-config + key: physical_network + - name: PROVISIONING_NETWORK_TAGS + valueFrom: + configMapKeyRef: + name: provisioning-network-config + key: tags + - name: PROVISIONING_NETWORK_DESCRIPTION + valueFrom: + configMapKeyRef: + name: provisioning-network-config + key: description + imagePullPolicy: IfNotPresent + restartPolicy: OnFailure diff --git a/workflows/openstack/serviceaccounts/serviceaccount-openstack-events.yaml b/workflows/openstack/serviceaccounts/serviceaccount-openstack-events.yaml new file mode 100644 index 000000000..293c4bee7 --- /dev/null +++ b/workflows/openstack/serviceaccounts/serviceaccount-openstack-events.yaml @@ -0,0 +1,39 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: openstack + name: openstack-events + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + namespace: openstack + name: openstack-events-role +rules: + - apiGroups: + - "" + - apps + - batch + resources: + - pods + - deployments + - jobs + verbs: + - '*' + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + namespace: openstack + name: openstack-events-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: openstack-events-role +subjects: + - kind: ServiceAccount + name: openstack-events + namespace: openstack