Merge "Add collectd support" into stacklight
diff --git a/cinder/files/mitaka/cinder.conf.controller.Debian b/cinder/files/mitaka/cinder.conf.controller.Debian
index 66ef1ea..30f464b 100644
--- a/cinder/files/mitaka/cinder.conf.controller.Debian
+++ b/cinder/files/mitaka/cinder.conf.controller.Debian
@@ -46,7 +46,7 @@
 rpc_response_timeout=3600
 
 #Rabbit
-rpc_backend=cinder.openstack.common.rpc.impl_kombu
+rpc_backend=rabbit
 control_exchange=cinder
 
 
diff --git a/cinder/files/mitaka/cinder.conf.volume.Debian b/cinder/files/mitaka/cinder.conf.volume.Debian
index 862d621..7212a24 100644
--- a/cinder/files/mitaka/cinder.conf.volume.Debian
+++ b/cinder/files/mitaka/cinder.conf.volume.Debian
@@ -46,7 +46,7 @@
 rpc_response_timeout=3600
 
 #Rabbit
-rpc_backend=cinder.openstack.common.rpc.impl_kombu
+rpc_backend=rabbit
 control_exchange=cinder
 
 
diff --git a/cinder/files/newton/api-paste.ini.controller.Debian b/cinder/files/newton/api-paste.ini.controller.Debian
new file mode 100644
index 0000000..a761f53
--- /dev/null
+++ b/cinder/files/newton/api-paste.ini.controller.Debian
@@ -0,0 +1,75 @@
+#############
+# OpenStack #
+#############
+
+[composite:osapi_volume]
+use = call:cinder.api:root_app_factory
+/: apiversions
+/v1: openstack_volume_api_v1
+/v2: openstack_volume_api_v2
+/v3: openstack_volume_api_v3
+
+[composite:openstack_volume_api_v1]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv1
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv1
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv1
+
+[composite:openstack_volume_api_v2]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv2
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv2
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv2
+
+[composite:openstack_volume_api_v3]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv3
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv3
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv3
+
+[filter:request_id]
+paste.filter_factory = oslo_middleware.request_id:RequestId.factory
+
+[filter:http_proxy_to_wsgi]
+paste.filter_factory = oslo_middleware.http_proxy_to_wsgi:HTTPProxyToWSGI.factory
+
+[filter:cors]
+paste.filter_factory = oslo_middleware.cors:filter_factory
+oslo_config_project = cinder
+
+[filter:faultwrap]
+paste.filter_factory = cinder.api.middleware.fault:FaultWrapper.factory
+
+[filter:osprofiler]
+paste.filter_factory = osprofiler.web:WsgiMiddleware.factory
+
+[filter:noauth]
+paste.filter_factory = cinder.api.middleware.auth:NoAuthMiddleware.factory
+
+[filter:sizelimit]
+paste.filter_factory = oslo_middleware.sizelimit:RequestBodySizeLimiter.factory
+
+[app:apiv1]
+paste.app_factory = cinder.api.v1.router:APIRouter.factory
+
+[app:apiv2]
+paste.app_factory = cinder.api.v2.router:APIRouter.factory
+
+[app:apiv3]
+paste.app_factory = cinder.api.v3.router:APIRouter.factory
+
+[pipeline:apiversions]
+pipeline = cors http_proxy_to_wsgi faultwrap osvolumeversionapp
+
+[app:osvolumeversionapp]
+paste.app_factory = cinder.api.versions:Versions.factory
+
+##########
+# Shared #
+##########
+
+[filter:keystonecontext]
+paste.filter_factory = cinder.api.middleware.auth:CinderKeystoneContext.factory
+
+[filter:authtoken]
+paste.filter_factory = keystonemiddleware.auth_token:filter_factory
diff --git a/cinder/files/newton/api-paste.ini.controller.RedHat b/cinder/files/newton/api-paste.ini.controller.RedHat
new file mode 120000
index 0000000..341baca
--- /dev/null
+++ b/cinder/files/newton/api-paste.ini.controller.RedHat
@@ -0,0 +1 @@
+api-paste.ini.controller.Debian
\ No newline at end of file
diff --git a/cinder/files/newton/api-paste.ini.volume.Debian b/cinder/files/newton/api-paste.ini.volume.Debian
new file mode 100644
index 0000000..a761f53
--- /dev/null
+++ b/cinder/files/newton/api-paste.ini.volume.Debian
@@ -0,0 +1,75 @@
+#############
+# OpenStack #
+#############
+
+[composite:osapi_volume]
+use = call:cinder.api:root_app_factory
+/: apiversions
+/v1: openstack_volume_api_v1
+/v2: openstack_volume_api_v2
+/v3: openstack_volume_api_v3
+
+[composite:openstack_volume_api_v1]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv1
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv1
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv1
+
+[composite:openstack_volume_api_v2]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv2
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv2
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv2
+
+[composite:openstack_volume_api_v3]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler noauth apiv3
+keystone = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv3
+keystone_nolimit = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler authtoken keystonecontext apiv3
+
+[filter:request_id]
+paste.filter_factory = oslo_middleware.request_id:RequestId.factory
+
+[filter:http_proxy_to_wsgi]
+paste.filter_factory = oslo_middleware.http_proxy_to_wsgi:HTTPProxyToWSGI.factory
+
+[filter:cors]
+paste.filter_factory = oslo_middleware.cors:filter_factory
+oslo_config_project = cinder
+
+[filter:faultwrap]
+paste.filter_factory = cinder.api.middleware.fault:FaultWrapper.factory
+
+[filter:osprofiler]
+paste.filter_factory = osprofiler.web:WsgiMiddleware.factory
+
+[filter:noauth]
+paste.filter_factory = cinder.api.middleware.auth:NoAuthMiddleware.factory
+
+[filter:sizelimit]
+paste.filter_factory = oslo_middleware.sizelimit:RequestBodySizeLimiter.factory
+
+[app:apiv1]
+paste.app_factory = cinder.api.v1.router:APIRouter.factory
+
+[app:apiv2]
+paste.app_factory = cinder.api.v2.router:APIRouter.factory
+
+[app:apiv3]
+paste.app_factory = cinder.api.v3.router:APIRouter.factory
+
+[pipeline:apiversions]
+pipeline = cors http_proxy_to_wsgi faultwrap osvolumeversionapp
+
+[app:osvolumeversionapp]
+paste.app_factory = cinder.api.versions:Versions.factory
+
+##########
+# Shared #
+##########
+
+[filter:keystonecontext]
+paste.filter_factory = cinder.api.middleware.auth:CinderKeystoneContext.factory
+
+[filter:authtoken]
+paste.filter_factory = keystonemiddleware.auth_token:filter_factory
diff --git a/cinder/files/newton/api-paste.ini.volume.RedHat b/cinder/files/newton/api-paste.ini.volume.RedHat
new file mode 120000
index 0000000..c5204ec
--- /dev/null
+++ b/cinder/files/newton/api-paste.ini.volume.RedHat
@@ -0,0 +1 @@
+api-paste.ini.volume.Debian
\ No newline at end of file
diff --git a/cinder/files/newton/cinder.conf.controller.Debian b/cinder/files/newton/cinder.conf.controller.Debian
new file mode 100644
index 0000000..d1d3e31
--- /dev/null
+++ b/cinder/files/newton/cinder.conf.controller.Debian
@@ -0,0 +1,136 @@
+{%- from "cinder/map.jinja" import controller with context %}
+
+[DEFAULT]
+rootwrap_config = /etc/cinder/rootwrap.conf
+api_paste_confg = /etc/cinder/api-paste.ini
+
+iscsi_helper = tgtadm
+volume_name_template = volume-%s
+#volume_group = cinder
+
+verbose = True
+
+osapi_volume_workers = {{ controller.get('volume_workers', '4') }}
+
+auth_strategy = keystone
+
+state_path = /var/lib/cinder
+
+use_syslog=False
+
+glance_num_retries=0
+debug=False
+
+os_region_name={{ controller.identity.region }}
+
+#glance_api_ssl_compression=False
+#glance_api_insecure=False
+
+osapi_volume_listen={{ controller.osapi.host }}
+
+glance_host={{ controller.glance.host }}
+glance_port={{ controller.glance.port }}
+glance_api_version=2
+
+volume_backend_name=DEFAULT
+
+{%- if controller.backend is defined %}
+
+default_volume_type={{ controller.default_volume_type }}
+
+enabled_backends={% for backend_name, backend in controller.get('backend', {}).iteritems() %}{{ backend_name }}{% if not loop.last %},{% endif %}{% endfor %}
+
+{%- endif %}
+
+#RPC response timeout recommended by Hitachi
+rpc_response_timeout=3600
+
+#Rabbit
+rpc_backend=rabbit
+control_exchange=cinder
+
+
+volume_clear={{ controller.wipe_method }}
+
+
+
+volume_name_template = volume-%s
+
+#volume_group = vg_cinder_volume
+
+volumes_dir = /var/lib/cinder/volumes
+log_dir=/var/log/cinder
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+use_syslog=false
+verbose=True
+lock_path=/var/lock/cinder
+
+nova_catalog_admin_info = compute:nova:adminURL
+nova_catalog_info = compute:nova:publicURL
+
+osapi_volume_extension = cinder.api.contrib.standard_extensions
+
+[oslo_messaging_notifications]
+{%- if controller.notification %}
+driver = messagingv2
+{%- endif %}
+
+[oslo_concurrency]
+
+lock_path=/var/lock/cinder
+
+[oslo_messaging_rabbit]
+{%- if controller.message_queue.members is defined %}
+rabbit_hosts = {% for member in controller.message_queue.members -%}
+                   {{ member.host }}:{{ member.get('port', 5672) }}
+                   {%- if not loop.last -%},{%- endif -%}
+               {%- endfor -%}
+{%- else %}
+rabbit_host = {{ controller.message_queue.host }}
+rabbit_port = {{ controller.message_queue.port }}
+{%- endif %}
+
+rabbit_userid = {{ controller.message_queue.user }}
+rabbit_password = {{ controller.message_queue.password }}
+rabbit_virtual_host = {{ controller.message_queue.virtual_host }}
+kombu_reconnect_delay=5.0
+
+[keystone_authtoken]
+signing_dir=/tmp/keystone-signing-cinder
+revocation_cache_time = 10
+auth_type = password
+user_domain_name = {{ controller.identity.get('domain', 'Default') }}
+project_domain_name = {{ controller.identity.get('domain', 'Default') }}
+project_name = {{ controller.identity.tenant }}
+username = {{ controller.identity.user }}
+password = {{ controller.identity.password }}
+
+auth_uri=http://{{ controller.identity.host }}:5000
+auth_url=http://{{ controller.identity.host }}:35357
+# Temporary disabled for backward compataiblity
+#auth_uri=http://{{ controller.identity.host }}/identity
+#auth_url=http://{{ controller.identity.host }}/identity_v2_admin
+{%- if controller.cache is defined %}
+memcached_servers={%- for member in controller.cache.members %}{{ member.host }}:11211{% if not loop.last %},{% endif %}{%- endfor %}
+{%- endif %}
+
+[database]
+idle_timeout=3600
+max_pool_size=30
+max_retries=-1
+max_overflow=40
+connection = {{ controller.database.engine }}+pymysql://{{ controller.database.user }}:{{ controller.database.password }}@{{ controller.database.host }}/{{ controller.database.name }}
+
+{%- if controller.backend is defined %}
+
+{%- for backend_name, backend in controller.get('backend', {}).iteritems() %}
+
+{%- set backend_fragment = "cinder/files/backend/_" + backend.engine + ".conf" %}
+{%- include backend_fragment %}
+
+{%- endfor %}
+
+{%- endif %}
diff --git a/cinder/files/newton/cinder.conf.controller.RedHat b/cinder/files/newton/cinder.conf.controller.RedHat
new file mode 120000
index 0000000..563de88
--- /dev/null
+++ b/cinder/files/newton/cinder.conf.controller.RedHat
@@ -0,0 +1 @@
+cinder.conf.controller.Debian
\ No newline at end of file
diff --git a/cinder/files/newton/cinder.conf.volume.Debian b/cinder/files/newton/cinder.conf.volume.Debian
new file mode 100644
index 0000000..067f9ce
--- /dev/null
+++ b/cinder/files/newton/cinder.conf.volume.Debian
@@ -0,0 +1,132 @@
+{%- from "cinder/map.jinja" import volume with context %}
+
+[DEFAULT]
+rootwrap_config = /etc/cinder/rootwrap.conf
+api_paste_confg = /etc/cinder/api-paste.ini
+
+iscsi_helper = tgtadm
+volume_name_template = volume-%s
+#volume_group = cinder
+
+verbose = True
+
+osapi_volume_workers = {{ volume.get('volume_workers', '4') }}
+
+auth_strategy = keystone
+
+state_path = /var/lib/cinder
+
+use_syslog=False
+
+glance_num_retries=0
+debug=False
+
+os_region_name={{ volume.identity.region }}
+
+#glance_api_ssl_compression=False
+#glance_api_insecure=False
+
+osapi_volume_listen={{ volume.osapi.host }}
+
+glance_host={{ volume.glance.host }}
+glance_port={{ volume.glance.port }}
+glance_api_version=2
+
+volume_backend_name=DEFAULT
+
+{%- if volume.backend is defined %}
+
+default_volume_type={{ volume.default_volume_type }}
+
+enabled_backends={% for backend_name, backend in volume.get('backend', {}).iteritems() %}{{ backend_name }}{% if not loop.last %},{% endif %}{% endfor %}
+
+{%- endif %}
+
+#RPC response timeout recommended by Hitachi
+rpc_response_timeout=3600
+
+#Rabbit
+rpc_backend=rabbit
+control_exchange=cinder
+
+
+volume_clear={{ volume.wipe_method }}
+
+
+volume_name_template = volume-%s
+
+#volume_group = vg_cinder_volume
+
+volumes_dir = /var/lib/cinder/volumes
+log_dir=/var/log/cinder
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+use_syslog=false
+verbose=True
+
+nova_catalog_admin_info = compute:nova:adminURL
+nova_catalog_info = compute:nova:publicURL
+
+[oslo_messaging_notifications]
+{%- if volume.notification %}
+driver = messagingv2
+{%- endif %}
+
+[oslo_concurrency]
+
+lock_path=/var/lock/cinder
+
+[oslo_messaging_rabbit]
+{%- if volume.message_queue.members is defined %}
+rabbit_hosts = {% for member in volume.message_queue.members -%}
+                   {{ member.host }}:{{ member.get('port', 5672) }}
+                   {%- if not loop.last -%},{%- endif -%}
+               {%- endfor -%}
+{%- else %}
+rabbit_host = {{ volume.message_queue.host }}
+rabbit_port = {{ volume.message_queue.port }}
+{%- endif %}
+
+rabbit_userid = {{ volume.message_queue.user }}
+rabbit_password = {{ volume.message_queue.password }}
+rabbit_virtual_host = {{ volume.message_queue.virtual_host }}
+kombu_reconnect_delay=5.0
+
+[keystone_authtoken]
+signing_dir=/tmp/keystone-signing-cinder
+revocation_cache_time = 10
+auth_type = password
+user_domain_name = {{ volume.identity.get('domain', 'Default') }}
+project_domain_name = {{ volume.identity.get('domain', 'Default') }}
+project_name = {{ volume.identity.tenant }}
+username = {{ volume.identity.user }}
+password = {{ volume.identity.password }}
+
+auth_uri=http://{{ volume.identity.host }}:5000/v3
+auth_url=http://{{ volume.identity.host }}:35357/v3
+# Temporary disabled for backward compataiblity
+#auth_uri=http://{{ volume.identity.host }}/identity
+#auth_url=http://{{ volume.identity.host }}/identity_v2_admin
+{%- if volume.cache is defined %}
+memcached_servers={%- for member in volume.cache.members %}{{ member.host }}:11211{% if not loop.last %},{% endif %}{%- endfor %}
+{%- endif %}
+
+[database]
+idle_timeout=3600
+max_pool_size=30
+max_retries=-1
+max_overflow=40
+connection = {{ volume.database.engine }}+pymysql://{{ volume.database.user }}:{{ volume.database.password }}@{{ volume.database.host }}/{{ volume.database.name }}
+
+{%- if volume.backend is defined %}
+
+{%- for backend_name, backend in volume.get('backend', {}).iteritems() %}
+
+{%- set backend_fragment = "cinder/files/backend/_" + backend.engine + ".conf" %}
+{%- include backend_fragment %}
+
+{%- endfor %}
+
+{%- endif %}
diff --git a/cinder/files/newton/cinder.conf.volume.RedHat b/cinder/files/newton/cinder.conf.volume.RedHat
new file mode 120000
index 0000000..df997ca
--- /dev/null
+++ b/cinder/files/newton/cinder.conf.volume.RedHat
@@ -0,0 +1 @@
+cinder.conf.volume.Debian
\ No newline at end of file
diff --git a/cinder/map.jinja b/cinder/map.jinja
index 39bcb2e..e1c6ded 100644
--- a/cinder/map.jinja
+++ b/cinder/map.jinja
@@ -12,7 +12,7 @@
         'wipe_method': 'none',
         'notification': False,
     },
