Merge "Drop testing of SaltStack 2016.3"
diff --git a/_modules/contrail.py b/_modules/contrail.py
index c84b451..d8a5114 100644
--- a/_modules/contrail.py
+++ b/_modules/contrail.py
@@ -73,7 +73,7 @@
     use_ssl = False
     auth_host = kwargs.get('auth_host_ip')
     vnc_lib = vnc_api.VncApi(user, password, tenant_name,
-                             api_host, api_port, api_base_url, wait_for_connect=True,
+                             api_host, api_port, api_base_url, wait_for_connect=False,
                              api_server_use_ssl=use_ssl, auth_host=auth_host)
 
     return vnc_lib
diff --git a/opencontrail/collector.sls b/opencontrail/collector.sls
index 63f7d86..88f1cb5 100644
--- a/opencontrail/collector.sls
+++ b/opencontrail/collector.sls
@@ -49,6 +49,11 @@
   - source: salt://opencontrail/files/{{ collector.version }}/redis.conf
   - template: jinja
   - makedirs: True
+  - mode: 640
+{%- if collector.version < 4.0 %}
+  - user: redis
+  - group: redis
+{%- endif %}
 
 /etc/contrail/contrail-collector.conf:
   file.managed:
diff --git a/opencontrail/compute.sls b/opencontrail/compute.sls
index 752c469..1593abb 100644
--- a/opencontrail/compute.sls
+++ b/opencontrail/compute.sls
@@ -240,4 +240,13 @@
   - onlyif: /bin/false
   {%- endif %}
 
+{%- if pillar.get('telegraf', {}).get('agent', {}).get('enabled', False) %}
+/usr/local/bin/curl_detect_metadata.sh:
+  file.managed:
+  - source: salt://opencontrail/files/curl_detect_metadata_http.sh
+  - template: jinja
+  - mode: 755
+
+{%- endif %}
+
 {%- endif %}
diff --git a/opencontrail/files/curl_detect_metadata_http.sh b/opencontrail/files/curl_detect_metadata_http.sh
new file mode 100644
index 0000000..39805d7
--- /dev/null
+++ b/opencontrail/files/curl_detect_metadata_http.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+{%- from "opencontrail/map.jinja" import compute with context %}
+{%- set bind_addr=compute.interface.address|replace('0.0.0.0', '127.0.0.1') %}
+
+metadata=$(curl --silent http://{{ bind_addr|default('127.0.0.1') }}:8085/Snh_LinkLocalServiceInfo | grep -c 169.254.169.254 )
+echo "{ \"contrail_instance_metadata_present\": $metadata }"
diff --git a/opencontrail/meta/prometheus.yml b/opencontrail/meta/prometheus.yml
index d4feeb9..d7cf03f 100644
--- a/opencontrail/meta/prometheus.yml
+++ b/opencontrail/meta/prometheus.yml
@@ -163,6 +163,16 @@
       annotations:
         summary: "OpenContrail BGP sessions are down"
         description: "{{ $value }} OpenContrail BGP sessions on the {{ $labels.host }} node are down for 2 minutes."
+    ContrailMetadataCheck:
+      if: >-
+        min(exec_contrail_instance_metadata_present) by (host) == 0
+      for: 15m
+      labels:
+        severity: critical
+        service: contrail
+      annotations:
+        summary: "OpenContrail metadata is unavailable"
+        description: "The OpenContrail metadata on the {{ $labels.host }} node is unavailable for 15 minutes."
     ContrailXMPPSessionsMissingEstablished:
       if: >-
         count(contrail_vrouter_xmpp) * 2 - sum(contrail_xmpp_session_up_count) > 0
diff --git a/opencontrail/meta/telegraf.yml b/opencontrail/meta/telegraf.yml
index f4736f6..118750e 100644
--- a/opencontrail/meta/telegraf.yml
+++ b/opencontrail/meta/telegraf.yml
@@ -4,6 +4,14 @@
   input:
   {%- if collector.get('enabled', False) or database.get('enabled', False) or control.get('enabled', False)
       or web.get('enabled', False) or compute.get('enabled', False) %}
+    {%- if compute.get('enabled', False) %}
+    exec:
+      commands:
+        - "/usr/local/bin/curl_detect_metadata.sh"
+      interval: "30s"
+      data_format: "json"
+      timeout: "10s"
+    {%- endif %}
     procstat:
       process:
     {%- if collector.get('enabled', False) %}