Merge pull request #4 from elemoine/sync

Sync from mk-lab-salt-model classes/system
diff --git a/aodh/server/cluster.yml b/aodh/server/cluster.yml
new file mode 100644
index 0000000..2be4db6
--- /dev/null
+++ b/aodh/server/cluster.yml
@@ -0,0 +1,4 @@
+classes:
+- service.aodh.server.cluster
+- system.haproxy.proxy.listen.openstack.aodh
+- service.keepalived.cluster.single
diff --git a/aodh/server/single.yml b/aodh/server/single.yml
new file mode 100644
index 0000000..eba3fc1
--- /dev/null
+++ b/aodh/server/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.aodh.server.single
diff --git a/ceilometer/agent/cluster.yml b/ceilometer/agent/cluster.yml
new file mode 100644
index 0000000..d62a433
--- /dev/null
+++ b/ceilometer/agent/cluster.yml
@@ -0,0 +1,2 @@
+classes:
+- service.ceilometer.agent.cluster
diff --git a/ceilometer/agent/single.yml b/ceilometer/agent/single.yml
new file mode 100644
index 0000000..ebb1d60
--- /dev/null
+++ b/ceilometer/agent/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.ceilometer.agent.single
diff --git a/ceilometer/compute/cluster.yml b/ceilometer/compute/cluster.yml
deleted file mode 100644
index 86b044e..0000000
--- a/ceilometer/compute/cluster.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-classes:
-- service.ceilometer.agent.cluster
-- service.ceilometer.agent.publisher.graphite
-parameters:
-  nova:
-    compute:
-      notification:
-        driver: messagingv2
diff --git a/ceilometer/server/cluster.yml b/ceilometer/server/cluster.yml
new file mode 100644
index 0000000..0cbdd82
--- /dev/null
+++ b/ceilometer/server/cluster.yml
@@ -0,0 +1,18 @@
+classes:
+- service.ceilometer.server.cluster
+- system.haproxy.proxy.listen.openstack.ceilometer
+- service.keepalived.cluster.single
+parameters:
+  ceilometer:
+    server:
+      database:
+        influxdb:
+          host: ${_param:stacklight_monitor_node01_address}
+          port: 8086
+          user: ceilometer
+          password: ${_param:ceilometer_influxdb_password}
+          database: ceilometer
+        elasticsearch:
+          enabled: true
+          host: ${_param:stacklight_monitor_address}
+          port: 9200
diff --git a/ceilometer/server/single.yml b/ceilometer/server/single.yml
new file mode 100644
index 0000000..a8b1f90
--- /dev/null
+++ b/ceilometer/server/single.yml
@@ -0,0 +1,16 @@
+classes:
+- service.ceilometer.server.single
+parameters:
+  ceilometer:	
+    server:
+      database:
+        influxdb:
+          host: ${_param:stacklight_monitor_node01_address}
+          port: 8086
+          user: ceilometer
+          password: ${_param:ceilometer_influxdb_password}
+          database: ceilometer
+        elasticsearch:
+          enabled: true
+          host: ${_param:stacklight_monitor_address}
+          port: 9200
diff --git a/collectd/client/output/heka.yml b/collectd/client/output/heka.yml
index 5efb3ac..9550961 100644
--- a/collectd/client/output/heka.yml
+++ b/collectd/client/output/heka.yml
@@ -14,3 +14,4 @@
           port: ${_param:collectd_metric_collector_port}
       read_interval: 10
       use_fqdn: false
+      syslog_logging: false
diff --git a/collectd/remote_client/output/heka.yml b/collectd/remote_client/output/heka.yml
index ec3b5e0..a5a509d 100644
--- a/collectd/remote_client/output/heka.yml
+++ b/collectd/remote_client/output/heka.yml
@@ -12,3 +12,4 @@
           timeout: 5
       read_interval: 10
       use_fqdn: false
+      syslog_logging: false
diff --git a/elasticsearch/server/cluster.yml b/elasticsearch/server/cluster.yml
index b59417a..8f53f21 100644
--- a/elasticsearch/server/cluster.yml
+++ b/elasticsearch/server/cluster.yml
@@ -1,8 +1,6 @@
 classes:
 - service.elasticsearch.server.cluster
 - service.java.environment
-- service.glusterfs.server
-- service.glusterfs.client
 parameters:
   _param:
     java_environment_version: "8"
@@ -40,34 +38,3 @@
         - host: ${_param:cluster_node01_address}
         - host: ${_param:cluster_node02_address}
         - host: ${_param:cluster_node03_address}
-      snapshot:
-        repo:
-          path: /var/lib/elasticsearch/repo
-  glusterfs:
-    server:
-      peers:
-        - ${_param:cluster_node01_address}
-        - ${_param:cluster_node02_address}
-        - ${_param:cluster_node03_address}
-      volumes:
-        elasticrepo:
-          storage: /srv/glusterfs/elasticrepo
-          replica: 3
-          bricks:
-            - ${_param:cluster_node01_address}:/srv/glusterfs/elasticrepo
-            - ${_param:cluster_node02_address}:/srv/glusterfs/elasticrepo
-            - ${_param:cluster_node03_address}:/srv/glusterfs/elasticrepo
-          options:
-            cluster.readdir-optimize: On
-            cluster.lookup-optimize: On
-            nfs.disable: On
-            network.remote-dio: On
-            diagnostics.client-log-level: WARNING
-            diagnostics.brick-log-level: WARNING
-    client:
-      volumes:
-        elasticrepo:
-          path: /var/lib/elasticsearch/repo
-          server: ${_param:cluster_node01_address}
-          user: elasticsearch
-          group: elasticsearch
diff --git a/elasticsearch/server/curator.yml b/elasticsearch/server/curator.yml
index c0e9300..82f34bb 100644
--- a/elasticsearch/server/curator.yml
+++ b/elasticsearch/server/curator.yml
@@ -1,87 +1,32 @@
 parameters:
