Merge "Add process checks for Ceilometer"
diff --git a/.gitreview b/.gitreview
deleted file mode 100644
index a9eba8d..0000000
--- a/.gitreview
+++ /dev/null
@@ -1,4 +0,0 @@
-[gerrit]
-host=gerrit.mcp.mirantis.net
-port=29418
-project=salt-formulas/ceilometer.git
diff --git a/.kitchen.travis.yml b/.kitchen.travis.yml
new file mode 100644
index 0000000..0c0fef8
--- /dev/null
+++ b/.kitchen.travis.yml
@@ -0,0 +1,6 @@
+suites:
+
+  - name: <%= ENV['SUITE'] %>
+    provisioner:
+      pillars-from-files:
+        ceilometer.sls: tests/pillar/<%= ENV['SUITE'] %>.sls
diff --git a/.kitchen.yml b/.kitchen.yml
index a12d27d..8a6a314 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -33,9 +33,9 @@
   sudo: true
 
 platforms:
-  - name: ubuntu-xenial
+  - name: <%=ENV['PLATFORM'] || 'ubuntu-xenial'%>
     driver_config:
-      image: trevorj/salty-whales:xenial
+      image: <%=ENV['PLATFORM'] || 'trevorj/salty-whales:xenial'%>
       platform: ubuntu
 
 suites:
diff --git a/.travis.yml b/.travis.yml
index 4f34af2..5589b31 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,16 +17,17 @@
   - bundle install
 
 env:
-    - PLATFORM=trevorj/salty-whales:trusty
-    - PLATFORM=trevorj/salty-whales:xenial
-
+    - PLATFORM=trevorj/salty-whales:xenial SUITE=agent_cluster
+    - PLATFORM=trevorj/salty-whales:xenial SUITE=agent_single
+    - PLATFORM=trevorj/salty-whales:xenial SUITE=server_cluster
+    - PLATFORM=trevorj/salty-whales:xenial SUITE=server_single
 
 before_script:
   - set -o pipefail
   - make test | tail
 
 script:
-  - test ! -e .kitchen.yml || bundle exec kitchen test -t tests/integration
+  - KITCHEN_LOCAL_YAML=.kitchen.travis.yml bundle exec kitchen test -t tests/integration
 
 notifications:
   webhooks:
diff --git a/README.rst b/README.rst
index f5dc16d..44e9150 100644
--- a/README.rst
+++ b/README.rst
@@ -43,6 +43,22 @@
           password: pwd
           virtual_host: '/openstack'
 
+Enable CORS parameters
+------------------------------
+
+.. code-block:: yaml
+
+    ceilometer:
+      server:
+        cors:
+          allowed_origin: https:localhost.local,http:localhost.local
+          expose_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
+          allow_methods: GET,PUT,POST,DELETE,PATCH
+          allow_headers: X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
+          allow_credentials: True
+          max_age: 86400
+
+
 Configuration of policy.json file
 ---------------------------------
 
diff --git a/ceilometer/files/mitaka/ceilometer-server.conf.Debian b/ceilometer/files/mitaka/ceilometer-server.conf.Debian
index 2d8f6e0..f746b4d 100644
--- a/ceilometer/files/mitaka/ceilometer-server.conf.Debian
+++ b/ceilometer/files/mitaka/ceilometer-server.conf.Debian
@@ -86,6 +86,20 @@
 # option. (string value)
 #control_exchange = openstack
 
+# List of pollsters (or wildcard templates) to be used while polling
+#pollster_list =
+{%- if server.pollster_list is defined %}
+pollster_list = {{ server.pollster_list }}
+{%- endif %}
+
+# To reduce polling agent load, samples are sent to the notification
+# agent in a batch. To gain higher throughput at the cost of load set
+# this to False.
+#batch_polled_samples = True
+{%- if server.batch_polled_samples is defined %}
+batch_polled_samples = {{ server.batch_polled_samples|lower }}
+{%- endif %}
+
 [alarm]
 
 #
@@ -665,3 +679,49 @@
 # Disables X.509 certificate validation when an SSL connection
 # to Identity Service is established. (boolean value)
 #insecure=false