-}, merge=salt['pillar.get']('cinder:controller')) %}
+}, merge=pillar.cinder.get('controller', {})) %}
 
 {% set volume = salt['grains.filter_by']({
     'Debian': {
@@ -27,4 +27,4 @@
         'wipe_method': 'none',
         'notification': False,
     },
-}, merge=salt['pillar.get']('cinder:volume')) %}
+}, merge=pillar.cinder.get('volume', {})) %}
diff --git a/cinder/meta/config.yml b/cinder/meta/config.yml
new file mode 100644
index 0000000..e9ccfdf
--- /dev/null
+++ b/cinder/meta/config.yml
@@ -0,0 +1,10 @@
+config:
+  {%- if pillar.cinder.controller is defined %}
+  {%- from "cinder/map.jinja" import controller with context %}
+  cinder.conf:
+    source: "salt://cinder/files/{{ controller.version }}/cinder.conf.controller.{{ grains.os_family|default('Debian') }}"
+    template: jinja
+  api-paste.ini:
+    source: "salt://cinder/files/{{ controller.version }}/api-paste.ini.controller.{{ grains.os_family|default('Debian') }}"
+    template: jinja
+  {%- endif %}
\ No newline at end of file
diff --git a/cinder/meta/sensu.yml b/cinder/meta/sensu.yml
index bed38d5..dc74866 100644
--- a/cinder/meta/sensu.yml
+++ b/cinder/meta/sensu.yml
@@ -1,3 +1,5 @@
+{%- from "cinder/map.jinja" import controller with context %}
+{%- set region = controller.identity.region %}
 check:
   local_cinder_api_proc:
     command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C cinder-api -u cinder -c 1:1024"
