Fix incorrect state in Loadbalancer monitoring

Change-Id: Ib63a37d395a58591098de1ef0c0143039c027993
Closes-Bug: ATMOSPHERE-653
diff --git a/releasenotes/notes/fix-openstack-alert-OctaviaLoadBalancerNotActive-68315e228eecf7e3.yaml b/releasenotes/notes/fix-openstack-alert-OctaviaLoadBalancerNotActive-68315e228eecf7e3.yaml
new file mode 100644
index 0000000..380cfec
--- /dev/null
+++ b/releasenotes/notes/fix-openstack-alert-OctaviaLoadBalancerNotActive-68315e228eecf7e3.yaml
@@ -0,0 +1,10 @@
+---
+fixes:
+  - |
+    Improve alert generation for load balancers that have a non-``ACTIVE`` provisioning state
+    despite an ``ONLINE`` operational state.  Previously, if a load balancer was in a
+    transitional state such as ``PENDING_UPDATE`` (``provisioning_state``) while still marked
+    as ``ONLINE`` (``operational_state``), the gauge metric
+    ``openstack_loadbalancer_loadbalancer_status{provisioning_status!="ACTIVE"}`` did not
+    trigger an alert.  This update addresses the issue by ensuring that alerts are properly
+    generated in these scenarios.
diff --git a/roles/kube_prometheus_stack/files/jsonnet/openstack.libsonnet b/roles/kube_prometheus_stack/files/jsonnet/openstack.libsonnet
index c8d5ac9..e70f93d 100644
--- a/roles/kube_prometheus_stack/files/jsonnet/openstack.libsonnet
+++ b/roles/kube_prometheus_stack/files/jsonnet/openstack.libsonnet
@@ -325,7 +325,7 @@
                 summary: 'Octavia load balancer not active',
                 description: 'Load balancer with ID {{ $labels.id }} stuck in non-active state for more then 15 minutes.',
               },
-              expr: 'openstack_loadbalancer_loadbalancer_status{provisioning_status!="ACTIVE"} > 0',
+              expr: 'count by (id,name) (openstack_loadbalancer_loadbalancer_status{provisioning_status!="ACTIVE"}) > 0',
               'for': '15m',
               labels: {
                 severity: 'P3',
diff --git a/roles/kube_prometheus_stack/files/jsonnet/tests.yml b/roles/kube_prometheus_stack/files/jsonnet/tests.yml
index 6ed198d..0665e92 100644
--- a/roles/kube_prometheus_stack/files/jsonnet/tests.yml
+++ b/roles/kube_prometheus_stack/files/jsonnet/tests.yml
@@ -188,3 +188,21 @@
             exp_annotations:
               summary: Percona XtraDB Cluster is down
               description: All replicas are down.
+
+  - interval: 1m
+    input_series:
+      - series: 'openstack_loadbalancer_loadbalancer_status{id="d4e449ad-fad5-4d9e-a039-f71c773ec999", job="openstack-exporter", name="test-lb", operating_status="ONLINE", provisioning_status="PENDING_UPDATE"}'
+        values: '0x15'
+      - series: 'openstack_loadbalancer_loadbalancer_status{id="25dcf79f-b09d-4d0c-9e29-b69ded2ec734", job="openstack-exporter", name="test-lb-2", operating_status="ONLINE", provisioning_status="ACTIVE"}'
+        values: '0x15'
+    alert_rule_test:
+      - eval_time: 15m
+        alertname: OctaviaLoadBalancerNotActive
+        exp_alerts:
+          - exp_labels:
+              severity: P3
+              id: d4e449ad-fad5-4d9e-a039-f71c773ec999
+              name: test-lb
+            exp_annotations:
+              summary: Octavia load balancer not active
+              description: Load balancer with ID d4e449ad-fad5-4d9e-a039-f71c773ec999 stuck in non-active state for more then 15 minutes.
\ No newline at end of file