+  _param:
+    elasticsearch_curator_indices_pattern: "^(log|notification)-.*$"
+    elasticsearch_curator_retention_period: 31
   elasticsearch:
     server:
       curator:
         timeout: 900
         logfile: /var/log/elasticsearch/curator.log
         logformat: json
+        master_only: true
         actions:
           - action: delete_indices
             description: >-
-              Delete indices older than month (based on index name).
-              Ignore the error if the filter does not result in an actionable
-              list of indices (ignore_empty_list) and exit cleanly.
+                Delete indices older than ${_param:elasticsearch_curator_retention_period} days (based on index name).
             options:
               ignore_empty_list: True
+              timeout_override:
               continue_if_exception: False
               disable_action: False
             filters:
-              - filtertype: pattern
-                kind: regex
-                value: 'netflow\-\d\d\d\d\.\d\d\.\d\d$'
-              - filtertype: age
-                source: name
-                direction: older
-                timestring: '%Y.%m.%d'
-                unit: days
-                unit_count: 30
-          - action: delete_indices
-            description: >-
-              Delete indices older than 6 months (based on index name).
-              Ignore the error if the filter does not result in an actionable
-              list of indices (ignore_empty_list) and exit cleanly.
-            options:
-              ignore_empty_list: True
-              continue_if_exception: False
-              disable_action: False
-            filters:
-              - filtertype: pattern
-                kind: regex
-                value: '.*\-\d\d\d\d\.\d\d\.\d\d$'
-              - filtertype: age
-                source: name
-                direction: older
-                timestring: '%Y.%m.%d'
-                unit: days
-                unit_count: 180
-          - action: replicas
-            description: >-
-              Reduce the replica count to 0 for indices older than 60 days
-              (based on index creation_date)
-            options:
-              count: 0
-              wait_for_completion: False
-              continue_if_exception: False
-              disable_action: False
-            filters:
-              - filtertype: pattern
-                kind: regex
-                value: '.*\-\d\d\d\d\.\d\d\.\d\d$'
-              - filtertype: age
-                source: creation_date
-                direction: older
-                unit: days
-                unit_count: 90
-          - action: forcemerge
-            description: >-
-              forceMerge indices older than 2 days (based on index
-              creation_date) to 2 segments per shard.  Delay 120 seconds
-              between each forceMerge operation to allow the cluster to
-              quiesce.
-              This action will ignore indices already forceMerged to the same
-              or fewer number of segments per shard, so the 'forcemerged'
-              filter is unneeded.
-            options:
-              max_num_segments: 2
-              delay: 120
-              continue_if_exception: False
-              disable_action: False
-            filters:
-              - filtertype: pattern
-                kind: regex
-                value: '.*\-\d\d\d\d\.\d\d\.\d\d$'
-              - filtertype: age
-                source: creation_date
-                direction: older
-                unit: days
-                unit_count: 2
+            - filtertype: pattern
+              kind: regex
+              value: "${_param:elasticsearch_curator_indices_pattern}"
+              exclude:
+            - filtertype: age
+              source: name
+              direction: older
+              timestring: '%Y.%m.%d'
+              unit: days
+              unit_count: ${_param:elasticsearch_curator_retention_period}
+              exclude:
diff --git a/elasticsearch/server/single.yml b/elasticsearch/server/single.yml
index d5c0538..ab9e009 100644
--- a/elasticsearch/server/single.yml
+++ b/elasticsearch/server/single.yml
@@ -34,26 +34,3 @@
         minimum_master_nodes: 1
         members:
         - host: ${_param:cluster_node01_address}
