[PATCH] Issue #342: load i18n.html of the plugin
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
Apparently, in plugin code there is no way to insert new entries into
Kimchi ./ui/pages/i18n.html.tmpl, so every plugin should provide its own
i18n.html.tmpl.
each plugin provides a "plugins/plugin-name/ui/pages/i18n.html.tmpl",
and maps it to the URI "plugins/plugin-name/i18n.html". This is already
supported by the kimchi back-end. What we have to do is just to load
"plugins/plugin-name/i18n.html" in the front-end code.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.api.js | 3 ++-
ui/js/src/kimchi.main.js | 19 ++++++++++++++++++-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
index 7d85fdf..d4d92d8 100644
--- a/ui/js/src/kimchi.api.js
+++ b/ui/js/src/kimchi.api.js
@@ -558,13 +558,14 @@ var kimchi = {
});
},
- listPlugins : function(suc, err) {
+ listPlugins : function(suc, err, async) {
kimchi.requestJSON({
url : kimchi.url + 'plugins',
type : 'GET',
contentType : 'application/json',
dataType : 'json',
resend: true,
+ async: async ? async : true,
success : suc,
error : err
});
diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
index 86fed5b..82778cc 100644
--- a/ui/js/src/kimchi.main.js
+++ b/ui/js/src/kimchi.main.js
@@ -62,8 +62,19 @@ kimchi.main = function() {
return tabs;
};
+ var retrieveI18ns = function(url) {
+ $.ajax({
+ url : url,
+ async : false,
+ success : function(html) {
+ $('#main').append(html)},
+ error: function(html) {}
+ });
+ };
+
var tabConfigUrl = '/config/ui/tabs.xml';
var pluginConfigUrl = '/plugins/{plugin}/ui/config/tab-ext.xml';
+ var pluginI18nUrl = 'plugins/{plugin}/i18n.html';
var DEFAULT_HASH;
var buildTabs = function(callback) {
var tabs = retrieveTabs(tabConfigUrl);
@@ -72,6 +83,10 @@ kimchi.main = function() {
var url = kimchi.template(pluginConfigUrl, {
plugin: p
});
+ var i18nurl = kimchi.template(pluginI18nUrl, {
+ plugin: p
+ });
+ retrieveI18ns(i18nurl);
tabs.push.apply(tabs, retrieveTabs(url));
});
@@ -85,7 +100,9 @@ kimchi.main = function() {
$('#nav-menu').append(genTabs(tabs));
callback && callback();
- });
+ }, function(data) {
+ kimchi.message.error(data.responseJSON.reason);
+ }, true);
};
var onLanguageChanged = function(lang) {
--
1.9.0
10 years, 7 months
[PATCHv2 0/2] Extend storagepool support
by lvroyce@linux.vnet.ibm.com
From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
Yu Xin Huo (1):
StoragePool Edit: Add Disk to Logical Pool
Royce Lv (2):
StoragePool Edit: Add Disk to Logical Pool
StoragePool Edit: Update json schema
src/kimchi/API.json | 3 ++-
ui/js/src/kimchi.api.js | 12 ++++++++++
ui/js/src/kimchi.storage_main.js | 41 ++++++++++++++++++++++++++++++++
ui/js/src/kimchi.storagepool_add_main.js | 2 +-
ui/pages/i18n.html.tmpl | 1 +
ui/pages/tabs/storage.html.tmpl | 10 ++++++++
6 files changed, 67 insertions(+), 2 deletions(-)
--
1.8.3.2
10 years, 7 months
[PATCH] VM template: add disk size error message
by Zhou Zheng Sheng
The schema checker needs to report an error message when the disk size
is less than 1GB. Currently this message is missing, so it reports an
KeyError. This patch adds the error message.
Signed-off-by: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
---
src/kimchi/API.json | 6 ++++--
src/kimchi/i18n.py | 1 +
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/API.json b/src/kimchi/API.json
index b9d371a..d2a834c 100644
--- a/src/kimchi/API.json
+++ b/src/kimchi/API.json
@@ -384,7 +384,8 @@
}
},
"minItems": 1,
- "uniqueItems": true
+ "uniqueItems": true,
+ "error": "KCHTMPL0022E"
},
"storagepool": {
"description": "Location of the storage pool",
@@ -554,7 +555,8 @@
}
},
"minItems": 1,
- "uniqueItems": true
+ "uniqueItems": true,
+ "error": "KCHTMPL0022E"
},
"storagepool": {
"description": "Location of the storage pool",
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 25b703f..e105e50 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -119,6 +119,7 @@ messages = {
"KCHTMPL0019E": _("The volume: %(volume)s in not in storage pool %(pool)s"),
"KCHTMPL0020E": _("Unable to create template due error: %(err)s"),
"KCHTMPL0021E": _("Unable to delete template due error: %(err)s"),
+ "KCHTMPL0022E": _("Disk size must be greater than 1GB."),
"KCHPOOL0001E": _("Storage pool %(name)s already exists"),
"KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
--
1.9.0
10 years, 7 months
[PATCH] Update README with the correct FF ESR version.
by Adam King
Signed-off-by: Adam King <rak(a)linux.vnet.ibm.com>
---
docs/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/README.md b/docs/README.md
index 63ac760..c658637 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -14,7 +14,7 @@ Desktop Browser Support:
-----------------------
* **Internet Explorer:** IE9+
* **Chrome:** Current-1 version
-* **Firefox:** Current-1 version Firefox 17ESR
+* **Firefox:** Current-1 version Firefox 24ESR
* **Safari:** Current-1 version
* **Opera:** Current-1 version
--
1.9.0
10 years, 7 months
[PATCH] Issue #342: load i18n.html of the plugin
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
Apparently, in plugin code there is no way to insert new entries into
Kimchi ./ui/pages/i18n.html.tmpl, so every plugin should provide its own
i18n.html.tmpl.
each plugin provides a "plugins/plugin-name/ui/pages/i18n.html.tmpl",
and maps it to the URI "plugins/plugin-name/i18n.html". This is already
supported by the kimchi back-end. What we have to do is just to load
"plugins/plugin-name/i18n.html" in the front-end code.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.api.js | 3 ++-
ui/js/src/kimchi.main.js | 19 ++++++++++++++++++-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
index 7d85fdf..d4d92d8 100644
--- a/ui/js/src/kimchi.api.js
+++ b/ui/js/src/kimchi.api.js
@@ -558,13 +558,14 @@ var kimchi = {
});
},
- listPlugins : function(suc, err) {
+ listPlugins : function(suc, err, async) {
kimchi.requestJSON({
url : kimchi.url + 'plugins',
type : 'GET',
contentType : 'application/json',
dataType : 'json',
resend: true,
+ async: async ? async : true,
success : suc,
error : err
});
diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
index 86fed5b..82778cc 100644
--- a/ui/js/src/kimchi.main.js
+++ b/ui/js/src/kimchi.main.js
@@ -62,8 +62,19 @@ kimchi.main = function() {
return tabs;
};
+ var retrieveI18ns = function(url) {
+ $.ajax({
+ url : url,
+ async : false,
+ success : function(html) {
+ $('#main').append(html)},
+ error: function(html) {}
+ });
+ };
+
var tabConfigUrl = '/config/ui/tabs.xml';
var pluginConfigUrl = '/plugins/{plugin}/ui/config/tab-ext.xml';
+ var pluginI18nUrl = 'plugins/{plugin}/i18n.html';
var DEFAULT_HASH;
var buildTabs = function(callback) {
var tabs = retrieveTabs(tabConfigUrl);
@@ -72,6 +83,10 @@ kimchi.main = function() {
var url = kimchi.template(pluginConfigUrl, {
plugin: p
});
+ var i18nurl = kimchi.template(pluginI18nUrl, {
+ plugin: p
+ });
+ retrieveI18ns(i18nurl);
tabs.push.apply(tabs, retrieveTabs(url));
});
@@ -85,7 +100,9 @@ kimchi.main = function() {
$('#nav-menu').append(genTabs(tabs));
callback && callback();
- });
+ }, function(data) {
+ kimchi.message.error(data.responseJSON.reason);
+ }, true);
};
var onLanguageChanged = function(lang) {
--
1.9.0
10 years, 7 months
[PATCH] Issue#305: Redesign bridged network UI section
by Wen Wang
Finished align vlan fields. Redesigned the pattern of the label positions
Signed-off-by: Wen Wang <wenwang(a)linux.vnet.ibm.com>
---
ui/css/theme-default/network.css | 28 ++++++++++++++++++++++------
ui/js/src/kimchi.network.js | 10 +++++-----
ui/pages/tabs/network.html.tmpl | 33 ++++++++++++++++++++++-----------
3 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/ui/css/theme-default/network.css b/ui/css/theme-default/network.css
index 67f2aa2..98220ab 100644
--- a/ui/css/theme-default/network.css
+++ b/ui/css/theme-default/network.css
@@ -198,7 +198,7 @@
color: #666666;
border: solid 1px;
background-color: white;
- padding: 3px 4px 3px 0;
+ padding: 3px 4px 3px 0;192.168.122.0/24
}
.network-config .input-container {
@@ -209,17 +209,33 @@
vertical-align: top;
}
-.network-config .destination {
- margin-left: 28px;
+.network-config .destination select {
+ margin-left: 48px;
+
+}
+
+.network-config .destination label {
+ vertical-align: middle;
+ margin-left: 48px;
}
-.network-config .VLAN {
- margin-left: 28px;
+.network-config .VLANID input[type="checkbox"] {
+ margin-left: 34px;
+ vertical-align: middle;
}
-.network-config .VLAN input[type="text"] {
+.network-config .VLANID label {
+ vertical-align: middle;
+}
+
+.network-config .labelVLAN label {
+ margin-left: 56px;
+ vertical-align: middle;
+}
+.network-config .labelVLAN input[type="text"] {
height: 25px;
width: 60px;
+ vertical-align: middle;
}
.network-config .input-hint-icon {
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index 7a331be..cfd7338 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -244,6 +244,7 @@ kimchi.openNetworkDialog = function(okCallback) {
if (nics[$("#networkInterface").val()].type === "bridge") {
$("#enableVlan").prop("checked", false);
$("#enableVlan").prop("disabled", true);
+ $("#enableVlan").slideUp(100);
$("#networkVlanID").val("");
$("#networkVlanID").prop("disabled", true);
} else {
@@ -275,13 +276,14 @@ kimchi.enableBridgeOptions = function(enable) {
$("#networkVlanID").prop("disabled", true);
$("#networkVlanID").val("");
$("#networkInterface").val("");
- $("#bridge-options").slideUp(100);
+ $("#bridgeOptions").slideUp(100);
} else if (!$("#networkInterface").val()){
$("#networkInterface").prop("selectedIndex", 0);
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
+
kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
$("#networkTypeBri").prop("checked", isInterfaceAvail);
$("#networkTypeBri").prop("disabled", !isInterfaceAvail);
@@ -289,7 +291,7 @@ kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
if (!isInterfaceAvail) {
kimchi.enableBridgeOptions(false);
} else {
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
@@ -315,10 +317,8 @@ kimchi.cleanNetworkDialog = function() {
$("#networkInterface option").removeAttr("selected").find(":first").attr("selected", "selected");
$("#networkFormOk").off("click");
$("#networkFormOk").button("disable");
- $("#networkVlanID").prop("disabled", true);
$("#enableVlan").prop("checked", false);
};
-
kimchi.setupNetworkFormEvent = function() {
$("#networkName").on("keyup", function(event) {
$("#networkName").toggleClass("invalid-field", !$("#networkName").val().match(/^[a-zA-Z0-9_]+$/));
diff --git a/ui/pages/tabs/network.html.tmpl b/ui/pages/tabs/network.html.tmpl
index e49b257..c9bf1d4 100644
--- a/ui/pages/tabs/network.html.tmpl
+++ b/ui/pages/tabs/network.html.tmpl
@@ -68,17 +68,28 @@
<input type="radio" id="networkTypeBri" name="networkType" value="bridged">
<label for="networkTypeBri">$_("Bridged: Virtual machines are connected to physical network directly")</label>
</div>
- <div id="bridge-options">
- <div class="destination">
- <label for="networkInterface">$_("Destination"): </label>
- <select id="networkInterface"></select>
- </div>
- <div class="VLAN">
- <label for="enableVlan">$_("Enable VLAN"): </label>
- <input id="enableVlan" type="checkbox" value=""/>
- <label for="networkVlanID">$_("VLAN ID"): </label>
- <input type="text" id="networkVlanID" disabled>
- </div>
+ <div id="bridgeOptions">
+ <table id="tableBridgeOption" >
+ <tr>
+ <td class="destination">
+ <label id="labelNetworkInterface">$_("Destination"): </label>
+ </td>
+ <td class="VLANID">
+ <input id="enableVlan" type="checkbox" value=""/>
+ <label id="labelVlanID">$_("Enable VLAN"): </label>
+ </td>
+ </tr>
+ <tr>
+ <td class="destination">
+ <select id="networkInterface"></select>
+ </td>
+ <td class="labelVLAN">
+ <label id="labelNetworkVlanID">$_("VLAN ID"): </label>
+ <input type="text" id="networkVlanID" disabled>
+ </td>
+ </tr>
+ </table>
+
</div>
</div>
</div>
--
1.9.1
10 years, 7 months
[PATCH] Issue #317: disable storage pool create by default in UI
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
All button status of add/create pages should be consistent - it should
be disabled by default until the minimum of the required fields are
filled.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.storagepool_add_main.js | 8 ++++++++
ui/pages/storagepool-add.html.tmpl | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/ui/js/src/kimchi.storagepool_add_main.js b/ui/js/src/kimchi.storagepool_add_main.js
index 86dbe7f..7bed152 100644
--- a/ui/js/src/kimchi.storagepool_add_main.js
+++ b/ui/js/src/kimchi.storagepool_add_main.js
@@ -145,6 +145,14 @@ kimchi.initStorageAddPage = function() {
$('#iscsiportId').keyup(function(event) {
$(this).toggleClass("invalid-field",!/^[0-9]+$/.test($(this).val()));
});
+ $('#form-pool-add').change(function() {
+ if (kimchi.validateForm()) {
+ $('#pool-doAdd').removeAttr('disabled');
+ } else {
+ $('#pool-doAdd').attr('disabled', 'disabled');
+ }
+
+ });
};
kimchi.validateForm = function() {
diff --git a/ui/pages/storagepool-add.html.tmpl b/ui/pages/storagepool-add.html.tmpl
index 977db66..7406bab 100644
--- a/ui/pages/storagepool-add.html.tmpl
+++ b/ui/pages/storagepool-add.html.tmpl
@@ -152,7 +152,7 @@
</div>
<footer>
<div class="btn-group">
- <button id="pool-doAdd" class="btn-normal">
+ <button id="pool-doAdd" class="btn-normal" disabled="disabled">
<span class="text">$_("Create")</span>
</button>
</div>
--
1.9.0
10 years, 7 months
[PATCH] Fix text alignment on storage pool type combo box
by Crístian Viana
The storage pool type list does not have a left padding like the
other combo boxes in Kimchi, bringing the text very close to the UI
component's border.
Apply a common CSS class to the combo box so it looks like the other
objects in the application.
Signed-off-by: Crístian Viana <vianac(a)linux.vnet.ibm.com>
---
ui/pages/storagepool-add.html.tmpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/pages/storagepool-add.html.tmpl b/ui/pages/storagepool-add.html.tmpl
index 977db66..6700b56 100644
--- a/ui/pages/storagepool-add.html.tmpl
+++ b/ui/pages/storagepool-add.html.tmpl
@@ -44,7 +44,7 @@
<div class="storage-type-wrapper-controls">
<div id="poolTypeId">
<input id="poolTypeInputId" name="type" type="hidden" value="dir"/>
- <span id="pool-type-label"></span><span class="arrow"></span>
+ <span id="pool-type-label" class="text"></span><span class="arrow"></span>
<div>
<ul id="storagePool-list">
</ul>
--
1.9.0
10 years, 7 months
[PATCH] Use ellipsis on buttons when additional input is required
by Crístian Viana
Common UI guidelines state that there should be ellipsis on buttons or
menu items when additional information is required from the user to
perform the operation, usually via a modal window or a popup. Some
operations in Kimchi require additional input from the user (e.g.
Template > Edit) while other operations do not (e.g. Template > Clone).
Using a common guideline like this makes the UI easier to navigate, so
the user can expect a new dialog when clicking on "Template > Edit" and
no additional dialog when clicking on "Template > Clone", for example.
There is a related discussion on this link:
http://stackoverflow.com/q/637683/38333.
Append an ellipsis to buttons and menu items that require additional
user information.
Signed-off-by: Crístian Viana <vianac(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.host.js | 6 +++---
ui/pages/guest-add.html.tmpl | 2 +-
ui/pages/guest.html.tmpl | 4 ++--
ui/pages/tabs/templates.html.tmpl | 2 +-
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/ui/js/src/kimchi.host.js b/ui/js/src/kimchi.host.js
index 4c94fc1..9bfc844 100644
--- a/ui/js/src/kimchi.host.js
+++ b/ui/js/src/kimchi.host.js
@@ -84,7 +84,7 @@ kimchi.host_main = function() {
title: i18n['KCHREPO6003M'],
toolbarButtons: [{
id: 'repositories-grid-add-button',
- label: i18n['KCHREPO6012M'],
+ label: i18n['KCHREPO6012M'] + '…',
onClick: function(event) {
kimchi.window.open({url:'repository-add.html', class: repo_type});
}
@@ -106,7 +106,7 @@ kimchi.host_main = function() {
}
}, {
id: 'repositories-grid-edit-button',
- label: i18n['KCHREPO6013M'],
+ label: i18n['KCHREPO6013M'] + "…",
disabled: true,
onClick: function(event) {
var repository = repositoriesGrid.getSelected();
@@ -291,7 +291,7 @@ kimchi.host_main = function() {
title: i18n['KCHDR6002M'],
toolbarButtons: [{
id: reportGridID + '-generate-button',
- label: i18n['KCHDR6006M'],
+ label: i18n['KCHDR6006M'] + '…',
onClick: function(event) {
kimchi.window.open('report-add.html', {
close: function() {
diff --git a/ui/pages/guest-add.html.tmpl b/ui/pages/guest-add.html.tmpl
index 84a1994..ab80a2f 100644
--- a/ui/pages/guest-add.html.tmpl
+++ b/ui/pages/guest-add.html.tmpl
@@ -47,7 +47,7 @@
<div id="prompt-create-template" class="hidden">
<div>$_("Please create a template first.")</div>
<a id="btn-create-template" class="btn-normal" href="templates.html">
- <span class="text">$_("Create a Template")</span>
+ <span class="text">$_("Create a Template")…</span>
</a>
</div>
<div id="prompt-choose-template" class="hidden">
diff --git a/ui/pages/guest.html.tmpl b/ui/pages/guest.html.tmpl
index c7335c8..f23889f 100644
--- a/ui/pages/guest.html.tmpl
+++ b/ui/pages/guest.html.tmpl
@@ -56,8 +56,8 @@
<span class="text">$_("Actions")</span><span class="arrow"></span>
<div class="popover actionsheet right-side" style="width: 250px">
<button class="button-big shutoff-disabled" name="vm-console" ><span class="text">$_("Connect")</span></button>
- <button class="button-big shutoff-disabled" name="vm-media"><span class="text">$_("Manage Media")</span></button>
- <button class="button-big running-disabled" name="vm-edit"><span class="text">$_("Edit")</span></button>
+ <button class="button-big shutoff-disabled" name="vm-media"><span class="text">$_("Manage Media")…</span></button>
+ <button class="button-big running-disabled" name="vm-edit"><span class="text">$_("Edit")…</span></button>
<button class="button-big shutoff-hidden" name="vm-reset"><span class="text">$_("Reset")</span></button>
<button class="button-big shutoff-hidden" name="vm-shutdown"><span class="text">$_("Shut Down")</span></button>
<button class="button-big running-hidden" name="vm-start"><span class="text">$_("Start")</span></button>
diff --git a/ui/pages/tabs/templates.html.tmpl b/ui/pages/tabs/templates.html.tmpl
index 6ae6640..59f490c 100644
--- a/ui/pages/tabs/templates.html.tmpl
+++ b/ui/pages/tabs/templates.html.tmpl
@@ -42,7 +42,7 @@
<div class="btn dropdown popable" style="width: 70px">
<span class="text">$_("Actions")</span><span class="arrow"></span>
<div class="popover actionsheet right-side" style="width: 250px">
- <a class="button-big template-edit" data-template='{name}'>$_("Edit")</a>
+ <a class="button-big template-edit" data-template='{name}'>$_("Edit")…</a>
<a class="button-big template-clone" data-template='{name}'>$_("Clone")</a>
<a class="button-big red template-delete" data-template='{name}'>$_("Delete")</a>
</div>
--
1.9.0
10 years, 7 months
[PATCH] Add missing error message when updating template
by Crístian Viana
The template update command (as well as the other ones) should return an
error message when any of its property values is empty/wrong. The error
message should describe what happened.
When leaving the disk size empty during the template update command, no
error message is returned and the server an exception is raised.
Update the API JSON file so there is an error message assigned to the
template disk property.
Signed-off-by: Crístian Viana <vianac(a)linux.vnet.ibm.com>
---
src/kimchi/API.json | 3 ++-
src/kimchi/i18n.py | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/API.json b/src/kimchi/API.json
index b9d371a..92e9720 100644
--- a/src/kimchi/API.json
+++ b/src/kimchi/API.json
@@ -549,7 +549,8 @@
"size": {
"description": "Size (GB) of the disk",
"type": "number",
- "minimum": 1
+ "minimum": 1,
+ "error": "KCHTMPL0022E"
}
}
},
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 25b703f..4beb29d 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -119,6 +119,7 @@ messages = {
"KCHTMPL0019E": _("The volume: %(volume)s in not in storage pool %(pool)s"),
"KCHTMPL0020E": _("Unable to create template due error: %(err)s"),
"KCHTMPL0021E": _("Unable to delete template due error: %(err)s"),
+ "KCHTMPL0022E": _("Disk size must be an integer greater than 0"),
"KCHPOOL0001E": _("Storage pool %(name)s already exists"),
"KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
--
1.9.0
10 years, 7 months