+
+
+[cors]
+#
+# From oslo.middleware
+#
+
+# Indicate whether this resource may be shared with the domain received in the
+# requests "origin" header. (list value)
+#allowed_origin = <None>
+{% if server.get('cors', {}).allowed_origin is defined %}
+allowed_origin = {{ server.cors.allowed_origin }}
+{% endif %}
+
+# Indicate that the actual request can include user credentials (boolean value)
+#allow_credentials = true
+{% if server.get('cors', {}).allow_credentials is defined %}
+allow_credentials = {{ server.cors.allow_credentials }}
+{% endif %}
+
+# Indicate which headers are safe to expose to the API. Defaults to HTTP Simple
+# Headers. (list value)
+#expose_headers = X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token
+{% if server.get('cors', {}).expose_headers is defined %}
+expose_headers = {{ server.cors.expose_headers }}
+{% endif %}
+
+# Maximum cache age of CORS preflight requests. (integer value)
+#max_age = 3600
+{% if server.get('cors', {}).max_age is defined %}
+max_age = {{ server.cors.max_age }}
+{% endif %}
+
+
+# Indicate which methods can be used during the actual request. (list value)
+#allow_methods = GET,PUT,POST,DELETE,PATCH
+{% if server.get('cors', {}).allow_methods is defined %}
+allow_methods = {{ server.cors.allow_methods }}
+{% endif %}
+
+# Indicate which header field names may be used during the actual request.
+# (list value)
+#allow_headers = X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token,X-Project-Id,X-Project-Name,X-Project-Domain-Id,X-Project-Domain-Name,X-Domain-Id,X-Domain-Name
+{% if server.get('cors', {}).allow_headers is defined %}
+allow_headers = {{ server.cors.allow_headers }}
+{% endif %}
diff --git a/ceilometer/files/newton/ceilometer-agent.conf.Debian b/ceilometer/files/newton/ceilometer-agent.conf.Debian
index df0d8e2..3c8df67 100644
--- a/ceilometer/files/newton/ceilometer-agent.conf.Debian
+++ b/ceilometer/files/newton/ceilometer-agent.conf.Debian
@@ -978,7 +978,7 @@
 project_name = {{ agent.identity.tenant }}
 username = {{ agent.identity.user }}
 password = {{ agent.identity.password }}
-auth_uri=http://{{ agent.identity.host }}:5000/v3
+auth_url=http://{{ agent.identity.host }}:5000/v3
 token_cache_time = -1
 interface=internalURL
 region_name={{ agent.get('region', 'RegionOne') }}
\ No newline at end of file
diff --git a/ceilometer/files/newton/ceilometer-server.conf.Debian b/ceilometer/files/newton/ceilometer-server.conf.Debian
index c98713e..82e1deb 100644
--- a/ceilometer/files/newton/ceilometer-server.conf.Debian
+++ b/ceilometer/files/newton/ceilometer-server.conf.Debian
@@ -222,6 +222,19 @@
 # value means endless wait. (integer value)
 #graceful_shutdown_timeout = 60
 
+# List of pollsters (or wildcard templates) to be used while polling
+#pollster_list =
+{%- if server.pollster_list is defined %}
+pollster_list = {{ server.pollster_list }}
+{%- endif %}
+
+# To reduce polling agent load, samples are sent to the notification
+# agent in a batch. To gain higher throughput at the cost of load set
+# this to False.
+#batch_polled_samples = True
+{%- if server.batch_polled_samples is defined %}
+batch_polled_samples = {{ server.batch_polled_samples|lower }}
+{%- endif %}
 
 [cors]
 
@@ -232,23 +245,41 @@
 # Indicate whether this resource may be shared with the domain received in the
 # requests "origin" header. (list value)
 #allowed_origin = <None>
+{% if server.get('cors', {}).allowed_origin is defined %}
+allowed_origin = {{ server.cors.allowed_origin }}
+{% endif %}
 
 # Indicate that the actual request can include user credentials (boolean value)
 #allow_credentials = true
+{% if server.get('cors', {}).allow_credentials is defined %}
+allow_credentials = {{ server.cors.allow_credentials }}
+{% endif %}
 
 # Indicate which headers are safe to expose to the API. Defaults to HTTP Simple
 # Headers. (list value)
 #expose_headers = Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+{% if server.get('cors', {}).expose_headers is defined %}
+expose_headers = {{ server.cors.expose_headers }}
+{% endif %}
 
 # Maximum cache age of CORS preflight requests. (integer value)
 #max_age = 3600