-      curator:
-        timeout: 30
-        logfile: /var/log/elasticsearch/curator.log
-        logformat: default
-        loglevel: INFO
-        actions:
-        - action: delete_indices
-          description: >-
-            Delete indices older than 31 days (based on index name).
-          options:
-            ignore_empty_list: True
-            continue_if_exception: False
-            disable_action: False
-          filters:
-          - filtertype: pattern
-            kind: regex
-            value: "^log|notification-.*$"
-          - filtertype: age
-            source: name
-            direction: older
-            timestring: '%Y.%m.%d'
-            unit: days
-            unit_count: 31
diff --git a/elasticsearch/server/storage/glusterfs.yml b/elasticsearch/server/storage/glusterfs.yml
new file mode 100644
index 0000000..25e9c54
--- /dev/null
+++ b/elasticsearch/server/storage/glusterfs.yml
@@ -0,0 +1,37 @@
+classes:
+- service.glusterfs.server
+- service.glusterfs.client
+parameters:
+  elasticsearch:
+    server:
+      snapshot:
+        repo:
+          path: /var/lib/elasticsearch/repo
+  glusterfs:
+    server:
+      peers:
+        - ${_param:cluster_node01_address}
+        - ${_param:cluster_node02_address}
+        - ${_param:cluster_node03_address}
+      volumes:
+        elasticrepo:
+          storage: /srv/glusterfs/elasticrepo
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/elasticrepo
+            - ${_param:cluster_node02_address}:/srv/glusterfs/elasticrepo
+            - ${_param:cluster_node03_address}:/srv/glusterfs/elasticrepo
+          options:
+            cluster.readdir-optimize: On
+            cluster.lookup-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
+    client:
+      volumes:
+        elasticrepo:
+          path: /var/lib/elasticsearch/repo
+          server: ${_param:cluster_node01_address}
+          user: elasticsearch
+          group: elasticsearch
diff --git a/galera/server/database/aodh.yml b/galera/server/database/aodh.yml
new file mode 100644
index 0000000..f5095d2
--- /dev/null
+++ b/galera/server/database/aodh.yml
@@ -0,0 +1,15 @@
+parameters:
+  mysql:
+    server:
+      database:
+        aodh:
+          encoding: utf8
+          users:
+          - name: aodh
+            password: ${_param:mysql_aodh_password}
+            host: '%'
+            rights: all
+          - name: aodh
+            password: ${_param:mysql_aodh_password}
+            host: ${_param:cluster_vip_address}
+            rights: all
diff --git a/grafana/server/single.yml b/grafana/server/single.yml
index 911f32f..fd8f020 100644
--- a/grafana/server/single.yml
+++ b/grafana/server/single.yml
@@ -26,7 +26,8 @@
         user: grafana
         password: ${_param:mysql_grafana_password}
       auth:
-        engine: basic
+        basic:
+          enabled: true
       admin:
         user: ${_param:grafana_user}
         password: ${_param:grafana_password}
diff --git a/haproxy/proxy/listen/opencontrail/control.yml b/haproxy/proxy/listen/opencontrail/control.yml
index 431626a..c389682 100644
--- a/haproxy/proxy/listen/opencontrail/control.yml
+++ b/haproxy/proxy/listen/opencontrail/control.yml
@@ -5,7 +5,6 @@
         contrail_api:
           type: contrail-api
           service_name: contrail
-          check: false
           binds:
           - address: ${_param:cluster_vip_address}
             port: 8082
@@ -43,7 +42,7 @@
             params: check inter 2000 rise 2 fall 3
         contrail_config_stats:
           type: contrail-config
-          service_name: contrail
+          check: false
           format: listen
           binds:
           - address: '*'
@@ -52,7 +51,7 @@
           password: ${_param:opencontrail_stats_password}
         contrail_openstack_stats:
           type: contrail-config
-          service_name: contrail
+          check: false
           format: listen
           binds:
           - address: '*'
@@ -61,7 +60,7 @@
           password: ${_param:opencontrail_stats_password}
         contrail_collector_stats:
           type: contrail-config
-          service_name: contrail
+          check: false
           format: listen
           binds:
           - address: '*'
diff --git a/haproxy/proxy/listen/openstack/aodh.yml b/haproxy/proxy/listen/openstack/aodh.yml
new file mode 100644
index 0000000..6b024aa
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/aodh.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        aodh-api:
+          type: openstack-service
+          service_name: aodh
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8042
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 8042
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 8042
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 8042
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
\ No newline at end of file
diff --git a/haproxy/proxy/listen/openstack/ceilometer.yml b/haproxy/proxy/listen/openstack/ceilometer.yml
new file mode 100644
index 0000000..7e90073
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/ceilometer.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        ceilometer-api:
+          type: openstack-service
+          service_name: ceilometer
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 8777
+          servers:
+          - name: ctl01
+            host: ${_param:cluster_node01_address}
+            port: 8777
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl02
+            host: ${_param:cluster_node02_address}
+            port: 8777
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ctl03
+            host: ${_param:cluster_node03_address}
+            port: 8777
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
diff --git a/haproxy/proxy/listen/openstack/glance.yml b/haproxy/proxy/listen/openstack/glance.yml
index d8795c3..729cc5b 100644
--- a/haproxy/proxy/listen/openstack/glance.yml
+++ b/haproxy/proxy/listen/openstack/glance.yml
@@ -24,7 +24,6 @@
         glance_registry_api:
           type: general-service
           service_name: glance
-          check: false
           binds:
           - address: ${_param:cluster_vip_address}
             port: 9191
diff --git a/heka/aggregator/cluster.yml b/heka/aggregator/cluster.yml
index e2ee129..455dbb1 100644
--- a/heka/aggregator/cluster.yml
+++ b/heka/aggregator/cluster.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.aggregator.cluster
+- system.heka.server
 parameters:
   _param:
     nagios_default_host_alarm_clusters: 00-clusters
diff --git a/heka/aggregator/single.yml b/heka/aggregator/single.yml
index c252bd6..4b1c71f 100644
--- a/heka/aggregator/single.yml
+++ b/heka/aggregator/single.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.aggregator.single
+- system.heka.server
 parameters:
   _param:
     nagios_default_host_alarm_clusters: 00-clusters
diff --git a/heka/alarm/openstack_compute.yml b/heka/alarm/openstack_compute.yml
index d4fda7d..81b8be9 100644
--- a/heka/alarm/openstack_compute.yml
+++ b/heka/alarm/openstack_compute.yml
@@ -73,7 +73,7 @@
     aggregator:
       alarm_cluster:
         compute_nodes:
-          policy: majority_of_members
+          policy: status_of_members
           alerting: enabled_with_notification
           group_by: hostname
           match:
diff --git a/heka/alarm/openstack_control.yml b/heka/alarm/openstack_control.yml
index 7dcb331..e94db48 100644
--- a/heka/alarm/openstack_control.yml
+++ b/heka/alarm/openstack_control.yml
@@ -85,7 +85,7 @@
     aggregator:
       alarm_cluster:
         control_nodes:
-          policy: majority_of_members
+          policy: status_of_members
           alerting: enabled_with_notification
           group_by: hostname
           match:
diff --git a/heka/ceilometer_collector/single.yml b/heka/ceilometer_collector/single.yml
new file mode 100644
index 0000000..0ad299d
--- /dev/null
+++ b/heka/ceilometer_collector/single.yml
@@ -0,0 +1,19 @@
+classes:
+- service.heka.ceilometer_collector.single
+- system.heka.server
+parameters:
+  heka:
+    ceilometer_collector:
+      enabled: true
+      influxdb_database: ceilometer
+      influxdb_host: ${_param:stacklight_monitor_node01_address}
+      influxdb_password: ${_param:ceilometer_influxdb_password}
+      influxdb_port: 8086
+      influxdb_username: ceilometer
+      resource_decoding: false
+      amqp_host: ${_param:cluster_vip_address}
+      amqp_port: 5672
+      amqp_user: openstack
+      amqp_password: ${_param:rabbitmq_openstack_password}
+      amqp_vhost: '/openstack'
+      amqp_queue: metering.sample
diff --git a/heka/log_collector/single.yml b/heka/log_collector/single.yml
index 73463e4..c8eb86d 100644
--- a/heka/log_collector/single.yml
+++ b/heka/log_collector/single.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.log_collector.single
+- system.heka.server
 parameters:
   heka:
     log_collector:
diff --git a/heka/metric_collector/single.yml b/heka/metric_collector/single.yml
index 960d271..443a4e9 100644
--- a/heka/metric_collector/single.yml
+++ b/heka/metric_collector/single.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.metric_collector.single
+- system.heka.server
 parameters:
   heka:
     metric_collector:
diff --git a/heka/remote_collector/cluster.yml b/heka/remote_collector/cluster.yml
index f3344c4..7669bcf 100644
--- a/heka/remote_collector/cluster.yml
+++ b/heka/remote_collector/cluster.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.remote_collector.cluster
+- system.heka.server
 parameters:
   heka:
     remote_collector:
@@ -10,6 +11,8 @@
       influxdb_password: ${_param:influxdb_password}
       aggregator_host: ${_param:heka_aggregator_host}
       aggregator_port: ${_param:aggregator_port}
+      elasticsearch_host: ${_param:heka_elasticsearch_host}
+      elasticsearch_port: ${_param:elasticsearch_port}
   keepalived:
     cluster:
       instance:
diff --git a/heka/remote_collector/input/amqp.yml b/heka/remote_collector/input/amqp.yml
new file mode 100644
index 0000000..fecd09b
--- /dev/null
+++ b/heka/remote_collector/input/amqp.yml
@@ -0,0 +1,9 @@
+parameters:
+  heka:
+    remote_collector:
+      amqp_host: ${_param:heka_amqp_host}
+      amqp_port: 5672
+      amqp_user: openstack
+      amqp_password: ${_param:rabbitmq_openstack_password}
+      amqp_vhost: '/openstack'
+      amqp_notification_topic: notifications
diff --git a/heka/remote_collector/single.yml b/heka/remote_collector/single.yml
index df33055..7b4050e 100644
--- a/heka/remote_collector/single.yml
+++ b/heka/remote_collector/single.yml
@@ -1,5 +1,6 @@
 classes:
 - service.heka.remote_collector.single
+- system.heka.server
 parameters:
   heka:
     remote_collector:
@@ -10,3 +11,5 @@
       influxdb_password: ${_param:influxdb_password}
       aggregator_host: ${_param:heka_aggregator_host}
       aggregator_port: ${_param:aggregator_port}
