Merge "Fix for interface for nova calls on compute node"
diff --git a/.kitchen.yml b/.kitchen.yml
index 24684ec..2c3b809 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -49,8 +49,7 @@
sudo: true
docker_images:
- - &xenial-20177 <%=ENV['IMAGE_XENIAL_20177'] || 'docker-dev-local.docker.mirantis.net/epcim/salt/saltstack-ubuntu-xenial-salt-2017.7/salt:2018_11_19'%>
- - &xenial-stable <%=ENV['IMAGE_XENIAL_STABLE'] || 'docker-dev-local.docker.mirantis.net/epcim/salt/saltstack-ubuntu-xenial-salt-stable/salt:2018_11_19'%>
+ - &xenial-20177 <%=ENV['IMAGE_XENIAL_20177'] || 'docker-dev-local.docker.mirantis.net/mirantis/drivetrain/salt-formulas-ci/salt-formulas-ci-xenial-2017.7:latest'%>
platforms:
- name: xenial-2017.7
@@ -58,13 +57,8 @@
image: *xenial-20177
platform: ubuntu
- - name: xenial-stable
- driver_config:
- image: *xenial-stable
- platform: ubuntu
-
suites:
-<% for os_version in ['mitaka','newton','ocata','pike', 'queens', 'rocky'] %>
+<% for os_version in ['pike', 'queens', 'rocky'] %>
- name: compute_cluster_<%=os_version%>
provisioner:
pillars-from-files:
@@ -87,7 +81,7 @@
controller:
version: <%=os_version%>
<% end %>
-<% for os_version in ['queens', ] %>
+<% for os_version in ['queens'] %>
- name: compute_single_ssl_<%=os_version%>
driver:
devices:
diff --git a/README.rst b/README.rst
index 0f6117d..02d0279 100644
--- a/README.rst
+++ b/README.rst
@@ -53,6 +53,9 @@
user: nova
password: pwd
tenant: service
+ interface: internal
+ valid_interfaces:
+ - internal
message_queue:
engine: rabbitmq
host: 127.0.0.1
@@ -192,6 +195,18 @@
controller:
update_cells: true
+Increase number of chunks for online db migrations:
+
+.. note:: This only should be done in offline as large number of
+ rows locked by this process may cause service outage, which
+ may not be expected.
+
+.. code-block:: yaml
+
+ nova:
+ controller:
+ db_migrations:
+ max_count: 5000000
Configuring TLS communications
------------------------------
@@ -1424,3 +1439,20 @@
| | operations, verify do not have dead network |
| | agents/compute services) |
+-------------------------------+------------------------------------------------------+
+
+
+Don't manage services scheduling while upgrade
+----------------------------------------------
+For some special cases, don't manage services scheduling both enable and disable
+before and after upgrade procedure.
+
+If 'manage_service_maintenance: true' or not present - default behavior, disable services
+before upgrade and enable it after upgrade.
+If 'manage_service_maintenance: false' - don't disable and don't enable upgraded services
+scheduling before and after upgrade.
+
+.. code-block:: yaml
+
+ nova:
+ upgrade:
+ manage_service_maintenance: false
diff --git a/metadata/service/compute/cluster.yml b/metadata/service/compute/cluster.yml
index 8934022..2f081d5 100644
--- a/metadata/service/compute/cluster.yml
+++ b/metadata/service/compute/cluster.yml
@@ -62,6 +62,7 @@
region: RegionOne
host: ${_param:opencontrail_control_address}
port: 9696
+ retry: 3
cache:
engine: memcached
# NOTE (dukov) Do not change this unless you 100% sure what you are doing
diff --git a/metadata/service/compute/ironic.yml b/metadata/service/compute/ironic.yml
index e81933b..e606370 100644
--- a/metadata/service/compute/ironic.yml
+++ b/metadata/service/compute/ironic.yml
@@ -58,6 +58,7 @@
region: RegionOne
host: ${_param:cluster_vip_address}
port: 9696
+ retry: 3
ironic:
region: RegionOne
host: ${_param:ironic_service_host}
diff --git a/metadata/service/compute/kvm.yml b/metadata/service/compute/kvm.yml
index 4174b56..0352323 100644
--- a/metadata/service/compute/kvm.yml
+++ b/metadata/service/compute/kvm.yml
@@ -59,6 +59,7 @@
region: RegionOne
host: ${_param:cluster_vip_address}
port: 9696
+ retry: 3
cache:
engine: memcached
# NOTE (dukov) Do not change this unless you 100% sure what you are doing
diff --git a/metadata/service/control/cluster.yml b/metadata/service/control/cluster.yml
index fa271ff..bb4f432 100644
--- a/metadata/service/control/cluster.yml
+++ b/metadata/service/control/cluster.yml
@@ -69,6 +69,7 @@
host: ${_param:cluster_vip_address}
port: 9696
mtu: 1500
+ retry: 3
metadata:
password: metadataPass
cache:
diff --git a/metadata/service/control/single.yml b/metadata/service/control/single.yml
index 5030462..5178b35 100644
--- a/metadata/service/control/single.yml
+++ b/metadata/service/control/single.yml
@@ -70,6 +70,7 @@
port: 9696
mtu: 1500
tenant: service
+ retry: 3
metadata:
password: ${_param:metadata_password}
cache:
diff --git a/nova/compute.sls b/nova/compute.sls
index 9b3ea44..0e6daf5 100644
--- a/nova/compute.sls
+++ b/nova/compute.sls
@@ -58,8 +58,9 @@
- groups:
- nova
-/var/lib/nova:
+nova_var_lib_nova:
file.directory:
+ - name: /var/lib/nova
- user: nova
- group: nova
- dir_mode: 0750
@@ -624,5 +625,25 @@
{%- endif %}
+{%- if compute.get('qemu', {}).defaults is defined %}
+
+/etc/default/qemu-kvm:
+ file.managed:
+ - source: salt://nova/files/etc-qemu-kvm
+ - context:
+ params: {{ compute.qemu.defaults }}
+ - template: jinja
+ - require:
+ - pkg: nova_compute_packages
+
+qemu_kvm_service:
+ service.running:
+ - name: qemu-kvm
+ - enable: true
+ - watch:
+ - file: /etc/default/qemu-kvm
+
+{%- endif %}
+
{%- endif %}
diff --git a/nova/controller.sls b/nova/controller.sls
index 013f40d..bf758bb 100644
--- a/nova/controller.sls
+++ b/nova/controller.sls
@@ -281,10 +281,10 @@
{% endfor %}
{% endif %}
-{% if controller.get('policy', {}) and controller.version not in ['liberty', 'mitaka', 'newton'] %}
+{%- if controller.version not in ['liberty', 'mitaka', 'newton'] %}
{# nova no longer ships with a default policy.json #}
-
-/etc/nova/policy.json:
+{#- Since Queens release `policy.json` is changed to `policy.yaml`. But default option in `oslo_policy` is `policy.json` #}
+/etc/nova/{{ controller.get('oslo_policy', {}).get('policy_file', 'policy.json') }}:
file.managed:
- contents: '{}'
- replace: False
@@ -292,33 +292,32 @@
- group: nova
- require:
- pkg: nova_controller_packages
-
-{% endif %}
+{%- endif %}
{%- for name, rule in controller.get('policy', {}).iteritems() %}
{%- if rule != None %}
nova_keystone_rule_{{ name }}_present:
keystone_policy.rule_present:
- - path: /etc/nova/policy.json
+ - path: /etc/nova/{{ controller.get('oslo_policy', {}).get('policy_file', 'policy.json') }}
- name: {{ name }}
- rule: {{ rule }}
- require:
- pkg: nova_controller_packages
{% if controller.version not in ['liberty', 'mitaka', 'newton'] %}
- - file: /etc/nova/policy.json
+ - file: /etc/nova/{{ controller.get('oslo_policy', {}).get('policy_file', 'policy.json') }}
{% endif%}
{%- else %}
nova_keystone_rule_{{ name }}_absent:
keystone_policy.rule_absent:
- - path: /etc/nova/policy.json
+ - path: /etc/nova/{{ controller.get('oslo_policy', {}).get('policy_file', 'policy.json') }}
- name: {{ name }}
- require:
- pkg: nova_controller_packages
{% if controller.version not in ['liberty', 'mitaka', 'newton'] %}
- - file: /etc/nova/policy.json
+ - file: /etc/nova/{{ controller.get('oslo_policy', {}).get('policy_file', 'policy.json') }}
{% endif%}
{%- endif %}
diff --git a/nova/db/online_sync.sls b/nova/db/online_sync.sls
index 828b35c..ae26a41 100644
--- a/nova/db/online_sync.sls
+++ b/nova/db/online_sync.sls
@@ -4,9 +4,14 @@
{%- if not grains.get('noservices') and controller.version not in ["juno", "kilo", "liberty"] and controller.get('role', 'primary') == 'primary' %}
{%- set should_run = '/bin/true' %}
{%- endif %}
+{%- if controller.get('db_migrations', {}).max_count is defined %}
+{%- set batches = " --max-count %s" % controller.db_migrations.max_count %}
+{%- else %}
+{%- set batches = "" %}
+{%- endif %}
nova_controller_online_data_migrations:
cmd.run:
- - name: nova-manage db online_data_migrations
+ - name: nova-manage db online_data_migrations{{ batches }}
- onlyif: {{ should_run }}
- runas: 'nova'
diff --git a/nova/files/etc-qemu-kvm b/nova/files/etc-qemu-kvm
new file mode 100644
index 0000000..7ba26ec
--- /dev/null
+++ b/nova/files/etc-qemu-kvm
@@ -0,0 +1,18 @@
+# Set to 1 to enable KSM, 0 to disable KSM, and AUTO to use default settings.
+# After changing this setting restart the qemu-kvm service.
+KSM_ENABLED={{ params.get('ksm_enabled', 'AUTO') }}
+SLEEP_MILLISECS={{ params.get('sleep_millisecs', 200) }}
+
+# To load the vhost_net module, which in some cases can speed up
+# network performance, set VHOST_NET_ENABLED to 1.
+#VHOST_NET_ENABLED=0
+{%- if params.vhost_net_enabled is defined %}
+VHOST_NET_ENABLED={{ params.vhost_net_enabled }}
+{%- endif %}
+
+# Set this to 1 if you want hugepages to be available to kvm under
+# /run/hugepages/kvm
+#KVM_HUGEPAGES=0
+{%- if params.kvm_hugepages is defined %}
+KVM_HUGEPAGES={{ params.kvm_hugepages }}
+{%- endif %}
diff --git a/nova/files/grafana_dashboards/nova_instances_prometheus.json b/nova/files/grafana_dashboards/nova_instances_prometheus.json
index f98b327..4273df2 100644
--- a/nova/files/grafana_dashboards/nova_instances_prometheus.json
+++ b/nova/files/grafana_dashboards/nova_instances_prometheus.json
@@ -599,14 +599,14 @@
"steppedLine": false,
"targets": [
{
- "expr": "rate(libvirt_domain_info_cpu_time_seconds_total{host=~\"$host\",domain=~\"$instance\"}[$rate_interval])",
+ "expr": "rate(libvirt_domain_info_cpu_time_seconds_total{host=~\"$host\",instance_name=~\"$instance\"}[$rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "usage",
"refId": "C"
},
{
- "expr": "libvirt_domain_info_virtual_cpus{host=~\"$host\",domain=~\"$instance\"}",
+ "expr": "libvirt_domain_info_virtual_cpus{host=~\"$host\",instance_name=~\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "total",
@@ -701,7 +701,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "libvirt_domain_info_memory_usage_bytes{host=~\"$host\",domain=~\"$instance\"}",
+ "expr": "libvirt_domain_info_memory_usage_bytes{host=~\"$host\",instance_name=~\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "usage",
@@ -798,7 +798,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "sum(rate(libvirt_domain_block_stats_read_bytes_total{host=~\"$host\",domain=~\"$instance\"}[$rate_interval]))",
+ "expr": "sum(rate(libvirt_domain_block_stats_read_bytes_total{host=~\"$host\",instance_name=~\"$instance\"}[$rate_interval]))",
"format": "time_series",
"instant": false,
"intervalFactor": 2,
@@ -806,7 +806,7 @@
"refId": "A"
},
{
- "expr": "sum(rate(libvirt_domain_block_stats_write_bytes_total{host=~\"$host\",domain=~\"$instance\"}[$rate_interval]))",
+ "expr": "sum(rate(libvirt_domain_block_stats_write_bytes_total{host=~\"$host\",instance_name=~\"$instance\"}[$rate_interval]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "write",
@@ -908,7 +908,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "sum(rate(libvirt_domain_interface_stats_receive_bytes_total{host=~\"$host\",domain=~\"$instance\"}[$rate_interval]))",
+ "expr": "sum(rate(libvirt_domain_interface_stats_receive_bytes_total{host=~\"$host\",instance_name=~\"$instance\"}[$rate_interval]))",
"format": "time_series",
"instant": false,
"intervalFactor": 2,
@@ -916,7 +916,7 @@
"refId": "A"
},
{
- "expr": "sum(rate(libvirt_domain_interface_stats_transmit_bytes_total{host=~\"$host\",domain=~\"$instance\"}[$rate_interval]))",
+ "expr": "sum(rate(libvirt_domain_interface_stats_transmit_bytes_total{host=~\"$host\",instance_name=~\"$instance\"}[$rate_interval]))",
"format": "time_series",
"instant": false,
"intervalFactor": 2,
@@ -1013,7 +1013,7 @@
"multi": true,
"name": "instance",
"options": [],
- "query": "label_values(libvirt_domain_info_virtual_cpus{host=~\"$host\"},domain)",
+ "query": "label_values(libvirt_domain_info_virtual_cpus{host=~\"$host\"},instance_name)",
"refresh": 1,
"regex": "",
"sort": 1,
diff --git a/nova/files/grafana_dashboards/nova_utilization_prometheus.json b/nova/files/grafana_dashboards/nova_utilization_prometheus.json
index 2fbf7fd..43060e6 100644
--- a/nova/files/grafana_dashboards/nova_utilization_prometheus.json
+++ b/nova/files/grafana_dashboards/nova_utilization_prometheus.json
@@ -970,21 +970,8 @@
{%- raw %}
"format": "time_series",
"intervalFactor": 2,
- "legendFormat": "used",
- "refId": "B"
- },
- {
-{%- endraw %}
-{%- if parameters is defined and parameters.get('nova_compute_ceph_ephemeral', False) == True %}
- "expr": "max(avg((openstack_nova_disk - openstack_nova_disk_available) and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance))",
-{%- else %}
- "expr": "max(sum((openstack_nova_disk - openstack_nova_disk_available) and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance))",
-{%- endif %}
-{%- raw %}
- "format": "time_series",
- "intervalFactor": 2,
"legendFormat": "allocated",
- "refId": "C"
+ "refId": "B"
}
],
"thresholds": [],
@@ -1037,9 +1024,10 @@
"#d44a3a"
],
"datasource": null,
+ "decimals": 2,
"format": "percentunit",
"gauge": {
- "maxValue": 1,
+ "maxValue": 2,
"minValue": 0,
"show": true,
"thresholdLabels": false,
@@ -1047,11 +1035,11 @@
},
"gridPos": {
"h": 5,
- "w": 3,
+ "w": 6,
"x": 18,
"y": 11
},
- "id": 47,
+ "id": 55,
"interval": null,
"links": [],
"mappingType": 1,
@@ -1100,94 +1088,7 @@
"refId": "A"
}
],
- "thresholds": "0.85,0.95",
- "title": "Disk Usage %",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": null,
- "decimals": 2,
- "format": "percentunit",
- "gauge": {
- "maxValue": 6,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 5,
- "w": 3,
- "x": 21,
- "y": 11
- },
- "id": 55,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
-{%- endraw %}
-{%- if parameters is defined and parameters.get('nova_compute_ceph_ephemeral', False) == True %}
- "expr": "max(avg((openstack_nova_disk - openstack_nova_disk_available) and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance)) / max(avg(openstack_nova_disk and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance))",
-{%- else %}
- "expr": "max(sum((openstack_nova_disk - openstack_nova_disk_available) and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance)) / max(sum(openstack_nova_disk and on (hostname) (openstack_nova_service_status == 1 and openstack_nova_service_state == 1)) by (instance))",
-{%- endif %}
-{%- raw %}
- "format": "time_series",
- "intervalFactor": 2,
- "refId": "A"
- }
- ],
- "thresholds": "2,4",
+ "thresholds": "1,1.5",
"title": "Disk Allocated %",
"type": "singlestat",
"valueFontSize": "80%",
@@ -1778,94 +1679,6 @@
"valueName": "current"
},
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": null,
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 5,
- "w": 5,
- "x": 0,
- "y": 12
- },
- "id": 26,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "scopedVars": {
- "aggregate": {
- "isNone": true,
- "selected": true,
- "text": "None",
- "value": ""
- }
- },
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "max(openstack_nova_aggregate_used_disk{aggregate=\"$aggregate\"} / openstack_nova_aggregate_disk{aggregate=\"$aggregate\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "refId": "A"
- }
- ],
- "thresholds": "0.85,0.95",
- "title": "Disk Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
"aliasColors": {},
"bars": false,
"dashLength": 10,
@@ -1874,8 +1687,8 @@
"fill": 1,
"gridPos": {
"h": 5,
- "w": 14,
- "x": 5,
+ "w": 19,
+ "x": 0,
"y": 12
},
"id": 25,
@@ -1922,15 +1735,8 @@
"expr": "max(openstack_nova_aggregate_used_disk{aggregate=\"$aggregate\"})",
"format": "time_series",
"intervalFactor": 2,
- "legendFormat": "used",
- "refId": "B"
- },
- {
- "expr": "max(openstack_nova_aggregate_disk{aggregate=\"$aggregate\"} - openstack_nova_aggregate_disk_available{aggregate=\"$aggregate\"})",
- "format": "time_series",
- "intervalFactor": 2,
"legendFormat": "allocated",
- "refId": "C"
+ "refId": "B"
}
],
"thresholds": [],
@@ -2043,13 +1849,13 @@
"tableColumn": "",
"targets": [
{
- "expr": "max((openstack_nova_aggregate_disk{aggregate=\"$aggregate\"} - openstack_nova_aggregate_disk_available{aggregate=\"$aggregate\"}) / openstack_nova_aggregate_disk{aggregate=\"$aggregate\"})",
+ "expr": "max(openstack_nova_aggregate_used_disk{aggregate=\"$aggregate\"} / openstack_nova_aggregate_disk{aggregate=\"$aggregate\"})",
"format": "time_series",
"intervalFactor": 2,
"refId": "A"
}
],
- "thresholds": "0.9,1",
+ "thresholds": "1,1.5",
"title": "Current Disk Allocation Ratio",
"type": "singlestat",
"valueFontSize": "80%",
@@ -2653,93 +2459,6 @@
"valueName": "current"
},
{
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": null,
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 5,
- "w": 5,
- "x": 0,
- "y": 13
- },
- "id": 34,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "scopedVars": {
- "host": {
- "selected": true,
- "text": "cmp1",
- "value": "cmp1"
- }
- },
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "max(openstack_nova_used_disk{hostname=\"$host\"} / openstack_nova_disk{hostname=\"$host\"})",
- "format": "time_series",
- "intervalFactor": 2,
- "refId": "A"
- }
- ],
- "thresholds": "0.85,0.95",
- "title": "Disk Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
"aliasColors": {},
"bars": false,
"dashLength": 10,
@@ -2748,8 +2467,8 @@
"fill": 1,
"gridPos": {
"h": 5,
- "w": 14,
- "x": 5,
+ "w": 19,
+ "x": 0,
"y": 13
},
"id": 35,
@@ -2795,15 +2514,8 @@
"expr": "max(openstack_nova_used_disk{hostname=\"$host\"})",
"format": "time_series",
"intervalFactor": 2,
- "legendFormat": "used",
- "refId": "B"
- },
- {
- "expr": "max(openstack_nova_disk{hostname=\"$host\"} - openstack_nova_disk_available{hostname=\"$host\"})",
- "format": "time_series",
- "intervalFactor": 2,
"legendFormat": "allocated",
- "refId": "C"
+ "refId": "B"
}
],
"thresholds": [],
@@ -2915,13 +2627,13 @@
"tableColumn": "",
"targets": [
{
- "expr": "max((openstack_nova_disk{hostname=\"$host\"} - openstack_nova_disk_available{hostname=\"$host\"}) / openstack_nova_disk{hostname=\"$host\"})",
+ "expr": "max(openstack_nova_used_disk{hostname=\"$host\"} / openstack_nova_disk{hostname=\"$host\"})",
"format": "time_series",
"intervalFactor": 2,
"refId": "A"
}
],
- "thresholds": "0.9,1",
+ "thresholds": "1,1.5",
"title": "Current Disk Allocation Ratio",
"type": "singlestat",
"valueFontSize": "80%",
@@ -3041,6 +2753,6 @@
"timezone": "",
"title": "Nova - Utilization",
"uid": null,
- "version": 2
+ "version": 3
}
{%- endraw %}
diff --git a/nova/files/pike/nova-compute.conf.Debian b/nova/files/pike/nova-compute.conf.Debian
index 418f931..10d3352 100644
--- a/nova/files/pike/nova-compute.conf.Debian
+++ b/nova/files/pike/nova-compute.conf.Debian
@@ -5953,12 +5953,18 @@
# backwards compatibility reasons this currently only affects the allow_expired
# check. (list value)
#service_token_roles=service
+{%- if compute.service_token_roles is defined %}
+service_token_roles = {{ compute.service_token_roles }}
+{%- endif %}
# For backwards compatibility reasons we must let valid service tokens pass that
# don't pass the service_token_roles check as valid. Setting this true will
# become the default in a future release and should be enabled if possible.
# (boolean value)
#service_token_roles_required=false
+{%- if compute.service_token_roles_required is defined %}
+service_token_roles_required = {{ compute.service_token_roles_required }}
+{%- endif %}
# Prefix to prepend at the beginning of the path. Deprecated, use identity_uri.
# (string value)
@@ -6054,6 +6060,9 @@
{%- if compute.lvm.volume_clear_size is defined %}
volume_clear_size={{ compute.lvm.volume_clear_size }}
{%- endif %}
+{%- if compute.lvm.volume_clear_ionice_level is defined %}
+volume_clear_ionice_level={{compute.lvm.volume_clear_ionice_level}}
+{%- endif %}
{%- endif %}
# The ID of the image to boot from to rescue data from a corrupted instance.
@@ -6724,6 +6733,31 @@
#volume_clear_size=0
#
+# What I/O schedule class and priority level should be used when clearing
+# a volume. Only takes effect if ``volume_clear`` option is set to ``zero`` or
+# ``shred``. For more info about classes and priorities, check ``man ionice``.
+#
+# Possible values:
+#
+# * idle - use the Idle scheduling class. This option impacts system performance
+# the least with a downside of increased time for volume clearance
+# * from 0 to 7 - use the Best-effort scheduling class and set the priority level
+# to the specified number
+#
+# If not set - do not set I/O scheduling class explicitly. Usually, it's the most
+# aggressive option in terms of system performance impact.
+#
+# Related options:
+#
+# * images_type - must be set to ``lvm``
+# * volume_clear - must be set and the value must be different than ``none``
+# for this option to have any impact
+# (string value)
+# Possible values:
+# 'idle', '0', '1', '2', '3', '4', '5', '6', '7'
+#volume_clear_ionice_level=None
+
+#
# Enable snapshot compression for ``qcow2`` images.
#
# Note: you can set ``snapshot_image_format`` to ``qcow2`` to force all
diff --git a/nova/files/pike/nova-controller.conf.Debian b/nova/files/pike/nova-controller.conf.Debian
index ef3d1b5..8f6eacd 100644
--- a/nova/files/pike/nova-controller.conf.Debian
+++ b/nova/files/pike/nova-controller.conf.Debian
@@ -5794,6 +5794,15 @@
#reauthenticate=true
+[keystone]
+interface = controller.identity.get('interface', 'internal')
+{%- if controller.identity.valid_interfaces is defined %}
+{%- set valid_interfaces = controller.identity.valid_interfaces|join(',') %}
+{%- else %}
+{%- set valid_interfaces = 'internal' %}
+{%- endif %}
+valid_interfaces = {{ valid_interfaces }}
+
[keystone_authtoken]
#
@@ -5975,12 +5984,18 @@
# backwards compatibility reasons this currently only affects the allow_expired
# check. (list value)
#service_token_roles=service
+{%- if controller.service_token_roles is defined %}
+service_token_roles = {{ controller.service_token_roles }}
+{%- endif %}
# For backwards compatibility reasons we must let valid service tokens pass that
# don't pass the service_token_roles check as valid. Setting this true will
# become the default in a future release and should be enabled if possible.
# (boolean value)
#service_token_roles_required=false
+{%- if controller.service_token_roles_required is defined %}
+service_token_roles_required = {{ controller.service_token_roles_required }}
+{%- endif %}
# Prefix to prepend at the beginning of the path. Deprecated, use identity_uri.
# (string value)
@@ -6693,6 +6708,30 @@
#volume_clear_size=0
#
+# What I/O schedule class and priority level should be used when clearing
+# a volume. Only takes effect if ``volume_clear`` option is set to ``zero`` or
+# ``shred``. For more info about classes and priorities, check ``man ionice``.
+#
+# Possible values:
+#
+# * idle - use the Idle scheduling class. This option impacts system performance
+# the least with a downside of increased time for volume clearance
+# * from 0 to 7 - use the Best-effort scheduling class and set the priority level
+# to the specified number
+#
+# If not set - do not set I/O scheduling class explicitly. Usually, it's the most
+# aggressive option in terms of system performance impact.
+#
+# Related options:
+#
+# * images_type - must be set to ``lvm``
+# * volume_clear - must be set and the value must be different than ``none``
+# for this option to have any impact
+# (string value)
+# Possible values:
+# 'idle', '0', '1', '2', '3', '4', '5', '6', '7'
+#volume_clear_ionice_level=None
+#
# Enable snapshot compression for ``qcow2`` images.
#
# Note: you can set ``snapshot_image_format`` to ``qcow2`` to force all
diff --git a/nova/files/queens/nova-compute.conf.Debian b/nova/files/queens/nova-compute.conf.Debian
index 5d81c47..443cdde 100644
--- a/nova/files/queens/nova-compute.conf.Debian
+++ b/nova/files/queens/nova-compute.conf.Debian
@@ -4685,6 +4685,9 @@
# enabled_vgpu_types = GRID K100,Intel GVT-g,MxGPU.2,nvidia-11
# (list value)
#enabled_vgpu_types =
+{%- if compute.get('devices', {}).enabled_vgpu_types is defined %}
+enabled_vgpu_types = {{ compute.devices.enabled_vgpu_types }}
+{% endif %}
[ephemeral_storage_encryption]
@@ -7265,19 +7268,19 @@
# What I/O schedule class and priority level should be used when clearing
# a volume. Only takes effect if ``volume_clear`` option is set to ``zero`` or
# ``shred``. For more info about classes and priorities, check ``man ionice``.
-#
+#
# Possible values:
-#
+#
# * idle - use the Idle scheduling class. This option impacts system performance
# the least with a downside of increased time for volume clearance
# * from 0 to 7 - use the Best-effort scheduling class and set the priority level
# to the specified number
-#
+#
# If not set - do not set I/O scheduling class explicitly. Usually, it's the most
# aggressive option in terms of system performance impact.
-#
+#
# Related options:
-#
+#
# * images_type - must be set to ``lvm``
# * volume_clear - must be set and the value must be different than ``none``
# for this option to have any impact
@@ -7819,6 +7822,15 @@
extension_sync_interval={{ compute.network.get('extension_sync_interval', '600') }}
#
+# Integer value representing the number of retry attemps
+# if connection error happens.
+# (integer value)
+#retry = 0
+{%- if compute.network.retry is defined %}
+retry = {{ compute.network.retry }}
+{%- endif %}
+
+#
# When set to True, this option indicates that Neutron will be used to
# proxy
# metadata requests and resolve instance ids. Otherwise, the instance
@@ -10861,8 +10873,8 @@
{%- endif %}
[oslo_policy]
-{%- if compute.policy is defined %}
-{%- set _data = compute.policy %}
+{%- if compute.oslo_policy is defined %}
+{%- set _data = compute.oslo_policy %}
{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
{%- endif %}
diff --git a/nova/files/queens/nova-controller.conf.Debian b/nova/files/queens/nova-controller.conf.Debian
index c5239d7..d711e98 100644
--- a/nova/files/queens/nova-controller.conf.Debian
+++ b/nova/files/queens/nova-controller.conf.Debian
@@ -6104,6 +6104,9 @@
# List of interfaces, in order of preference, for endpoint URL. (list
# value)
#valid_interfaces = internal,public
+{%- if controller.identity.valid_interfaces is defined %}
+valid_interfaces = {{ controller.identity.valid_interfaces|join(',') }}
+{%- endif %}
# The default region_name for endpoint URL discovery. (string value)
#region_name = <None>
@@ -7684,6 +7687,15 @@
#extension_sync_interval = 600
#
+# Integer value representing the number of retry attemps
+# if connection error happens.
+# (integer value)
+#retry = 0
+{%- if controller.network.retry is defined %}
+retry = {{ controller.network.retry }}
+{%- endif %}
+
+#
# When set to True, this option indicates that Neutron will be used to
# proxy
# metadata requests and resolve instance ids. Otherwise, the instance
@@ -10602,8 +10614,8 @@
{%- endif %}
[oslo_policy]
-{%- if controller.policy is defined %}
-{%- set _data = controller.policy %}
+{%- if controller.oslo_policy is defined %}
+{%- set _data = controller.oslo_policy %}
{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
{%- endif %}
diff --git a/nova/files/rocky/nova-compute.conf.Debian b/nova/files/rocky/nova-compute.conf.Debian
index 8687c77..32280db 100644
--- a/nova/files/rocky/nova-compute.conf.Debian
+++ b/nova/files/rocky/nova-compute.conf.Debian
@@ -4091,6 +4091,9 @@
# enabled_vgpu_types = GRID K100,Intel GVT-g,MxGPU.2,nvidia-11
# (list value)
#enabled_vgpu_types =
+{%- if compute.get('devices', {}).enabled_vgpu_types is defined %}
+enabled_vgpu_types = {{ compute.devices.enabled_vgpu_types }}
+{% endif %}
[ephemeral_storage_encryption]
diff --git a/nova/map.jinja b/nova/map.jinja
index 012aa74..9591f74 100644
--- a/nova/map.jinja
+++ b/nova/map.jinja
@@ -47,6 +47,9 @@
'debug': false,
'notification': false,
'cors': {},
+ 'oslo_policy': {
+ 'policy_file': 'policy.json'
+ },
'audit': {
'enabled': false
},
@@ -83,6 +86,9 @@
'debug': false,
'notification': false,
'cors': {},
+ 'oslo_policy': {
+ 'policy_file': 'policy.json'
+ },
'audit': {
'enabled': false
},
diff --git a/nova/meta/logrotate.yml b/nova/meta/logrotate.yml
new file mode 100644
index 0000000..27012bd
--- /dev/null
+++ b/nova/meta/logrotate.yml
@@ -0,0 +1,78 @@
+## Default: Daily rotation with 28 rotations kept
+{%- from "nova/map.jinja" import controller, compute with context %}
+
+{%- if controller.get('enabled', False) %}
+ {%- set log_interval = controller.get('logrotate', {}).get('interval', 'daily') %}
+ {%- set log_rotation = controller.get('logrotate', {}).get('rotate', 28) %}
+{%- elif compute.get('enabled', False) %}
+ {%- set log_interval = compute.get('logrotate', {}).get('interval', 'daily') %}
+ {%- set log_rotation = compute.get('logrotate', {}).get('rotate', 28) %}
+{%- endif %}
+
+{%- if controller.get('enabled', False) or compute.get('enabled', False) %}
+job:
+ nova-common:
+ - files:
+ - /var/log/nova/*.log
+ options:
+ - {{ log_interval }}
+ - rotate: {{ log_rotation }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+ - notifempty
+{%- endif %}
+{%- if compute.get('enabled', False) and compute.get('compute_driver', 'libvirt.LibvirtDriver') == 'libvirt.LibvirtDriver' %}
+ libvirtd:
+ - files:
+ - /var/log/libvirt/libvirtd.log
+ options:
+ - {{ compute.get('libvirt', {}).get('logrotate', {}).get('interval', 'weekly') }}
+ - rotate: {{ compute.get('libvirt', {}).get('logrotate', {}).get('rotate', 4) }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+ - minsize: 100k
+ libvirtd.libxl:
+ - files:
+ - /var/log/libvirt/libxl/*.log
+ options:
+ - {{ compute.get('libvirt', {}).get('logrotate', {}).get('interval', 'weekly') }}
+ - rotate: {{ compute.get('libvirt', {}).get('logrotate', {}).get('rotate', 4) }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+ libvirtd.lxc:
+ - files:
+ - /var/log/libvirt/lxc/*.log
+ options:
+ - {{ compute.get('libvirt', {}).get('logrotate', {}).get('interval', 'weekly') }}
+ - rotate: {{ compute.get('libvirt', {}).get('logrotate', {}).get('rotate', 4) }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+ libvirtd.qemu:
+ - files:
+ - /var/log/libvirt/qemu/*.log
+ options:
+ - {{ compute.get('libvirt', {}).get('logrotate', {}).get('interval', 'weekly') }}
+ - rotate: {{ compute.get('libvirt', {}).get('logrotate', {}).get('rotate', 4) }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+ libvirtd.uml:
+ - files:
+ - /var/log/libvirt/uml/*.log
+ options:
+ - {{ compute.get('libvirt', {}).get('logrotate', {}).get('interval', 'weekly') }}
+ - rotate: {{ compute.get('libvirt', {}).get('logrotate', {}).get('rotate', 4) }}
+ - missingok
+ - compress
+ - delaycompress
+ - copytruncate
+{%- endif %}
diff --git a/nova/upgrade/pre/init.sls b/nova/upgrade/pre/init.sls
index 0c5834e..4ca128d 100644
--- a/nova/upgrade/pre/init.sls
+++ b/nova/upgrade/pre/init.sls
@@ -24,6 +24,7 @@
include:
- nova.db.online_sync
+{%- if controller.version not in ["juno", "kilo", "liberty", "mitaka", "newton"] %}
nova_status:
cmd.run:
- name: nova-status upgrade check
@@ -31,6 +32,7 @@
- onlyif: /bin/false
{%- endif %}
{%- endif %}
+{%- endif %}
{%- set os_content = salt['mine.get']('I@keystone:client:os_client_config:enabled:true', 'keystone_os_client_config', 'compound').values()[0] %}
keystone_os_client_config:
diff --git a/nova/upgrade/upgrade/post.sls b/nova/upgrade/upgrade/post.sls
index e532c1d..7d4bceb 100644
--- a/nova/upgrade/upgrade/post.sls
+++ b/nova/upgrade/upgrade/post.sls
@@ -1,4 +1,4 @@
-{%- from "nova/map.jinja" import controller, compute, compute_driver_mapping with context %}
+{%- from "nova/map.jinja" import controller, compute, compute_driver_mapping, upgrade with context %}
nova_upgrade_post:
test.show_notification:
@@ -7,6 +7,7 @@
{%- if compute.get('enabled') %}
{% set host_id = salt['network.get_hostname']() %}
+ {%- if upgrade.get('manage_service_maintenance', true) %}
novav21_service_enabled:
novav21.service_enabled:
@@ -14,4 +15,5 @@
- cloud_name: admin_identity
- name: {{ host_id }}
+ {% endif %}
{% endif %}
diff --git a/nova/upgrade/upgrade/pre.sls b/nova/upgrade/upgrade/pre.sls
index e9b48ea..cc2b79a 100644
--- a/nova/upgrade/upgrade/pre.sls
+++ b/nova/upgrade/upgrade/pre.sls
@@ -1,4 +1,4 @@
-{%- from "nova/map.jinja" import controller, compute, compute_driver_mapping with context %}
+{%- from "nova/map.jinja" import controller, compute, compute_driver_mapping, upgrade with context %}
nova_upgrade_pre:
test.show_notification:
@@ -7,6 +7,7 @@
{%- if compute.get('enabled') %}
{% set host_id = salt['network.get_hostname']() %}
+ {%- if upgrade.get('manage_service_maintenance', true) %}
novav21_service_disabled:
novav21.service_disabled:
@@ -15,4 +16,5 @@
- cloud_name: admin_identity
- name: {{ host_id }}
+ {% endif %}
{% endif %}