+{% if server.get('cors', {}).max_age is defined %}
+max_age = {{ server.cors.max_age }}
+{% endif %}
 
 # Indicate which methods can be used during the actual request. (list value)
 #allow_methods = GET,POST,PUT,DELETE,OPTIONS
+{% if server.get('cors', {}).allow_methods is defined %}
+allow_methods = {{ server.cors.allow_methods }}
+{% endif %}
 
 # Indicate which header field names may be used during the actual request.
 # (list value)
 #allow_headers = Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+{% if server.get('cors', {}).allow_headers is defined %}
+allow_headers = {{ server.cors.allow_headers }}
+{% endif %}
 
 
 [cors.subdomain]
@@ -1001,7 +1032,7 @@
 project_name = {{ server.identity.tenant }}
 username = {{ server.identity.user }}
 password = {{ server.identity.password }}
-auth_uri=http://{{ server.identity.host }}:5000/v3
+auth_url=http://{{ server.identity.host }}:5000/v3
 token_cache_time = -1
 interface=internalURL
 region_name={{ server.get('region', 'RegionOne') }}
\ No newline at end of file
diff --git a/ceilometer/files/ocata/ceilometer-api.apache2.conf.Debian b/ceilometer/files/newton/ceilometer.apache2.conf.Debian
similarity index 100%
copy from ceilometer/files/ocata/ceilometer-api.apache2.conf.Debian
copy to ceilometer/files/newton/ceilometer.apache2.conf.Debian
diff --git a/ceilometer/files/ocata/ceilometer-server.conf.Debian b/ceilometer/files/ocata/ceilometer-server.conf.Debian
index 78c6462..0316403 100644
--- a/ceilometer/files/ocata/ceilometer-server.conf.Debian
+++ b/ceilometer/files/ocata/ceilometer-server.conf.Debian
@@ -474,6 +474,19 @@
 # value means endless wait. (integer value)
 #graceful_shutdown_timeout = 60
 
+# List of pollsters (or wildcard templates) to be used while polling
+#pollster_list =
+{%- if server.pollster_list is defined %}
+pollster_list = {{ server.pollster_list }}
+{%- endif %}
+
+# To reduce polling agent load, samples are sent to the notification
+# agent in a batch. To gain higher throughput at the cost of load set
+# this to False.
+#batch_polled_samples = True
+{%- if server.batch_polled_samples is defined %}
+batch_polled_samples = {{ server.batch_polled_samples|lower }}
+{%- endif %}
 
 [api]
 
@@ -614,23 +627,41 @@
 # requests "origin" header. Format: "<protocol>://<host>[:<port>]", no trailing
 # slash. Example: https://horizon.example.com (list value)
 #allowed_origin = <None>
+{% if server.get('cors', {}).allowed_origin is defined %}
+allowed_origin = {{ server.cors.allowed_origin }}
+{% endif %}
 
 # Indicate that the actual request can include user credentials (boolean value)
 #allow_credentials = true
+{% if server.get('cors', {}).allow_credentials is defined %}
+allow_credentials = {{ server.cors.allow_credentials }}
+{% endif %}
 
 # Indicate which headers are safe to expose to the API. Defaults to HTTP Simple
 # Headers. (list value)
 #expose_headers = X-Auth-Token,X-Subject-Token,X-Service-Token,X-Openstack-Request-Id
+{% if server.get('cors', {}).expose_headers is defined %}
+expose_headers = {{ server.cors.expose_headers }}
+{% endif %}
 
 # Maximum cache age of CORS preflight requests. (integer value)
 #max_age = 3600
+{% if server.get('cors', {}).max_age is defined %}
+max_age = {{ server.cors.max_age }}
+{% endif %}
 
 # Indicate which methods can be used during the actual request. (list value)
 #allow_methods = GET,PUT,POST,DELETE,PATCH
+{% if server.get('cors', {}).allow_methods is defined %}
+allow_methods = {{ server.cors.allow_methods }}
+{% endif %}
 
 # Indicate which header field names may be used during the actual request.
 # (list value)
 #allow_headers = X-Auth-Token,X-Identity-Status,X-Roles,X-Service-Catalog,X-User-Id,X-Tenant-Id,X-Openstack-Request-Id
+{% if server.get('cors', {}).allow_headers is defined %}
+allow_headers = {{ server.cors.allow_headers }}
+{% endif %}
 
 
 [cors.subdomain]