+      elasticsearch_host: ${_param:heka_elasticsearch_host}
+      elasticsearch_port: ${_param:elasticsearch_port}
diff --git a/heka/server.yml b/heka/server.yml
new file mode 100644
index 0000000..f82cfc5
--- /dev/null
+++ b/heka/server.yml
@@ -0,0 +1,6 @@
+parameters:
+  heka:
+    server:
+      extra_fields:
+        environment_label: ${_param:stacklight_environment}
+
diff --git a/influxdb/database/ceilometer.yml b/influxdb/database/ceilometer.yml
new file mode 100644
index 0000000..8e1d9ab
--- /dev/null
+++ b/influxdb/database/ceilometer.yml
@@ -0,0 +1,23 @@
+parameters:
+  influxdb:
+    server:
+      database:
+        ceilometer:
+          enabled: true
+          name: ceilometer
+          retention_policy:
+            - name: ceilometer
+              is_default: true
+              duration: 30d
+              replication: 1
+      user:
+        ceilometer:
+          enabled: true
+          name: ceilometer
+          password: ${_param:ceilometer_influxdb_password}
+      grant:
+        grant_ceilometer_all:
+          enabled: true
+          user: ceilometer
+          database: ceilometer
+          privilege: all
diff --git a/influxdb/server/cluster.yml b/influxdb/server/cluster.yml
deleted file mode 100644
index bfdf4d4..0000000
--- a/influxdb/server/cluster.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-classes:
-- service.influxdb.server.single
-parameters:
-  linux:
-    system:
-      repo:
-        influxdb:
-          enabled: true
-          source: 'deb https://repos.influxdata.com/ubuntu xenial stable'
-          key_url: 'https://repos.influxdata.com/influxdb.key'
-  influxdb:
-    server:
-      enabled: true
-    meta:
-      bind:
-        address: 0.0.0.0
-        port: 8088
-        http_address: 0.0.0.0
-        http_port: 8091
-    cluster:
-      members:
-        - host: idb01.local
-          port: 8091
-        - host: idb02.local
-          port: 8091
-        - host: idb03.local
-          port: 8091
diff --git a/influxdb/server/single.yml b/influxdb/server/single.yml
index 308b7be..ce76490 100644
--- a/influxdb/server/single.yml
+++ b/influxdb/server/single.yml
@@ -30,6 +30,11 @@
         lma:
           enabled: true
           name: lma
+          retention_policy:
+          - name: lma
+            is_default: true
+            duration: 30d
+            replication: 1
       user:
         lma:
           enabled: true
diff --git a/keystone/client/service/aodh.yml b/keystone/client/service/aodh.yml
new file mode 100644
index 0000000..c91a354
--- /dev/null
+++ b/keystone/client/service/aodh.yml
@@ -0,0 +1,27 @@
+parameters:
+  keystone:
+    client:
+      server:
+        identity:
+          project:
+            service:
+              user:
+                aodh:
+                  is_admin: true
+                  password: ${_param:keystone_aodh_password}
+                  email: ${_param:admin_email}
+          service:
+            aodh:
+              type: alarming
+              description: OpenStack Alarming Service
+              endpoints:
+              - region: ${_param:openstack_region}
+                public_address: ${_param:aodh_service_host}
+                public_port: 8042
+                public_path: '/'
+                internal_address: ${_param:aodh_service_host}
+                internal_port: 8042
+                internal_path: '/'
+                admin_address: ${_param:aodh_service_host}
+                admin_port: 8042
+                admin_path: '/'
\ No newline at end of file
diff --git a/kibana/server/single.yml b/kibana/server/single.yml
index e8ec886..fe0555c 100644
--- a/kibana/server/single.yml
+++ b/kibana/server/single.yml
@@ -1,11 +1,10 @@
 classes:
 - service.kibana.server.single
 parameters:
-  _param:
-    kibana_port: 5601
   kibana:
     server:
       enabled: true
+      default_app_id: "dashboard/logs"
       bind:
         address: ${_param:single_address}
         port: 5601
diff --git a/linux/system/repo/mos9.yml b/linux/system/repo/mos9.yml
index 70cb2d2..9bc7c8c 100644
--- a/linux/system/repo/mos9.yml
+++ b/linux/system/repo/mos9.yml
@@ -10,10 +10,6 @@
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-hotfix main restricted"
           architectures: amd64
           key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
-        mirantis_openstack_proposed:
-          source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-proposed main restricted"
-          architectures: amd64
-          key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/archive-mos9.0.key"
         mirantis_openstack_security:
           source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ mos9.0-security main restricted"
           architectures: amd64
diff --git a/linux/system/repo/mos9_latest.yml b/linux/system/repo/mos9_latest.yml
new file mode 100644
index 0000000..a55c8ae
--- /dev/null
+++ b/linux/system/repo/mos9_latest.yml
@@ -0,0 +1,18 @@
+parameters:
+  linux:
+    system:
+      package:
+        python-msgpack:
+          version: latest
+      repo:
+      # This repository is needed because the python-influxdb package
+      # required for Mitaka Ceilometer is only present in
+      # mos9.0-proposed from the 9.0-latest repository
+        mirantis_latest_openstack_proposed:
+          source: "deb http://mirror.fuel-infra.org/mos-repos/ubuntu/snapshots/9.0-latest/ mos9.0-proposed main"
+          architectures: amd64
+          key_url: "http://mirror.fuel-infra.org/mos-repos/ubuntu/snapshots/9.0-latest/archive-mos9.0.key"
+          pin:
+            - pin: "release a=mos9.0-proposed"
+              priority: 400
+              package: "*"
diff --git a/nagios/server/init.yml b/nagios/server/init.yml
index 49fae4d..49f4943 100644
--- a/nagios/server/init.yml
+++ b/nagios/server/init.yml
@@ -20,12 +20,16 @@
       check_service_freshness: 1
       check_host_freshness: 0
       purge_distribution_config: true
+      log_external_commands: 0
+      log_passive_checks: 0
+      log_initial_states: 1
       ui:
         enabled: true
         port: ${_param:nagios_ui_port}
-        basic_auth:
-          username: ${_param:nagios_username}
-          password: ${_param:nagios_password}
+        auth:
+          basic:
+            username: ${_param:nagios_username}
+            password: ${_param:nagios_password}
         wsgi:
           port: ${_param:nagios_status_port}
       notification:
