Merge "Adding states to perform nova upgrade"
diff --git a/README.rst b/README.rst
index d7fd61c..42ba8db 100644
--- a/README.rst
+++ b/README.rst
@@ -1064,19 +1064,21 @@
---------------------
By default communication between Nova and Galera is unsecure.
+nova:
+ controller:
+ database:
+ x509:
+ enabled: True
+
You able to set custom certificates in pillar:
-controller:
- database:
- x509:
- enabled: True
nova:
controller:
database:
x509:
- cacert (certificate content)
- cert (certificate content)
- key (certificate content)
+ cacert: (certificate content)
+ cert: (certificate content)
+ key: (certificate content)
You can read more about it here:
https://docs.openstack.org/security-guide/databases/database-access-control.html
diff --git a/nova/_ssl/mysql.sls b/nova/_ssl/mysql.sls
index 9d1acdb..3d715e9 100644
--- a/nova/_ssl/mysql.sls
+++ b/nova/_ssl/mysql.sls
@@ -1,5 +1,9 @@
{% from "nova/map.jinja" import controller with context %}
+nova_ssl_mysql:
+ test.show_notification:
+ - text: "Running nova._ssl.mysql"
+
{%- if controller.database.get('x509',{}).get('enabled',False) %}
{%- set ca_file=controller.database.x509.ca_file %}
@@ -12,6 +16,8 @@
- name: {{ ca_file }}
- contents_pillar: nova:controller:database:x509:cacert
- mode: 444
+ - user: nova
+ - group: nova
- makedirs: true
{%- else %}
file.exists:
@@ -24,6 +30,8 @@
- name: {{ cert_file }}
- contents_pillar: nova:controller:database:x509:cert
- mode: 440
+ - user: nova
+ - group: nova
- makedirs: true
{%- else %}
file.exists:
@@ -36,13 +44,24 @@
- name: {{ key_file }}
- contents_pillar: nova:controller:database:x509:key
- mode: 400
+ - user: nova
+ - group: nova
- makedirs: true
{%- else %}
file.exists:
- name: {{ key_file }}
{%- endif %}
-{% elif controller.database.get('ssl',{}).get('enabled',False) %}
+mysql_nova_ssl_x509_set_user_and_group:
+ file.managed:
+ - names:
+ - {{ ca_file }}
+ - {{ cert_file }}
+ - {{ key_file }}
+ - user: nova
+ - group: nova
+
+ {% elif controller.database.get('ssl',{}).get('enabled',False) %}
mysql_ca_nova_controller:
{%- if controller.database.ssl.cacert is defined %}
file.managed:
diff --git a/nova/controller.sls b/nova/controller.sls
index cc6c2fc..2b5d515 100644
--- a/nova/controller.sls
+++ b/nova/controller.sls
@@ -1,7 +1,5 @@
{% from "nova/map.jinja" import controller with context %}
-{%- set mysql_x509_ssl_enabled = controller.database.get('x509',{}).get('enabled',False) or controller.database.get('ssl',{}).get('enabled',False) %}
-
{%- if controller.get('enabled') %}
include:
@@ -12,9 +10,7 @@
# TODO(vsaienko) we need to run online dbsync only once after upgrade
# Move to appropriate upgrade phase
- nova.db.online_sync
- {%- if mysql_x509_ssl_enabled %}
- nova._ssl.mysql
- {%- endif %}
{%- if grains.os_family == 'Debian' %}
debconf-set-prerequisite:
@@ -64,6 +60,7 @@
- system: True
- require_in:
- pkg: nova_controller_packages
+ - sls: nova._ssl.mysql
{%- if controller.version not in ["juno", "kilo", "liberty", "mitaka", "newton"] %}
- pkg: nova_placement_package
{%- endif %}
@@ -173,6 +170,7 @@
- template: jinja
- require:
- pkg: nova_controller_packages
+ - sls: nova._ssl.mysql
- require_in:
- sls: nova.db.offline_sync
- sls: nova.db.online_sync
@@ -434,9 +432,7 @@
{%- endif %}
- require:
- sls: nova.db.offline_sync
- {%- if mysql_x509_ssl_enabled %}
- sls: nova._ssl.mysql
- {%- endif %}
- watch:
- file: /etc/nova/nova.conf
- file: /etc/nova/api-paste.ini
@@ -453,9 +449,7 @@
{%- endif %}
- require:
- sls: nova.db.offline_sync
- {%- if mysql_x509_ssl_enabled %}
- sls: nova._ssl.mysql
- {%- endif %}
- require_in:
- sls: nova.db.online_sync
- watch:
diff --git a/nova/files/grafana_dashboards/openstack_tenants_prometheus.json b/nova/files/grafana_dashboards/openstack_tenants_prometheus.json
new file mode 100644
index 0000000..607524e
--- /dev/null
+++ b/nova/files/grafana_dashboards/openstack_tenants_prometheus.json
@@ -0,0 +1,971 @@
+{%- raw %}
+{
+ "annotations": {
+ "list": [
+ {
+ "$$hashKey": "object:3956",
+ "builtIn": 1,
+ "datasource": "prometheus",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "limit": 100,
+ "name": "Annotations & Alerts",
+ "showIn": 0,
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "id": null,
+ "iteration": 1536224134023,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 38,
+ "panels": [],
+ "title": "Projects overview @ $project",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 0,
+ "y": 1
+ },
+ "id": 36,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "$$hashKey": "object:4031",
+ "expr": "sum(libvirt_domain_info_virtual_cpus{project_name=~\"$project\"}) by (project_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}} total",
+ "refId": "A"
+ },
+ {
+ "$$hashKey": "object:4032",
+ "expr": "sum(rate(libvirt_domain_info_cpu_time_seconds_total{project_name=~\"$project\"}[$rate_interval])) by (project_name)",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{project_name}} usage",
+ "refId": "B"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": null,
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 12,
+ "y": 1
+ },
+ "id": 39,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(libvirt_domain_info_memory_usage_bytes{project_name=~\"$project\"}) by (project_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Usage",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 0,
+ "y": 6
+ },
+ "id": 40,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(libvirt_domain_block_stats_read_bytes_total{project_name=~\"$project\"}[$rate_interval])) by (project_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}} read",
+ "refId": "A"
+ },
+ {
+ "expr": "sum(rate(libvirt_domain_block_stats_write_bytes_total{project_name=~\"$project\"}[$rate_interval])) by (project_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}} write",
+ "refId": "C"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Disks I/O",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 12,
+ "y": 6
+ },
+ "id": 41,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/tx.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(libvirt_domain_interface_stats_receive_bytes_total{project_name=~\"$project\"}[$rate_interval])) by (project_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}} rx",
+ "refId": "A"
+ },
+ {
+ "expr": "sum(rate(libvirt_domain_interface_stats_transmit_bytes_total{project_name=~\"$project\"}[$rate_interval])) by (project_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{project_name}} tx",
+ "refId": "C"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Network RX/TX",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 11
+ },
+ "id": 43,
+ "panels": [],
+ "title": "Users overview @ $user",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 0,
+ "y": 12
+ },
+ "id": 44,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "$$hashKey": "object:4174",
+ "expr": "sum(libvirt_domain_info_virtual_cpus{project_name=~\"$project\",user_name=~\"$user\"}) by (user_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}} total",
+ "refId": "A"
+ },
+ {
+ "$$hashKey": "object:4196",
+ "expr": "sum(rate(libvirt_domain_info_cpu_time_seconds_total{project_name=~\"$project\",user_name=~\"$user\"}[$rate_interval])) by (user_name)",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{user_name}} usage",
+ "refId": "B"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": null,
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 12,
+ "y": 12
+ },
+ "id": 45,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(libvirt_domain_info_memory_usage_bytes{project_name=~\"$project\",user_name=~\"$user\"}) by (user_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Usage",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 0,
+ "y": 17
+ },
+ "id": 46,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(libvirt_domain_block_stats_read_bytes_total{project_name=~\"$project\",user_name=~\"$user\"}[$rate_interval])) by (user_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}} read",
+ "refId": "A"
+ },
+ {
+ "expr": "sum(rate(libvirt_domain_block_stats_write_bytes_total{project_name=~\"$project\",user_name=~\"$user\"}[$rate_interval])) by (user_name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}} write",
+ "refId": "C"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Disks I/O",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "gridPos": {
+ "h": 5,
+ "w": 12,
+ "x": 12,
+ "y": 17
+ },
+ "id": 47,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/tx.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(libvirt_domain_interface_stats_receive_bytes_total{project_name=~\"$project\",user_name=~\"$user\"}[$rate_interval])) by (user_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}} rx",
+ "refId": "A"
+ },
+ {
+ "expr": "sum(rate(libvirt_domain_interface_stats_transmit_bytes_total{project_name=~\"$project\",user_name=~\"$user\"}[$rate_interval])) by (user_name)",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{user_name}} tx",
+ "refId": "C"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Network RX/TX",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ }
+ ],
+ "refresh": "1m",
+ "schemaVersion": 16,
+ "style": "dark",
+ "tags": [
+ "openstack"
+ ],
+ "templating": {
+ "list": [
+ {
+ "allValue": null,
+ "current": {
+ "tags": [],
+ "text": "admin",
+ "value": [
+ "admin"
+ ]
+ },
+ "datasource": "prometheus",
+ "hide": 0,
+ "includeAll": false,
+ "label": null,
+ "multi": true,
+ "name": "project",
+ "options": [],
+ "query": "label_values(libvirt_domain_info_virtual_cpus,project_name)",
+ "refresh": 1,
+ "regex": "",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": null,
+ "current": {
+ "selected": false,
+ "tags": [],
+ "text": "admin",
+ "value": [
+ "admin"
+ ]
+ },
+ "datasource": "prometheus",
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "user",
+ "options": [],
+ "query": "label_values(libvirt_domain_info_virtual_cpus{project_name=~\"$project\"},user_name)",
+ "refresh": 1,
+ "regex": "",
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": null,
+ "current": {
+ "tags": [],
+ "text": "3m",
+ "value": "3m"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": null,
+ "multi": false,
+ "name": "rate_interval",
+ "options": [
+ {
+ "$$hashKey": "object:4409",
+ "selected": false,
+ "text": "1m",
+ "value": "1m"
+ },
+ {
+ "$$hashKey": "object:4410",
+ "selected": true,
+ "text": "3m",
+ "value": "3m"
+ },
+ {
+ "$$hashKey": "object:4411",
+ "selected": false,
+ "text": "5m",
+ "value": "5m"
+ },
+ {
+ "$$hashKey": "object:4412",
+ "selected": false,
+ "text": "10m",
+ "value": "10m"
+ },
+ {
+ "$$hashKey": "object:4413",
+ "selected": false,
+ "text": "15m",
+ "value": "15m"
+ }
+ ],
+ "query": "1m,3m,5m,10m,15m",
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "",
+ "title": "Openstack - Tenants",
+ "uid": null,
+ "version": 1
+}
+{%- endraw %}
diff --git a/nova/files/ocata/nova-compute.conf.Debian b/nova/files/ocata/nova-compute.conf.Debian
index 3b45d5d..7df3b8b 100644
--- a/nova/files/ocata/nova-compute.conf.Debian
+++ b/nova/files/ocata/nova-compute.conf.Debian
@@ -6769,7 +6769,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options=<None>
+{%- if compute.nfs_mount_options is defined %}
+nfs_mount_options="{{ compute.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/files/ocata/nova-controller.conf.Debian b/nova/files/ocata/nova-controller.conf.Debian
index dd1b5e2..6c568f9 100644
--- a/nova/files/ocata/nova-controller.conf.Debian
+++ b/nova/files/ocata/nova-controller.conf.Debian
@@ -6728,7 +6728,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options=<None>
+{%- if controller.nfs_mount_options is defined %}
+nfs_mount_options="{{ controller.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/files/pike/nova-compute.conf.Debian b/nova/files/pike/nova-compute.conf.Debian
index f2bad58..35ec91a 100644
--- a/nova/files/pike/nova-compute.conf.Debian
+++ b/nova/files/pike/nova-compute.conf.Debian
@@ -6811,7 +6811,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options=<None>
+{%- if compute.nfs_mount_options is defined %}
+nfs_mount_options="{{ compute.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/files/pike/nova-controller.conf.Debian b/nova/files/pike/nova-controller.conf.Debian
index 9b8a545..34451c2 100644
--- a/nova/files/pike/nova-controller.conf.Debian
+++ b/nova/files/pike/nova-controller.conf.Debian
@@ -6743,7 +6743,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options=<None>
+{%- if controller.nfs_mount_options is defined %}
+nfs_mount_options="{{ controller.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/files/queens/nova-compute.conf.Debian b/nova/files/queens/nova-compute.conf.Debian
index b2168a1..da35e8b 100644
--- a/nova/files/queens/nova-compute.conf.Debian
+++ b/nova/files/queens/nova-compute.conf.Debian
@@ -7392,7 +7392,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options = <None>
+{%- if compute.nfs_mount_options is defined %}
+nfs_mount_options="{{ compute.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/files/queens/nova-controller.conf.Debian b/nova/files/queens/nova-controller.conf.Debian
index c413d87..b456d31 100644
--- a/nova/files/queens/nova-controller.conf.Debian
+++ b/nova/files/queens/nova-controller.conf.Debian
@@ -7288,7 +7288,9 @@
# * Any string representing mount options separated by commas.
# * Example string: vers=3,lookupcache=pos
# (string value)
-#nfs_mount_options = <None>
+{%- if controller.nfs_mount_options is defined %}
+nfs_mount_options="{{ controller.nfs_mount_options }}"
+{%- endif %}
#
# Directory where the Quobyte volume is mounted on the compute node.
diff --git a/nova/meta/grafana.yml b/nova/meta/grafana.yml
index 0fc3ac3..b189d5e 100644
--- a/nova/meta/grafana.yml
+++ b/nova/meta/grafana.yml
@@ -34,6 +34,10 @@
datasource: prometheus
format: json
template: nova/files/grafana_dashboards/openstack_overview_prometheus.json
+ openstack_tenants_prometheus:
+ datasource: prometheus
+ format: json
+ template: nova/files/grafana_dashboards/openstack_tenants_prometheus.json
nova_influxdb:
datasource: influxdb
format: json
diff --git a/tests/pillar/compute_single_config_drive_options.sls b/tests/pillar/compute_single_config_drive_options.sls
index f33faca..6351252 100644
--- a/tests/pillar/compute_single_config_drive_options.sls
+++ b/tests/pillar/compute_single_config_drive_options.sls
@@ -1,12 +1,13 @@
nova:
compute:
- version: mitaka
+ version: queens
enabled: true
heal_instance_info_cache_interval: 60
vncproxy_url: openstack:6080
vnc_keymap: en-gb
resume_guests_state_on_host_boot: False
preallocate_images: space
+ nfs_mount_options: 'vers=3,lookupcache=pos'
bind:
vnc_address: 127.0.0.1
vnc_port: 6080
diff --git a/tests/pillar/control_single.sls b/tests/pillar/control_single.sls
index 3b36463..eb91fd9 100644
--- a/tests/pillar/control_single.sls
+++ b/tests/pillar/control_single.sls
@@ -12,6 +12,7 @@
ram_allocation_ratio: 1.5
disk_allocation_ratio: 1.0
workers: 8
+ nfs_mount_options: 'vers=3,lookupcache=pos'
bind:
private_address: 127.0.0.1
public_address: 127.0.0.1