Merge "Alerts reworked"
diff --git a/.kitchen.yml b/.kitchen.yml
index dbb2fea..7501126 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -51,7 +51,7 @@
 platforms:
   - name: <%=ENV['PLATFORM'] ||  'saltstack-ubuntu-xenial-salt-stable' %>
     driver_config:
-      image: <%=ENV['PLATFORM'] || 'epcim/salt-formulas:saltstack-ubuntu-xenial-salt-stable'%>
+      image: <%=ENV['PLATFORM'] || 'epcim/salt:saltstack-ubuntu-xenial-salt-stable'%>
       platform: ubuntu
 
 suites:
diff --git a/.travis.yml b/.travis.yml
index a9c4dd4..4fd7f0d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,36 +18,71 @@
   - bundle install
 
 env:
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=single3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=analytics3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=control3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=cluster3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=vrouter3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=single3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=analytics3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=control3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=cluster3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=vrouter3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=single40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=analytics40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=control40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=cluster40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=vrouter40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=single3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=analytics3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=control3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=cluster3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=vrouter3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=single3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=analytics3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=control3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=cluster3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=vrouter3
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=single40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=analytics40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=control40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=cluster40
-  - PLATFORM=epcim/salt-formulas:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=vrouter40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=single3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=analytics3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=control3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=cluster3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc311 SUITE=vrouter3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=single3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=analytics3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=control3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=cluster3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc323 SUITE=vrouter3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=single40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=analytics40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=control40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=cluster40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2016.3 OC_REPO=oc40 SUITE=vrouter40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=single3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=analytics3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=control3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=cluster3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc311 SUITE=vrouter3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=single3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=analytics3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=control3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=cluster3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc323 SUITE=vrouter3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=single40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=analytics40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=control40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=cluster40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2017.7 OC_REPO=oc40 SUITE=vrouter40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc323 SUITE=single3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc323 SUITE=analytics3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc323 SUITE=control3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc323 SUITE=cluster3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc323 SUITE=vrouter3
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc40 SUITE=single40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc40 SUITE=analytics40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc40 SUITE=control40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc40 SUITE=cluster40
+  - PLATFORM=epcim/salt:saltstack-ubuntu-xenial-salt-2018.3 OC_REPO=oc40 SUITE=vrouter40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc311 SUITE=single3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc311 SUITE=analytics3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc311 SUITE=control3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc311 SUITE=cluster3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc311 SUITE=vrouter3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc323 SUITE=single3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc323 SUITE=analytics3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc323 SUITE=control3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc323 SUITE=cluster3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc323 SUITE=vrouter3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc40 SUITE=single40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc40 SUITE=analytics40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc40 SUITE=control40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc40 SUITE=cluster40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2017.7 OC_REPO=oc40 SUITE=vrouter40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc323 SUITE=single3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc323 SUITE=analytics3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc323 SUITE=control3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc323 SUITE=cluster3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc323 SUITE=vrouter3
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc40 SUITE=single40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc40 SUITE=analytics40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc40 SUITE=control40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc40 SUITE=cluster40
+  # - PLATFORM=epcim/salt:saltstack-ubuntu-bionic-salt-2018.3 OC_REPO=oc40 SUITE=vrouter40
 
 before_script:
   - set -o pipefail
diff --git a/README.rst b/README.rst
index 825b1c0..ba0d7b4 100644
--- a/README.rst
+++ b/README.rst
@@ -129,6 +129,11 @@
           members:
           - host: 127.0.0.1
             port: 9160
+        message_queue:
+          members:
+          - host: 127.0.0.1
+          - host: 127.0.0.1
+          - host: 127.0.0.1
       database:
         version: 2.2
         cassandra:
@@ -286,6 +291,11 @@
             port: 9160
           - host: 127.0.0.1
             port: 9160
+        message_queue:
+          members:
+          - host: 127.0.0.1
+          - host: 127.0.0.1
+          - host: 127.0.0.1
       database:
         version: 2.2
         cassandra:
@@ -518,6 +528,11 @@
             port: 9160
           - host: 127.0.0.1
             port: 9160
+        message_queue:
+          members:
+          - host: 127.0.0.1
+          - host: 127.0.0.1
+          - host: 127.0.0.1
       database:
         version: 2.2
         cassandra:
diff --git a/opencontrail/files/3.0/contrail-alarm-gen.conf b/opencontrail/files/3.0/contrail-alarm-gen.conf
index 1da7577..d14cab0 100644
--- a/opencontrail/files/3.0/contrail-alarm-gen.conf
+++ b/opencontrail/files/3.0/contrail-alarm-gen.conf
@@ -1,4 +1,4 @@
-{%- from "opencontrail/map.jinja" import collector with context %}
+{%- from "opencontrail/map.jinja" import collector,common with context %}
 [DEFAULTS]
 host_ip = {{ collector.bind.address }}
 #collectors = 127.0.0.1:8086
@@ -12,10 +12,32 @@
 log_file = /var/log/contrail/contrail-alarm-gen.log
 kafka_broker_list = {% for member in collector.database.members %}{{ member.host }}:9092 {% endfor %}
 zk_list = {% for member in collector.database.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %}
+{%- if collector.get('message_queue', {}).members is defined %}
+rabbitmq_server_list={{ collector.message_queue.members | join(',', attribute='host') }}
+rabbitmq_ha_mode=True
+rabbitmq_port={{ collector.get('message_queue', {}).get('port', 5672) }}
+{%- elif collector.get('message_queue', {}).host is defined %}
+rabbitmq_server_list={{ collector.message_queue.host }}
+rabbitmq_port={{ collector.get('message_queue', {}).get('port', 5672) }}
+{%- endif %}
 
 [DISCOVERY]
 disc_server_ip = {{ collector.discovery.host }}
 disc_server_port = 5998
 