@@ -35,6 +39,7 @@
       dynamic:
         enabled: true
         grain_hostname: 'host'
+        hostname_suffix: ${_param:stacklight_environment}
         hostgroups:
           - target: '*'
             name: All
diff --git a/nginx/server/proxy/grafana_web.yml b/nginx/server/proxy/grafana_web.yml
index 7ad1af0..a1c7c49 100644
--- a/nginx/server/proxy/grafana_web.yml
+++ b/nginx/server/proxy/grafana_web.yml
@@ -8,7 +8,7 @@
           type: nginx_proxy
           name: grafana
           proxy:
-            host: mon
+            host: ${_param:stacklight_monitor_address}
             port: 3000
             protocol: http
           host:
diff --git a/nginx/server/proxy/kibana_web.yml b/nginx/server/proxy/kibana_web.yml
index b83ae25..1120c9c 100644
--- a/nginx/server/proxy/kibana_web.yml
+++ b/nginx/server/proxy/kibana_web.yml
@@ -8,7 +8,7 @@
           type: nginx_proxy
           name: kibana
           proxy:
-            host: mon01
+            host: ${_param:stacklight_monitor_address}
             port: 5601
             protocol: http
           host:
diff --git a/nginx/server/proxy/nagios_web.yml b/nginx/server/proxy/nagios_web.yml
index d1a54f8..8b57929 100644
--- a/nginx/server/proxy/nagios_web.yml
+++ b/nginx/server/proxy/nagios_web.yml
@@ -8,8 +8,8 @@
           type: nginx_proxy
           name: nagios
           proxy:
-            host: mon01
-            port: 8001
+            host: ${_param:stacklight_monitor_address}
+            port: 80
             protocol: http
           host:
             name: ${_param:cluster_public_host}
diff --git a/nova/compute/cluster.yml b/nova/compute/cluster.yml
index a08d1af..410e358 100644
--- a/nova/compute/cluster.yml
+++ b/nova/compute/cluster.yml
@@ -3,6 +3,40 @@
 parameters:
   _param:
     nova_compute_virtualization: kvm
+    nova_compute_ssh_public: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCltIn93BcTMzNK/n2eBze6PyTkmIgdDkeXNR9X4DqE48Va80ojv2pq8xuaBxiNITJzyl+4p4UvTTXo+HmuX8qbHvqgMGXvuPUCpndEfb2r67f6vpMqPwMgBrUg2ZKgN4OsSDHU+H0dia0cEaTjz5pvbUy9lIsSyhrqOUVF9reJq+boAvVEedm8fUqiZuiejAw2D27+rRtdEPgsKMnh3626YEsr963q4rjU/JssV/iKMNu7mk2a+koOrJ+aHvcVU8zJjfA0YghoeVT/I3GLU/MB/4tD/RyR8GM+UYbI4sgAC7ZOCdQyHdJgnEzx3SJIwcS65U0T2XYvn2qXHXqJ9iGZ root@mirantis.com
+    nova_compute_ssh_private: |
+      -----BEGIN RSA PRIVATE KEY-----
+      MIIEpAIBAAKCAQEApbSJ/dwXEzMzSv59ngc3uj8k5JiIHQ5HlzUfV+A6hOPFWvNK
+      I79qavMbmgcYjSEyc8pfuKeFL0016Ph5rl/Kmx76oDBl77j1AqZ3RH29q+u3+r6T
+      Kj8DIAa1INmSoDeDrEgx1Ph9HYmtHBGk48+ab21MvZSLEsoa6jlFRfa3iavm6AL1
+      RHnZvH1KombonowMNg9u/q0bXRD4LCjJ4d+tumBLK/et6uK41PybLFf4ijDbu5pN
+      mvpKDqyfmh73FVPMyY3wNGIIaHlU/yNxi1PzAf+LQ/0ckfBjPlGGyOLIAAu2TgnU
+      Mh3SYJxM8d0iSMHEuuVNE9l2L59qlx16ifYhmQIDAQABAoIBAQCYpqbwvE5tm59H
+      GQb0C8Ykx4LfLD1INx1wiLmlJKYEQihPTw0fvXj1qZvl21+cs9ZcoTRpUbn6B3EA
+      e9bs8sYc/P75j1x46LSdimkZKZUPygkk72d3ZbElUciOyKCxBDNDBQcTIQ9xpKFa
+      2E5Ep72npNMrWqp71r/Qwo20lEIkikIgAFPBgraxn5xIEdo59vzXNZsvyoIRi5p4
+      ayH9nWSAXdF1YU3p3ljtHD8o2G/0d2TWGmjrd9vztc6tgXjp0PF60vDNgcJiudBg
+      oNLDK/e5a44GJxlVDdJ84ESb7GprRStYmddl22xnI1SXlg87+t0QQwzR0CCtWXrz
+      neXkicHhAoGBANkG9tOZfErhSL/jmsElQTNPcMNQkPiJzEmOIpr6jgSzCusPT/QD
+      PnVwB42GC5+Zhd4e88BsTzECxPXmKk7r1cBKeJTg/ejgsrSfVAZqMsfhbp3mGOiH
+      jymF+zC6Urj5q/Zkof8pEFICtyA5zlHvZmsQL9PDiqXIWALki2JvIDPdAoGBAMN2
+      O+LWOM9qqwgSMaFY8VUdDdbmLx/ZMGWQ//Tx42WM8SU+cCpGTLDHHR0qC0gnRsV7
+      V63DySEwiHn4I1cQ/AMijRxuw4Dkgk2YMRlgsAbVWO7aIlECWjSg+pRjNeA7If4D
+      5L/gu6wZIv1vu8/fvOwRpPUzhWjGN5Z0RyvYc7btAoGALNnrmL9XmIIGbuGy0cfJ
+      OblpLHQyAas4tNrS/ARb5Uy7LOj1NRCWj96fMPhK3qjzqXvsFBBOLWrNGaR/id/j
+      ROIfGWWGE+KcDAgBbXH1HKnSGn+7FhMt2v79coyPG/s9NqaFdB4gaVJ2VgqcQQKg
+      v++QcssulCRbS/2/cJBWr2ECgYAJFCDL9G9HEwlGorGzcNIkxeiyppZhwFDDJuz8
+      j4+kU9uPg0rqa8F8JINxq1ZCz7A10/jKlWFuLTbpk2Dw1lUeQCiVvX9PKU30FLGT
+      IC6M4rPyxCb75EQUVbXN1p3WAGkfx0aEsweEgtZhNyNeEGJSBK/Iw8/agfpq/pOf
+      sboOMQKBgQClKmrAYKWnwdPPka3msyjl/AXDruR4XFvMlOPKbs3nYstolE7eR94F
+      7xDyBz85icFU0rceYQetwFH2p5tRL0GcUQhJmJFgIL0OXdCQvRNJrT3iS00N1aUo
+      SG9MrLHCd5l60aCUQg0UA5ed7Hd6SA314k+HwxJno9/wJ+voBeacMg==
+      -----END RSA PRIVATE KEY-----
+  openssh:
+    client:
+      enabled: True
+      user: {}
+      stricthostkeychecking: False
   nova:
     compute:
       version: ${_param:nova_version}
@@ -51,3 +85,6 @@
         user: neutron
         tenant: service
         password: ${_param:keystone_neutron_password}
+      user:
+        public_key: ${_param:nova_compute_ssh_public}
+        private_key: ${_param:nova_compute_ssh_private}
diff --git a/nova/compute/single.yml b/nova/compute/single.yml
index 5fa45e4..4ac99b1 100644
--- a/nova/compute/single.yml
+++ b/nova/compute/single.yml
@@ -3,6 +3,41 @@
 classes:
 - service.nova.compute.kvm
 parameters:
+  _param:
+    nova_compute_ssh_public: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCltIn93BcTMzNK/n2eBze6PyTkmIgdDkeXNR9X4DqE48Va80ojv2pq8xuaBxiNITJzyl+4p4UvTTXo+HmuX8qbHvqgMGXvuPUCpndEfb2r67f6vpMqPwMgBrUg2ZKgN4OsSDHU+H0dia0cEaTjz5pvbUy9lIsSyhrqOUVF9reJq+boAvVEedm8fUqiZuiejAw2D27+rRtdEPgsKMnh3626YEsr963q4rjU/JssV/iKMNu7mk2a+koOrJ+aHvcVU8zJjfA0YghoeVT/I3GLU/MB/4tD/RyR8GM+UYbI4sgAC7ZOCdQyHdJgnEzx3SJIwcS65U0T2XYvn2qXHXqJ9iGZ root@mirantis.com
+    nova_compute_ssh_private: |
+      -----BEGIN RSA PRIVATE KEY-----
+      MIIEpAIBAAKCAQEApbSJ/dwXEzMzSv59ngc3uj8k5JiIHQ5HlzUfV+A6hOPFWvNK
+      I79qavMbmgcYjSEyc8pfuKeFL0016Ph5rl/Kmx76oDBl77j1AqZ3RH29q+u3+r6T
+      Kj8DIAa1INmSoDeDrEgx1Ph9HYmtHBGk48+ab21MvZSLEsoa6jlFRfa3iavm6AL1
+      RHnZvH1KombonowMNg9u/q0bXRD4LCjJ4d+tumBLK/et6uK41PybLFf4ijDbu5pN
+      mvpKDqyfmh73FVPMyY3wNGIIaHlU/yNxi1PzAf+LQ/0ckfBjPlGGyOLIAAu2TgnU
+      Mh3SYJxM8d0iSMHEuuVNE9l2L59qlx16ifYhmQIDAQABAoIBAQCYpqbwvE5tm59H
+      GQb0C8Ykx4LfLD1INx1wiLmlJKYEQihPTw0fvXj1qZvl21+cs9ZcoTRpUbn6B3EA
+      e9bs8sYc/P75j1x46LSdimkZKZUPygkk72d3ZbElUciOyKCxBDNDBQcTIQ9xpKFa
+      2E5Ep72npNMrWqp71r/Qwo20lEIkikIgAFPBgraxn5xIEdo59vzXNZsvyoIRi5p4
+      ayH9nWSAXdF1YU3p3ljtHD8o2G/0d2TWGmjrd9vztc6tgXjp0PF60vDNgcJiudBg
+      oNLDK/e5a44GJxlVDdJ84ESb7GprRStYmddl22xnI1SXlg87+t0QQwzR0CCtWXrz
+      neXkicHhAoGBANkG9tOZfErhSL/jmsElQTNPcMNQkPiJzEmOIpr6jgSzCusPT/QD
+      PnVwB42GC5+Zhd4e88BsTzECxPXmKk7r1cBKeJTg/ejgsrSfVAZqMsfhbp3mGOiH
+      jymF+zC6Urj5q/Zkof8pEFICtyA5zlHvZmsQL9PDiqXIWALki2JvIDPdAoGBAMN2
+      O+LWOM9qqwgSMaFY8VUdDdbmLx/ZMGWQ//Tx42WM8SU+cCpGTLDHHR0qC0gnRsV7
+      V63DySEwiHn4I1cQ/AMijRxuw4Dkgk2YMRlgsAbVWO7aIlECWjSg+pRjNeA7If4D
+      5L/gu6wZIv1vu8/fvOwRpPUzhWjGN5Z0RyvYc7btAoGALNnrmL9XmIIGbuGy0cfJ
+      OblpLHQyAas4tNrS/ARb5Uy7LOj1NRCWj96fMPhK3qjzqXvsFBBOLWrNGaR/id/j
+      ROIfGWWGE+KcDAgBbXH1HKnSGn+7FhMt2v79coyPG/s9NqaFdB4gaVJ2VgqcQQKg
+      v++QcssulCRbS/2/cJBWr2ECgYAJFCDL9G9HEwlGorGzcNIkxeiyppZhwFDDJuz8
+      j4+kU9uPg0rqa8F8JINxq1ZCz7A10/jKlWFuLTbpk2Dw1lUeQCiVvX9PKU30FLGT
+      IC6M4rPyxCb75EQUVbXN1p3WAGkfx0aEsweEgtZhNyNeEGJSBK/Iw8/agfpq/pOf
+      sboOMQKBgQClKmrAYKWnwdPPka3msyjl/AXDruR4XFvMlOPKbs3nYstolE7eR94F
+      7xDyBz85icFU0rceYQetwFH2p5tRL0GcUQhJmJFgIL0OXdCQvRNJrT3iS00N1aUo
+      SG9MrLHCd5l60aCUQg0UA5ed7Hd6SA314k+HwxJno9/wJ+voBeacMg==
+      -----END RSA PRIVATE KEY-----
+  openssh:
+    client:
+      enabled: True
+      user: {}
+      stricthostkeychecking: False
   nova:
     compute:
       version: ${_param:nova_version}