diff --git a/ceilometer/files/ocata/ceilometer-api.apache2.conf.Debian b/ceilometer/files/ocata/ceilometer.apache2.conf.Debian
similarity index 100%
rename from ceilometer/files/ocata/ceilometer-api.apache2.conf.Debian
rename to ceilometer/files/ocata/ceilometer.apache2.conf.Debian
diff --git a/ceilometer/map.jinja b/ceilometer/map.jinja
index 9dd00c2..6f40616 100644
--- a/ceilometer/map.jinja
+++ b/ceilometer/map.jinja
@@ -47,15 +47,15 @@
 # packages/services, because alarming is implemented by Aodh and collector 
 # stuff is implemented by the ceilometer_collector service.
 # The ceilometer api for Ocata and newer is served by webserver.
-{%- if salt['pillar.get']('ceilometer:server:version', 'mitaka') in ['liberty', 'juno', 'kilo'] or salt['pillar.get']('ceilometer:server:version', 'ocata') in ['liberty', 'juno', 'kilo'] %}
+{%- if salt['pillar.get']('ceilometer:server:version', 'mitaka') in ['liberty', 'juno', 'kilo'] %}
 {%- do server.update({'pkgs': pkgs.basic + pkgs.collector + pkgs.alarm}) %}
 {%- do server.update({'services': services.basic + services.collector + services.alarm + services.webserved}) %}
 {%- else %}
 {%- do server.update({'pkgs': pkgs.basic + pkgs.db_drivers}) %}
-{%- if salt['pillar.get']('ceilometer:server:version', 'ocata') in ['mitaka', 'newton'] %}
+{%- if salt['pillar.get']('ceilometer:server:version', 'ocata') in ['mitaka'] %}
 {%- do server.update({'services': services.basic + services.webserved}) %}
 {%- else %}
-# Ocata version of ceilometer api is served by webserver
+# Newton and Ocata versions of ceilometer api are served by webserver
 {%- do server.update({'services': services.basic}) %}
 {%- endif %}
 {%- endif %}
diff --git a/ceilometer/server.sls b/ceilometer/server.sls
index 9f81738..d0f1fc6 100644
--- a/ceilometer/server.sls
+++ b/ceilometer/server.sls
@@ -86,20 +86,30 @@
 
 {%- endif %}
 
-# for Ocata and newer
-{%- if server.version not in ['liberty', 'juno', 'kilo', 'mitaka', 'newton'] %}
+# for Newton and newer
+{%- if server.version not in ['liberty', 'juno', 'kilo', 'mitaka'] %}
 
-/etc/apache2/sites-available/ceilometer-api.conf:
+ceilometer_api_apache_config:
   file.managed:
-  - source: salt://ceilometer/files/{{ server.version }}/ceilometer-api.apache2.conf.Debian
+  {%- if server.version == 'newton' %}
+  - name: /etc/apache2/sites-available/ceilometer.conf
+  {%- else %}
+  - name: /etc/apache2/sites-available/ceilometer-api.conf
+  {%- endif %}
+  - source: salt://ceilometer/files/{{ server.version }}/ceilometer.apache2.conf.Debian
   - template: jinja
   - require:
     - pkg: ceilometer_server_packages
 
 ceilometer_api_config:
   file.symlink:
+     {%- if server.version == 'newton' %}
+     - name: /etc/apache2/sites-enabled/ceilometer.conf
+     - target: /etc/apache2/sites-available/ceilometer.conf
+     {%- else %}
      - name: /etc/apache2/sites-enabled/ceilometer-api.conf
      - target: /etc/apache2/sites-available/ceilometer-api.conf
+     {%- endif %}
 
 ceilometer_apache_restart:
   service.running:
@@ -107,7 +117,7 @@
   - name: apache2
   - watch:
     - file: /etc/ceilometer/ceilometer.conf
-    - file: /etc/apache2/sites-available/ceilometer-api.conf
+    - file: ceilometer_api_apache_config
     - file: /etc/ceilometer/event_definitions.yaml
     - file: /etc/ceilometer/event_pipeline.yaml
     - file: /etc/ceilometer/gabbi_pipeline.yaml
@@ -115,7 +125,6 @@
 
 {%- endif %}
 
-
 ceilometer_server_services:
   service.running:
   - names: {{ server.services }}