@@ -24,7 +26,7 @@
     subscribers:
     - remote-network
   remote_openstack_cinder_volume:
-    command: "PATH=$PATH:/usr/local/bin oschecks-check_cinder_volume --auth_url='http://:::openstack.host:::::::openstack.port:::/v2.0' --username :::openstack.user::: --password :::openstack.password::: --tenant :::openstack.tenant:::"
+    command: "PATH=$PATH:/usr/local/bin oschecks-check_cinder_volume --auth_url='http://:::openstack.host:::::::openstack.port:::/v2.0' --username :::openstack.user::: --password :::openstack.password::: --tenant :::openstack.tenant::: --region_name {{ region }}"
     interval: 300
     occurrences: 1
     subscribers:
diff --git a/metadata/service/control/container.yml b/metadata/service/control/container.yml
new file mode 100644
index 0000000..951ded8
--- /dev/null
+++ b/metadata/service/control/container.yml
@@ -0,0 +1,41 @@
+parameters:
+  kubernetes:
+    control:
+      configmap:
+        cinder-control:
+          grains:
+            os_family: Debian
+          pillar:
+            cinder:
+              controller:
+                enabled: true
+                version: ${_param:cinder_version}
+                default_volume_type: ""
+                backend: {}
+                osapi:
+                  host: 0.0.0.0
+                database:
+                  engine: mysql
+                  host: ${_param:mysql_service_host}
+                  port: 3306
+                  name: cinder
+                  user: cinder
+                  password: ${_param:mysql_cinder_password}
+                identity:
+                  engine: keystone
+                  region: RegionOne
+                  host: ${_param:keystone_service_host}
+                  port: 35357
+                  tenant: service
+                  user: cinder
+                  password: ${_param:keystone_cinder_password}
+                glance:
+                  host: ${_param:glance_service_host}
+                  port: 9292
+                message_queue:
+                  engine: rabbitmq
+                  user: openstack
+                  password: ${_param:rabbitmq_openstack_password}
+                  virtual_host: '/openstack'
+                cache:
+                  engine: memcached
\ No newline at end of file
diff --git a/metadata/service/support.yml b/metadata/service/support.yml
index 5f7213c..fb94e22 100644
--- a/metadata/service/support.yml
+++ b/metadata/service/support.yml
@@ -9,3 +9,5 @@
         enabled: true
       sphinx:
         enabled: true
+      config:
+        enabled: true
\ No newline at end of file