@@ -48,4 +83,6 @@
         members:
         - host: 127.0.0.1
           port: 11211
-
+      user:
+        public_key: ${_param:nova_compute_ssh_public}
+        private_key: ${_param:nova_compute_ssh_private}
diff --git a/reclass/storage/system/openstack_compute_multi.yml b/reclass/storage/system/openstack_compute_multi.yml
index 572a6bf..82f465a 100644
--- a/reclass/storage/system/openstack_compute_multi.yml
+++ b/reclass/storage/system/openstack_compute_multi.yml
@@ -10,6 +10,7 @@
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
+            single_address: 172.16.10.105
         openstack_compute_node02:
           name: cmp02
           domain: ${_param:cluster_domain}
@@ -18,3 +19,4 @@
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: trusty
+            single_address: 172.16.10.106
diff --git a/reclass/storage/system/stacklight_server_single.yml b/reclass/storage/system/stacklight_server_single.yml
index c931e89..c2237f1 100644
--- a/reclass/storage/system/stacklight_server_single.yml
+++ b/reclass/storage/system/stacklight_server_single.yml
@@ -9,6 +9,7 @@
           - cluster.${_param:cluster_name}.stacklight.server
           - system.elasticsearch.client.single
           - system.grafana.client.single
+          - system.kibana.client.single
           params:
             salt_master_host: ${_param:reclass_config_master}
             linux_system_codename: xenial
diff --git a/rsyslog/client/single.yml b/rsyslog/client/single.yml
new file mode 100644
index 0000000..bf957d0
--- /dev/null
+++ b/rsyslog/client/single.yml
@@ -0,0 +1,2 @@
+classes:
+- service.rsyslog.client.single
diff --git a/salt/master/formula/git/openstack.yml b/salt/master/formula/git/openstack.yml
index 17c40e9..f34b9b1 100644
--- a/salt/master/formula/git/openstack.yml
+++ b/salt/master/formula/git/openstack.yml
@@ -4,6 +4,10 @@
       environment:
         dev:
           formula:
+            aodh:
+              source: git
+              address: 'https://github.com/openstack/salt-formula-aodh.git'
+              revision: ${_param:salt_master_environment_revision}
             ceilometer:
               source: git
               address: 'https://github.com/openstack/salt-formula-ceilometer.git'
diff --git a/salt/master/formula/git/stacklight.yml b/salt/master/formula/git/stacklight.yml
index b72b00b..ed07d82 100644
--- a/salt/master/formula/git/stacklight.yml
+++ b/salt/master/formula/git/stacklight.yml
@@ -71,6 +71,9 @@
               address: '${_param:salt_master_environment_repository}/salt-formula-redis.git'
               revision: ${_param:salt_master_environment_revision}
             rsyslog:
+              module:
+                rsyslog_util.py:
+                  enabled: true
               source: git
               address: '${_param:salt_master_environment_repository}/salt-formula-rsyslog.git'
               revision: ${_param:salt_master_environment_revision}