Merge remote-tracking branch 'target/master'
diff --git a/ceilometer/server/cluster.yml b/ceilometer/server/cluster.yml
index 005379d..2b2030c 100644
--- a/ceilometer/server/cluster.yml
+++ b/ceilometer/server/cluster.yml
@@ -8,6 +8,7 @@
     server:
       enabled: true
       version: ${_param:ceilometer_version}
+      region: ${_param: openstack_region}
       cluster: true
       secret: ${_param:ceilometer_secret_key}
       ttl: 86400
diff --git a/designate/server/cluster.yml b/designate/server/cluster.yml
new file mode 100644
index 0000000..573ac66
--- /dev/null
+++ b/designate/server/cluster.yml
@@ -0,0 +1,59 @@
+classes:
+- service.designate.server.cluster
+- service.keepalived.cluster.single
+- system.haproxy.proxy.listen.openstack.designate
+- service.haproxy.proxy.single
+parameters:
+  designate:
+    _support:
+      sensu:
+        enabled: false
+    server:
+      enabled: true
+      local_bind: true
+      region: ${_param:openstack_region}
+      domain_id: ${_param:designate_domain_id}
+      version: ${_param:designate_version}
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name:
+          main_database: designate
+          pool_manager: designate_pool_manager
+        user: designate
+        password: ${_param:mysql_designate_password}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: designate
+        password: ${_param:keystone_designate_password}
+      bind:
+        api:
+          address: ${_param:single_address}
+      message_queue:
+        engine: rabbitmq
+        port: 5672
+        members:
+        - host: ${_param:openstack_message_queue_node01_address}
+        - host: ${_param:openstack_message_queue_node02_address}
+        - host: ${_param:openstack_message_queue_node03_address}
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
+      pool:
+        pool_id: ${_param:designate_pool_id}
+        nameservers:
+          - uuid: ${_param:designate_node1_uuid}
+            host: ${_param:cluster_node01_address}
+            port: 53
+          - uuid: ${_param:designate_node2_uuid}
+            host: ${_param:cluster_node02_address}
+            port: 53
+        targets:
+          uuid: ${_param:designate_target_uuid}
+          options: 'port: 53, host: 127.0.0.1'
+          masters: 127.0.0.1:5354
+          type:  ${_param:designate_target_type}
diff --git a/designate/server/single.yml b/designate/server/single.yml
new file mode 100644
index 0000000..8805d53
--- /dev/null
+++ b/designate/server/single.yml
@@ -0,0 +1,37 @@
+classes:
+- service.designate.server.single
+- service.haproxy.proxy.single
+parameters:
+  designate:
+    server:
+      enabled: true
+      local_bind: true
+      region: ${_param:openstack_region}
+      domain_id: ${_param:designate_domain_id}
+      version: ${_param:designate_version}
+      bind:
+        api:
+          address: ${_param:single_address}
+      database:
+        engine: mysql
+        host: ${_param:openstack_database_address}
+        port: 3306
+        name:
+          main_database: designate
+          pool_manager: designate_pool_manager
+        user: designate
+        password: ${_param:mysql_designate_password}
+      identity:
+        engine: keystone
+        host: ${_param:openstack_control_address}
+        port: 35357
+        tenant: service
+        user: designate
+        password: ${_param:keystone_designate_password}
+      message_queue:
+        engine: rabbitmq
+        host: ${_param:cluster_vip_address}
+        port: 5672
+        user: openstack
+        password: ${_param:rabbitmq_openstack_password}
+        virtual_host: '/openstack'
\ No newline at end of file
diff --git a/grafana/server/plugin/piechart.yml b/grafana/server/plugin/piechart.yml
new file mode 100644
index 0000000..090872c
--- /dev/null
+++ b/grafana/server/plugin/piechart.yml
@@ -0,0 +1,6 @@
+parameters:
+  grafana:
+    server:
+      plugins:
+        grafana-piechart-panel:
+          enabled: true
diff --git a/haproxy/proxy/listen/openstack/designate.yml b/haproxy/proxy/listen/openstack/designate.yml
new file mode 100644
index 0000000..4dd387e
--- /dev/null
+++ b/haproxy/proxy/listen/openstack/designate.yml
@@ -0,0 +1,23 @@
+parameters:
+  haproxy:
+    proxy:
+      listen:
+        designate_api:
+          type: openstack-service
+          service_name: designate
+          binds:
+          - address: ${_param:cluster_vip_address}
+            port: 9001
+          servers:
+          - name: ${_param:cluster_node01_hostname}
+            host: ${_param:cluster_node01_address}
+            port: 9001
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node02_hostname}
+            host: ${_param:cluster_node02_address}
+            port: 9001
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+          - name: ${_param:cluster_node03_hostname}
+            host: ${_param:cluster_node03_address}
+            port: 9001
+            params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
\ No newline at end of file
diff --git a/heka/ceilometer_collector/output/sensu.yml b/heka/ceilometer_collector/output/sensu.yml
new file mode 100644
index 0000000..56dee92
--- /dev/null
+++ b/heka/ceilometer_collector/output/sensu.yml
@@ -0,0 +1,3 @@
+classes:
+- service.heka.ceilometer_collector.output.sensu
+
diff --git a/heka/log_collector/output/sensu.yml b/heka/log_collector/output/sensu.yml
new file mode 100644
index 0000000..e7bf79d
--- /dev/null
+++ b/heka/log_collector/output/sensu.yml
@@ -0,0 +1,3 @@
+classes:
+- service.heka.log_collector.output.sensu
+
diff --git a/heka/metric_collector/output/sensu.yml b/heka/metric_collector/output/sensu.yml
new file mode 100644
index 0000000..3143fd9
--- /dev/null
+++ b/heka/metric_collector/output/sensu.yml
@@ -0,0 +1,3 @@
+classes:
+- service.heka.metric_collector.output.sensu
+
diff --git a/heka/remote_collector/output/sensu.yml b/heka/remote_collector/output/sensu.yml
new file mode 100644
index 0000000..c7c66e9
--- /dev/null
+++ b/heka/remote_collector/output/sensu.yml
@@ -0,0 +1,3 @@
+classes:
+- service.heka.remote_collector.output.sensu
+
diff --git a/keystone/client/service/designate.yml b/keystone/client/service/designate.yml
index 4d95b2e..4018712 100644
--- a/keystone/client/service/designate.yml
+++ b/keystone/client/service/designate.yml
@@ -12,19 +12,19 @@
                   is_admin: true
                   password: ${_param:keystone_designate_password}
                   email: ${_param:admin_email}