+[API_SERVER]
+api_server_list={{ collector.discovery.host }}:8082
+api_server_use_ssl=False
+
+{%- if common.identity.engine == "keystone" and not common.get('k8s_enabled', False) %}
+[KEYSTONE]
+auth_host={{ common.identity.host }}
+auth_protocol=http
+auth_port={{ common.identity.port }}
+admin_user={{ common.identity.get('user', "admin") }}
+admin_password={{ common.identity.password }}
+admin_tenant_name={{ common.identity.get('tenant', "admin") }}
+{%- endif %}
+
 [REDIS]
 #redis_server_port=6379
diff --git a/opencontrail/files/3.0/contrail-snmp-collector.conf b/opencontrail/files/3.0/contrail-snmp-collector.conf
index 7beb090..d57251a 100644
--- a/opencontrail/files/3.0/contrail-snmp-collector.conf
+++ b/opencontrail/files/3.0/contrail-snmp-collector.conf
@@ -24,10 +24,23 @@
 #disc_server_port=5998
 
 [KEYSTONE]
-#keystone parameters come from contrail-keystone-auth.conf
-#auth_host=127.0.0.1
-#auth_protocol=http
-#auth_port=35357
-#admin_user=user1
-#admin_password=password1
-#admin_tenant_name=default-domain
+{%- if collector.get('identity', {}).get('engine') == 'keystone' %}
+auth_host={{ collector.identity.host }}
+auth_protocol=http
+auth_port={{ collector.identity.port }}
+admin_user={{ collector.identity.user }}
+admin_password={{ collector.identity.password }}
+admin_tenant_name={{ collector.identity.tenant }}
+insecure=True
+{%- if collector.cache is defined %}
+#memcache_servers=127.0.0.1:11211
+memcache_servers={% for member in collector.cache.members %}{{ member.host }}:{{ member.port }}{% if not loop.last %},{% endif %}{% endfor %}
+{%- endif %}
+{%- if collector.identity.version == "3" %}
+project_name={{ collector.identity.tenant }}
+project_domain_name={{ collector.identity.get('domain', 'default')|lower}}
+auth_url=http://{{ collector.identity.host }}:{{ collector.identity.port }}/v3
+{%- else %}
+auth_url=http://{{ collector.identity.host }}:{{ collector.identity.port }}/v2.0
+{%- endif %}
+{%- endif %}
diff --git a/opencontrail/files/4.0/contrail-alarm-gen.conf b/opencontrail/files/4.0/contrail-alarm-gen.conf
index ad2fbbf..ae8ea5e 100644
--- a/opencontrail/files/4.0/contrail-alarm-gen.conf
+++ b/opencontrail/files/4.0/contrail-alarm-gen.conf
@@ -11,8 +11,15 @@
 partitions=30
 zk_list = {% for member in collector.database.members %}{{ member.host }}:2182 {% endfor %}
 #rabbitmq_server_list = xx.xx.xx.xx
-rabbitmq_server_list = {{ collector.message_queue.host }}
-rabbitmq_port = 5672
+{%- if collector.get('message_queue', {}).members is defined %}
+rabbitmq_server_list={{ collector.message_queue.members | join(',', attribute='host') }}
+rabbitmq_ha_mode=True
+rabbitmq_port={{ collector.get('message_queue', {}).get('port', 5672) }}
+{%- elif collector.get('message_queue', {}).host is defined %}
+rabbitmq_server_list={{ collector.message_queue.host }}
+rabbitmq_port={{ collector.get('message_queue', {}).get('port', 5672) }}
+{%- endif %}
+
 
 [API_SERVER]
 # List of api-servers in ip:port format separated by space
diff --git a/tests/pillar/analytics3.sls b/tests/pillar/analytics3.sls
index 1a5e861..2afcd1c 100644
--- a/tests/pillar/analytics3.sls
+++ b/tests/pillar/analytics3.sls
@@ -32,6 +32,12 @@
         port: 9160
       - host: 127.0.0.1
         port: 9160
+    message_queue:
+      host: 127.0.0.1
+      members:
+      - host: 127.0.0.1
+      - host: 127.0.0.1
+      - host: 127.0.0.1
   database:
     version: 3.0
     cassandra:
diff --git a/tests/pillar/cluster3.sls b/tests/pillar/cluster3.sls
index 1f97957..54c9d41 100644
--- a/tests/pillar/cluster3.sls
+++ b/tests/pillar/cluster3.sls
@@ -104,6 +104,12 @@
         port: 9160
       - host: 127.0.0.1
         port: 9160
+    message_queue:
+      host: 127.0.0.1
+      members:
+      - host: 127.0.0.1
+      - host: 127.0.0.1
+      - host: 127.0.0.1
   database:
     version: 3.0
     cassandra:
diff --git a/tests/pillar/single3.sls b/tests/pillar/single3.sls
index 859caf7..43f6dd6 100644
--- a/tests/pillar/single3.sls
+++ b/tests/pillar/single3.sls
@@ -80,6 +80,12 @@
       members:
       - host: 127.0.0.1
         port: 9160
+    message_queue:
+      host: 127.0.0.1
+      members:
+      - host: 127.0.0.1
+      - host: 127.0.0.1
+      - host: 127.0.0.1
   database:
     version: 3.0
     cassandra: