VCPU, PCPU replaced to vCPU, pCPU

Writing style of units of measurement has been updated to be more correct.

Change-Id: I3d438239c2cf775f1fafd08f4a3052c9b7daac27
This commit is contained in:
Ivan Anfimov 2025-03-22 11:42:16 +00:00
parent 7bc20945ec
commit be43e6c503
28 changed files with 61 additions and 61 deletions
doc/source
horizon/templates/horizon/common
openstack_dashboard
dashboards
admin
defaults
flavors
hypervisors
tables.py
templates/hypervisors
instances
overview
templates/overview
tests.pyviews.py
identity/projects
project
instances/templates/instances
overview
templates/overview
views.py
static/dashboard/project/workflow/launch-instance/flavor
static/app/core/flavors
test/selenium/ui
usage

@ -11,7 +11,7 @@ As of Newton, there are no default flavors. The following table
lists the default flavors for Mitaka and earlier.
============ ========= =============== =============
Flavor VCPUs Disk (in GB) RAM (in MB)
Flavor vCPUs Disk (in GB) RAM (in MB)
============ ========= =============== =============
m1.tiny 1 1 512
m1.small 1 20 2048
@ -40,7 +40,7 @@ Create flavors
**ID** Unique ID (integer or UUID) for the
new flavor. If specifying 'auto', a
UUID will be automatically generated.
**VCPUs** Enter the number of virtual CPUs to
**vCPUs** Enter the number of virtual CPUs to
use.
**RAM (MB)** Enter the amount of RAM to use, in
megabytes.

@ -62,7 +62,7 @@ Track usage
Use the :guilabel:`Overview` category to track usage of instances
for each project.
You can track costs per month by showing meters like number of VCPUs,
You can track costs per month by showing meters like number of vCPUs,
disks, RAM, and uptime of all your instances.
#. Log in to the Dashboard and select the :guilabel:`admin` project from the

@ -71,7 +71,7 @@ The following table describes the Compute and Block Storage service quotas:
| Snapshots | Volume snapshots allowed for | Block Storage |
| | each project. | |
+--------------------+------------------------------------+---------------+
| VCPUs | Instance cores allowed for each | Compute |
| vCPUs | Instance cores allowed for each | Compute |
| | project. | |
+--------------------+------------------------------------+---------------+
| Volumes | Volumes allowed for each | Block Storage |

@ -2154,12 +2154,12 @@ Default:
When launching a new instance the default flavor is sorted by RAM usage in
ascending order.
You can customize the sort order by: id, name, ram, disk and vcpus.
You can customize the sort order by: id, name, ram, disk and vCPUs.
Additionally, you can insert any custom callback function. You can also
provide a flag for reverse sort.
See the description in local_settings.py.example for more information.
This example sorts flavors by vcpus in descending order:
This example sorts flavors by vCPUs in descending order:
.. code-block:: python

@ -13,7 +13,7 @@
<dd class="small">{{ usage.summary.instances|default:'0' }}</dd>
<dt class="small">{% trans "Active RAM:" %}</dt>
<dd class="small">{{ usage.summary.memory_mb|mb_float_format|default:'0' }}</dd>
<dt class="small">{% trans "This Period's VCPU-Hours:" %}</dt>
<dt class="small">{% trans "This Period's vCPU-Hours:" %}</dt>
<dd class="small">{{ usage.summary.vcpu_hours|floatformat:2|default:'0' }}</dd>
<dt class="small">{% trans "This Period's GB-Hours:" %}</dt>
<dd class="small">{{ usage.summary.disk_gb_hours|floatformat:2|default:'0' }}</dd>

@ -66,7 +66,7 @@ def get_compute_quota_name(quota):
'injected_file_content_bytes': _('Injected File Content (B)'),
'injected_file_path_bytes': _('Length of Injected File Path'),
'metadata_items': _('Metadata Items'),
'cores': _('VCPUs'),
'cores': _('vCPUs'),
'instances': _('Instances'),
'injected_files': _('Injected Files'),
'ram': _('RAM (MB)'),

@ -30,7 +30,7 @@ LOG = logging.getLogger(__name__)
class UpdateDefaultComputeQuotasAction(workflows.Action):
instances = forms.IntegerField(min_value=-1, label=_("Instances"))
cores = forms.IntegerField(min_value=-1, label=_("VCPUs"))
cores = forms.IntegerField(min_value=-1, label=_("vCPUs"))
ram = forms.IntegerField(min_value=-1, label=_("RAM (MB)"))
metadata_items = forms.IntegerField(min_value=-1,
label=_("Metadata Items"))

@ -137,7 +137,7 @@ def get_extra_specs(flavor):
class FlavorsTable(tables.DataTable):
name = tables.WrappingColumn('name', verbose_name=_('Flavor Name'))
vcpus = tables.Column('vcpus', verbose_name=_('VCPUs'))
vcpus = tables.Column('vcpus', verbose_name=_('vCPUs'))
ram = tables.Column(get_size,
verbose_name=_('RAM'),
attrs={'data-type': 'size'})

@ -28,9 +28,9 @@ from openstack_dashboard import api
class CreateFlavorInfoAction(workflows.Action):
_flavor_id_regex = (r'^[a-zA-Z0-9. _-]+$')
_flavor_id_help_text = _("flavor id can only contain alphanumeric "
_flavor_id_help_text = _("Flavor id can only contain alphanumeric "
"characters, underscores, periods, hyphens, "
"spaces. Use 'auto' to automatically generate id")
"spaces. Use 'auto' to automatically generate ID.")
name = forms.CharField(
label=_("Name"),
max_length=255)
@ -40,7 +40,7 @@ class CreateFlavorInfoAction(workflows.Action):
initial='auto',
max_length=255,
help_text=_flavor_id_help_text)
vcpus = forms.IntegerField(label=_("VCPUs"),
vcpus = forms.IntegerField(label=_("vCPUs"),
min_value=1,
max_value=2147483647)
memory_mb = forms.IntegerField(label=_("RAM (MB)"),

@ -72,21 +72,21 @@ class AdminProvidersTable(tables.DataTable):
name = tables.WrappingColumn("name",
verbose_name=_("Resource Provider Name"))
vcpus_used = tables.Column("vcpus_used",
verbose_name=_("VCPUs used"))
verbose_name=_("vCPUs used"))
vcpus_reserved = tables.Column("vcpus_reserved",
verbose_name=_("VCPUs reserved"))
verbose_name=_("vCPUs reserved"))
vcpus = tables.Column("vcpus",
verbose_name=_("VCPUs total"))
verbose_name=_("vCPUs total"))
vcpus_ar = tables.Column("vcpus_ar",
verbose_name=_("VCPUs allocation ratio"))
verbose_name=_("vCPUs allocation ratio"))
pcpus_used = tables.Column("pcpus_used",
verbose_name=_("PCPUs used"))
verbose_name=_("pCPUs used"))
pcpus_reserved = tables.Column("pcpus_reserved",
verbose_name=_("PCPUs reserved"))
verbose_name=_("pCPUs reserved"))
pcpus = tables.Column("pcpus",
verbose_name=_("PCPUs total"))
verbose_name=_("pCPUs total"))
pcpus_ar = tables.Column("pcpus_ar",
verbose_name=_("PCPUs allocation ratio"))
verbose_name=_("pCPUs allocation ratio"))
memory_used = tables.Column("memory_mb_used",
verbose_name=_("RAM used"),
attrs={'data-type': 'size'},

@ -28,7 +28,7 @@
<h4>{{ provider.name }}</h4>
<div class="col-sm-4 d3_quota_bar col-lg-3 col-md-2 col-xs-4">
<div class="pie-chart-usage" data-used="{% widthratio provider.vcpus_used provider.vcpus_capacity 100 %}"></div>
<div class="h5">{% trans "VCPU Usage" %}</div>
<div class="h5">{% trans "vCPU Usage" %}</div>
{% if provider.inventories.VCPU != None %}
<div class="h6">
{% blocktrans with used=provider.vcpus_used|intcomma available=provider.vcpus_capacity|intcomma %}Used <span> {{ used }} </span> of <span> {{ available }} </span>{% endblocktrans %}
@ -38,7 +38,7 @@
<div class="col-sm-4 d3_quota_bar col-lg-3 col-md-2 col-xs-4">
<div class="pie-chart-usage" data-used="{% widthratio provider.pcpus_used provider.pcpus_capacity 100 %}"></div>
<div class="h5">{% trans "PCPU Usage" %}</div>
<div class="h5">{% trans "pCPU Usage" %}</div>
{% if provider.inventories.PCPU != None %}
<div class="h6">
{% blocktrans with used=provider.pcpus_used|intcomma available=provider.pcpus_capacity|intcomma %}Used <span> {{ used }} </span> of <span> {{ available }} </span>{% endblocktrans %}

@ -197,7 +197,7 @@ class InstanceViewTest(test.BaseAdminViewTests):
self.assertContains(res, "server_1", 2, 200)
self.assertContains(res, "10.0.0.1", 1, 200)
self.assertContains(res, "RAM</th><td>512MB", 1, 200)
self.assertContains(res, "VCPUs</th><td>1", 1, 200)
self.assertContains(res, "vCPUs</th><td>1", 1, 200)
self.assertContains(res, "Size</th><td>0 GB", 1, 200)
self.assertContains(res, "Active", 1, 200)
self.assertContains(res, "Running", 1, 200)

@ -1,6 +1,6 @@
{% load i18n %}{% trans "Usage Report For Period:" %},{{ usage.start|date:"Y-m-d" }},{{ usage.end|date:"Y-m-d" }}
{% trans "Active Instances:" %},{{ usage.summary.instances }}
{% trans "Total VCPU Usage (Hours):" %},{{ usage.summary.vcpu_hours|floatformat:2 }}
{% trans "Total vCPU Usage (Hours):" %},{{ usage.summary.vcpu_hours|floatformat:2 }}
{% trans "Total Active RAM (MB):" %},{{ usage.summary.memory_mb }}
{% trans "Total Memory Usage (Hours):" %},{{ usage.summary.memory_mb_hours|floatformat:2 }}
{% trans "Total Disk Size (GB):" %},{{ usage.summary.local_gb }}

Can't render this file because it contains an unexpected character in line 1 and column 25.

@ -163,7 +163,7 @@ class UsageViewTests(test.BaseAdminViewTests):
res = self.client.get(csv_url)
self.assertTemplateUsed(res, 'admin/overview/usage.csv')
self.assertIsInstance(res.context['usage'], usage.GlobalUsage)
hdr = '"Project Name","VCPUs","RAM (MB)","Disk (GB)","Usage (Hours)"'
hdr = '"Project Name","vCPUs","RAM (MB)","Disk (GB)","Usage (Hours)"'
self.assertContains(res, '%s\r\n' % hdr)
if nova_stu_enabled:

@ -30,7 +30,7 @@ from openstack_dashboard import usage
class GlobalUsageCsvRenderer(csvbase.BaseCsvResponse):
columns = [_("Project Name"), _("VCPUs"), _("RAM (MB)"),
columns = [_("Project Name"), _("vCPUs"), _("RAM (MB)"),
_("Disk (GB)"), _("Usage (Hours)")]
def get_row_data(self):

@ -1201,7 +1201,7 @@ class UsageViewTests(test.BaseAdminViewTests):
self.assertTemplateUsed(res, 'project/overview/usage.csv')
self.assertIsInstance(res.context['usage'], usage.ProjectUsage)
hdr = ('"Instance Name","VCPUs","RAM (MB)","Disk (GB)",'
hdr = ('"Instance Name","vCPUs","RAM (MB)","Disk (GB)",'
'"Usage (Hours)","Age (Seconds)","State"')
self.assertContains(res, '%s\r\n' % hdr)
@ -1224,7 +1224,7 @@ class UsageViewTests(test.BaseAdminViewTests):
res = self.client.get(csv_url)
self.assertIsInstance(res.context['usage'], usage.ProjectUsage)
hdr = ('"Instance Name","VCPUs","RAM (MB)","Disk (GB)",'
hdr = ('"Instance Name","vCPUs","RAM (MB)","Disk (GB)",'
'"Usage (Hours)","Age (Seconds)","State"')
self.assertContains(res, '%s\r\n' % hdr)
usage_1_quoted = ('"\'=cmd|\' /C calc\'!A0","1","512","0","122.87",'

@ -96,7 +96,7 @@ class CommonQuotaAction(workflows.Action):
class ComputeQuotaAction(CommonQuotaAction):
instances = forms.IntegerField(min_value=-1, label=_("Instances"))
cores = forms.IntegerField(min_value=-1, label=_("VCPUs"))
cores = forms.IntegerField(min_value=-1, label=_("vCPUs"))
ram = forms.IntegerField(min_value=-1, label=_("RAM (MB)"))
metadata_items = forms.IntegerField(min_value=-1,
label=_("Metadata Items"))

@ -69,8 +69,8 @@
<dd>{{ instance.full_flavor.id }}</dd>
<dt>{% trans "RAM" %}</dt>
<dd>{{ instance.full_flavor.ram|mb_float_format }}</dd>
<dt>{% trans "VCPUs" %}</dt>
<dd>{{ instance.full_flavor.vcpus }} {% trans "VCPU" %}</dd>
<dt>{% trans "vCPUs" %}</dt>
<dd>{{ instance.full_flavor.vcpus }} {% trans "vCPU" %}</dd>
<dt>{% trans "Disk" %}</dt>
<dd>{{ instance.full_flavor.disk }}{% trans "GB" %}</dd>
{% if instance.full_flavor.ephemeral %}

@ -7,7 +7,7 @@
<table class="flavor_table table table-striped table-fixed">
<tbody>
<tr><td class="flavor_name">{% trans "Name" %}</td><td><span id="flavor_name" class="truncate"></span></td></tr>
<tr><td class="flavor_name">{% trans "VCPUs" %}</td><td><span id="flavor_vcpus"></span></td></tr>
<tr><td class="flavor_name">{% trans "vCPUs" %}</td><td><span id="flavor_vcpus"></span></td></tr>
<tr><td class="flavor_name">{% trans "Root Disk" %}</td><td><span id="flavor_disk"></span> {% trans "GB" %}</td></tr>
<tr><td class="flavor_name">{% trans "Ephemeral Disk" %}</td><td><span id="flavor_ephemeral"></span> {% trans "GB" %}</td></tr>
<tr><td class="flavor_name">{% trans "Total Disk" %}</td><td><span id="flavor_disk_total"></span> {% trans "GB" %}</td></tr>
@ -38,7 +38,7 @@
{{ endminifyspace }}
<div class="quota_title">
<strong class="pull-left">{% trans "Number of VCPUs" %}</strong>
<strong class="pull-left">{% trans "Number of vCPUs" %}</strong>
<span class="pull-right">
{% blocktrans trimmed with used=usages.totalCoresUsed|intcomma quota=usages.maxTotalCores|intcomma|quotainf %}
{{ used }} of {{ quota }} Used

@ -2,7 +2,7 @@
<a href="#" id="flavor_details_{{ id }}" class="link-popover" rel="popover" tabindex="0" data-trigger="focus" data-content="
<table class=&quot;table table-bordered&quot;>
<tr><th>{% trans 'ID' %}</th><td>{{ flavor_id }}</td></tr>
<tr><th>{% trans 'VCPUs' %}</th><td>{{ vcpus }}</td></tr>
<tr><th>{% trans 'vCPUs' %}</th><td>{{ vcpus }}</td></tr>
<tr><th>{% trans 'RAM' %}</th><td>{{ size_ram }}</td></tr>
<tr><th>{% trans 'Size' %}</th><td>{{ size_disk }}</td></tr>
</table>

@ -1,7 +1,7 @@
{% load i18n %}{% trans "Usage Report For Period:" %},{{ usage.start|date:"Y-m-d" }},{{ usage.end|date:"Y-m-d" }}
{% trans "Project ID:" %},{{ usage.project_id }}
{% trans "Active Instances:" %},{{ usage.summary.instances }}
{% trans "Total VCPU Usage (Hours):" %},{{ usage.summary.vcpu_hours|floatformat:2 }}
{% trans "Total vCPU Usage (Hours):" %},{{ usage.summary.vcpu_hours|floatformat:2 }}
{% trans "Total Active RAM (MB):" %},{{ usage.summary.memory_mb }}
{% trans "Total Memory Usage (Hours):" %},{{ usage.summary.memory_mb_hours|floatformat:2 }}
{% trans "Total Disk Size (GB):" %},{{ usage.summary.local_gb }}

Can't render this file because it contains an unexpected character in line 1 and column 25.

@ -34,7 +34,7 @@ from openstack_dashboard.utils import filters
class ProjectUsageCsvRenderer(csvbase.BaseCsvResponse):
columns = [_("Instance Name"), _("VCPUs"), _("RAM (MB)"),
columns = [_("Instance Name"), _("vCPUs"), _("RAM (MB)"),
_("Disk (GB)"), _("Usage (Hours)"),
_("Age (Seconds)"), _("State")]

@ -44,7 +44,7 @@
// Labels used by quota charts
ctrl.chartTotalInstancesLabel = gettext('Total Instances');
ctrl.chartTotalVcpusLabel = gettext('Total VCPUs');
ctrl.chartTotalVcpusLabel = gettext('Total vCPUs');
ctrl.chartTotalRamLabel = gettext('Total RAM');
ctrl.chartTotalVolumeLabel = gettext('Total Volumes');
ctrl.chartTotalVolumeStorageLabel = gettext('Total Volume Storage');
@ -56,7 +56,7 @@
singleton: true
},
{
label: gettext('VCPUs'),
label: gettext('vCPUs'),
name: 'vcpus',
singleton: true
},
@ -112,7 +112,7 @@
detailsTemplateUrl: basePath + 'flavor/flavor-details.html',
columns: [
{id: 'name', title: gettext('Name'), priority: 1},
{id: 'vcpus', title: gettext('VCPUS'), priority: 1,
{id: 'vcpus', title: gettext('vCPUs'), priority: 1,
template: `<span class="invalid fa fa-exclamation-triangle"
ng-show="item.errors.vcpus"
uib-popover="{$ item.errors.vcpus $}"
@ -419,7 +419,7 @@
var coresRequired = instanceCount * flavor.vcpus;
if (coresRequired > availableCores) {
/*eslint-disable max-len */
messages.vcpus = gettext('This flavor requires more VCPUs than your quota allows. Please select a smaller flavor or decrease the instance count.');
messages.vcpus = gettext('This flavor requires more vCPUs than your quota allows. Please select a smaller flavor or decrease the instance count.');
/*eslint-enable max-len */
}

@ -88,7 +88,7 @@
singleton: true
})
.append({
label: gettext('VCPUs'),
label: gettext('vCPUs'),
name: 'vcpus',
singleton: true
})
@ -119,7 +119,7 @@
function flavorProperties() {
return {
name: gettext('Flavor Name'),
vcpus: gettext('VCPUs'),
vcpus: gettext('vCPUs'),
ram: {label: gettext('RAM'), filters: ['mb']},
disk: {label: gettext('Root Disk'), filters: ['gb']},
'OS-FLV-EXT-DATA:ephemeral': {label: gettext('Ephemeral Disk'), filters: ['gb']},

@ -52,23 +52,23 @@ def test_vcpu_pcpu_data_display(live_server, driver, user, dashboard_data):
driver.get(live_server.url + '/admin/hypervisors')
assert (driver.find_element_by_xpath(
f"//*[normalize-space()='VCPU Usage']/"
f"//*[normalize-space()='vCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231
f"span[1]").text == str(p['vcpus_used']))
assert (driver.find_element_by_xpath(
f"//*[normalize-space()='VCPU Usage']/"
f"//*[normalize-space()='vCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231
f"span[2]").text == str(p['vcpus_capacity']))
assert (driver.find_element_by_xpath(
f"//*[normalize-space()='PCPU Usage']/"
f"//*[normalize-space()='pCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231
f"span[1]").text == str(p['pcpus_used']))
assert (driver.find_element_by_xpath(
f"//*[normalize-space()='PCPU Usage']/"
f"//*[normalize-space()='pCPU Usage']/"
f"ancestor::div[contains(@class,'d3_quota_bar')]" # noqa: E231
f"/div[contains(@class,'h6')]/" # noqa: E231
f"span[2]").text == str(p['pcpus_capacity']))
@ -84,14 +84,14 @@ def test_vcpu_pcpu_data_display(live_server, driver, user, dashboard_data):
table_providers = dict(zip((x.text for x in table_header),
(x.text for x in table_row_test_provider)))
want_to_check = {"VCPUs used": p['vcpus_used'],
"VCPUs reserved": p['vcpus_reserved'],
"VCPUs total": p['vcpus'],
"VCPUs allocation ratio": p['vcpus_ar'],
"PCPUs used": p['pcpus_used'],
"PCPUs reserved": p['pcpus_reserved'],
"PCPUs total": p['pcpus'],
"PCPUs allocation ratio": p['pcpus_ar']}
want_to_check = {"vCPUs used": p['vcpus_used'],
"vCPUs reserved": p['vcpus_reserved'],
"vCPUs total": p['vcpus'],
"vCPUs allocation ratio": p['vcpus_ar'],
"pCPUs used": p['pcpus_used'],
"pCPUs reserved": p['pcpus_reserved'],
"pCPUs total": p['pcpus'],
"pCPUs allocation ratio": p['pcpus_ar']}
for key, value in want_to_check.items():
assert table_providers[key] == str(value)

@ -93,7 +93,7 @@ QUOTA_FIELDS = NOVA_QUOTA_FIELDS | CINDER_QUOTA_FIELDS | NEUTRON_QUOTA_FIELDS
QUOTA_NAMES = {
# nova
"metadata_items": _('Metadata Items'),
"cores": _('VCPUs'),
"cores": _('vCPUs'),
"instances": _('Instances'),
"injected_files": _('Injected Files'),
"injected_file_content_bytes": _('Injected File Content (B)'),

@ -29,7 +29,7 @@ class CSVSummary(tables.LinkAction):
class BaseUsageTable(tables.DataTable):
vcpus = tables.Column('vcpus', verbose_name=_("VCPUs"))
vcpus = tables.Column('vcpus', verbose_name=_("vCPUs"))
disk = tables.Column('local_gb', verbose_name=_("Disk"),
filters=(sizeformat.diskgbformat,),
attrs={"data-type": "size"})
@ -41,9 +41,9 @@ class BaseUsageTable(tables.DataTable):
class GlobalUsageTable(BaseUsageTable):
project = tables.Column('project_name', verbose_name=_("Project Name"))
vcpu_hours = tables.Column('vcpu_hours', verbose_name=_("VCPU Hours"),
help_text=_("Total VCPU usage (Number of "
"VCPU in instance * Hours Used) "
vcpu_hours = tables.Column('vcpu_hours', verbose_name=_("vCPU Hours"),
help_text=_("Total vCPU usage (Number of "
"vCPU in instance * Hours Used) "
"for the project"),
filters=(lambda v: floatformat(v, 2),))
disk_hours = tables.Column('disk_gb_hours',

@ -114,7 +114,7 @@ CHART_DEFS = [
'title': _("Compute"),
'charts': [
ChartDef("instances", _("Instances"), None, None),
ChartDef("cores", _("VCPUs"), None, None),
ChartDef("cores", _("vCPUs"), None, None),
ChartDef("ram", _("RAM"), None, (sizeformat.mb_float_format,)),
],
},