-    service:
-      designate:
-          type: dns
-          description: OpenStack DNS service
-          endpoints:
-            - region: ${_param:openstack_region}
-              public_address: ${_param:cluster_public_host}
-              public_protocol: ${_param:cluster_public_protocol}
-              public_port: 9001
-              public_path: '/'
-              internal_address: ${_param:designate_service_host}
-              internal_port: 9001
-              internal_path: '/'
-              admin_address: ${_param:designate_service_host}
-              admin_port: 9001
-              admin_path: '/'
+          service:
+            designate:
+                type: dns
+                description: OpenStack DNS service
+                endpoints:
+                  - region: ${_param:openstack_region}
+                    public_address: ${_param:cluster_public_host}
+                    public_protocol: ${_param:cluster_public_protocol}
+                    public_port: 9001
+                    public_path: '/'
+                    internal_address: ${_param:designate_service_host}
+                    internal_port: 9001
+                    internal_path: '/'
+                    admin_address: ${_param:designate_service_host}
+                    admin_port: 9001
+                    admin_path: '/'
diff --git a/mysql/client/database/designate.yml b/mysql/client/database/designate.yml
new file mode 100644
index 0000000..cee6ff1
--- /dev/null
+++ b/mysql/client/database/designate.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            designate:
+              encoding: utf8
+              users:
+              - name: designate
+                password: ${_param:mysql_designate_password}
+                host: '%'
+                rights: all
+              - name: designate
+                password: ${_param:mysql_designate_password}
+                host: ${_param:single_address}
+                rights: all
\ No newline at end of file
diff --git a/mysql/client/database/designate_pool_manager.yml b/mysql/client/database/designate_pool_manager.yml
new file mode 100644
index 0000000..6913bd4
--- /dev/null
+++ b/mysql/client/database/designate_pool_manager.yml
@@ -0,0 +1,17 @@
+parameters:
+  mysql:
+    client:
+      server:
+        database:
+          database:
+            designate_pool_manager:
+              encoding: utf8
+              users:
+              - name: designate
+                password: ${_param:mysql_designate_password}
+                host: '%'
+                rights: all
+              - name: designate
+                password: ${_param:mysql_designate_password}
+                host: ${_param:single_address}
+                rights: all
diff --git a/nginx/server/proxy/openstack/designate.yml b/nginx/server/proxy/openstack/designate.yml
new file mode 100644
index 0000000..2b8ffce
--- /dev/null
+++ b/nginx/server/proxy/openstack/designate.yml
@@ -0,0 +1,19 @@
+  parameters:
+  _param:
+    nginx_proxy_openstack_api_host: ${_param:cluster_public_host}
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_openstack_api_designate:
+          enabled: true
+          type: nginx_proxy
+          name: openstack_api_designate
+          proxy:
+            host: ${_param:nginx_proxy_openstack_api_proxy_host}
+            port: 9001
+            protocol: http
+          host:
+            name: ${_param:nginx_proxy_openstack_api_host}
+            port: 9001
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/opencontrail/client/resource/analytics_node.yml b/opencontrail/client/resource/analytics_node.yml
new file mode 100644
index 0000000..424c88a
--- /dev/null
+++ b/opencontrail/client/resource/analytics_node.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    opencontrail_analytics_node01_hostname: nal01
+    opencontrail_analytics_node02_hostname: nal02
+    opencontrail_analytics_node03_hostname: nal03
+  opencontrail:
+    client:
+      analytics_node:
+        member01:
+          name: ${_param:opencontrail_analytics_node01_hostname}
+          ip_address: ${_param:cluster_node01_address}
+        member02:
+          name: ${_param:opencontrail_analytics_node02_hostname}
+          ip_address: ${_param:cluster_node02_address}
+        member03:
+          name: ${_param:opencontrail_analytics_node03_hostname}
+          ip_address: ${_param:cluster_node03_address}
diff --git a/opencontrail/client/resource/config_node.yml b/opencontrail/client/resource/config_node.yml
new file mode 100644
index 0000000..2e6802c
--- /dev/null
+++ b/opencontrail/client/resource/config_node.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+  opencontrail:
+    client:
+      config_node:
+        member01:
+          name: ${_param:opencontrail_control_node01_hostname}
+          ip_address: ${_param:cluster_node01_address}
+        member02:
+          name: ${_param:opencontrail_control_node02_hostname}
+          ip_address: ${_param:cluster_node02_address}
+        member03:
+          name: ${_param:opencontrail_control_node03_hostname}
+          ip_address: ${_param:cluster_node03_address}
diff --git a/opencontrail/client/resource/database_node.yml b/opencontrail/client/resource/database_node.yml
new file mode 100644
index 0000000..508dff0
--- /dev/null
+++ b/opencontrail/client/resource/database_node.yml
@@ -0,0 +1,17 @@
+parameters:
+  _param:
+    opencontrail_control_node01_hostname: ntw01
+    opencontrail_control_node02_hostname: ntw02
+    opencontrail_control_node03_hostname: ntw03
+  opencontrail:
+    client:
+      database_node:
+        member01:
+          name: ${_param:opencontrail_control_node01_hostname}
+          ip_address: ${_param:cluster_node01_address}
+        member02:
+          name: ${_param:opencontrail_control_node02_hostname}
+          ip_address: ${_param:cluster_node02_address}
+        member03:
+          name: ${_param:opencontrail_control_node03_hostname}
+          ip_address: ${_param:cluster_node03_address}
diff --git a/opencontrail/client/resource/virtual_router.yml b/opencontrail/client/resource/virtual_router.yml
new file mode 100644
index 0000000..0333c8f
--- /dev/null
+++ b/opencontrail/client/resource/virtual_router.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    contrail_compute_dpdk_enabled: False
+  opencontrail:
+    client:
+      virtual_router:
+        local_compute:
+          name: ${linux:system:name}
+          ip_address: ${_param:single_address}
+          dpdk_enabled: ${_param:contrail_compute_dpdk_enabled}
\ No newline at end of file
diff --git a/opencontrail/client/single.yml b/opencontrail/client/single.yml
new file mode 100644
index 0000000..4f92c86
--- /dev/null
+++ b/opencontrail/client/single.yml
@@ -0,0 +1,11 @@
+parameters:
+  opencontrail:
+    client:
+      identity:
+        user: admin
+        project: admin
+        password: ${_param:keystone_admin_password}
+        host: ${_param:openstack_control_address}
+      config:
+        host: ${_param:opencontrail_control_address}
+        port: 8082
diff --git a/opencontrail/compute/dpdk.yml b/opencontrail/compute/dpdk.yml
index 47464b6..b0d8e0c 100644
--- a/opencontrail/compute/dpdk.yml
+++ b/opencontrail/compute/dpdk.yml
@@ -1,11 +1,13 @@
 parameters:
+  _param:
+    contrail_compute_dpdk_enabled: True
   nova:
     compute:
       libvirt_service: libvirt-bin
   opencontrail:
     compute:
       dpdk:
-        enabled: true
+        enabled: ${_param:contrail_compute_dpdk_enabled}
         taskset: "${_param:compute_vrouter_taskset}"
         socket_mem: "${_param:compute_vrouter_socket_mem}"
       interface:
diff --git a/reclass/storage/system/openstack_dns_cluster.yml b/reclass/storage/system/openstack_dns_cluster.yml
new file mode 100644
index 0000000..d134c88
--- /dev/null
+++ b/reclass/storage/system/openstack_dns_cluster.yml
@@ -0,0 +1,27 @@
+parameters:
+  _param:
+    openstack_dns_node01_hostname: dns01
+    openstack_dns_node02_hostname: dns02
+  reclass:
+    storage:
+      node:
+        openstack_dns_node01:
+          name: ${_param:openstack_dns_node01_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.dns
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: trusty
+            single_address: ${_param:openstack_dns_node01_address}
+            keepalived_vip_priority: 110
+        openstack_dns_node02:
+          name: ${_param:openstack_dns_node02_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.openstack.dns
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename: trusty
+            single_address: ${_param:openstack_dns_node02_address}
+            keepalived_vip_priority: 111
diff --git a/salt/control/cluster/openstack_dns_cluster.yml b/salt/control/cluster/openstack_dns_cluster.yml
new file mode 100644
index 0000000..96937d9
--- /dev/null
+++ b/salt/control/cluster/openstack_dns_cluster.yml
@@ -0,0 +1,22 @@
+parameters:
+  salt:
+    control:
+      size:
+        openstack.dns:
+          cpu: 2
+          ram: 4096
+          disk_profile: small
+          net_profile: default
+      cluster:
+        internal:
+          domain: ${_param:cluster_domain}
+          engine: virt
+          node:
+            dns01:
+              provider: kvm01.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.control
+            dns02:
+              provider: kvm02.${_param:cluster_domain}
+              image: ${_param:salt_control_xenial_image}
+              size: openstack.control