on 2013/12/26 20:34, Rodrigo Trujillo wrote:
On 12/26/2013 12:33 AM, Zhou Zheng Sheng wrote:
> 于 2013年12月25日 01:51, Rodrigo Trujillo 写道:
>> On 12/23/2013 12:57 AM, zhoumeina wrote:
>>> This patch is working for add iscsi type in storage pool create
>>> page.
>>> 1.Add iscsi server to create storage pool page.
>>> 2.Add iscsi target to create storage pool page.
>>>
>>> Signed-off-by: zhoumeina <zhoumein(a)linux.vnet.ibm.com>
>>> ---
>>> ui/js/src/kimchi.storagepool_add_main.js | 54
>>> ++++++++++++++++++++++++-----
>>> ui/pages/i18n.html.tmpl | 7 ++--
>>> ui/pages/storagepool-add.html.tmpl | 22 +++++++++++-
>>> 3 files changed, 68 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/ui/js/src/kimchi.storagepool_add_main.js
>>> b/ui/js/src/kimchi.storagepool_add_main.js
>>> index b31610a..cd8f1ae 100644
>>> --- a/ui/js/src/kimchi.storagepool_add_main.js
>>> +++ b/ui/js/src/kimchi.storagepool_add_main.js
>>> @@ -35,6 +35,9 @@ kimchi.initStorageAddPage = function() {
>>> }, {
>>> label : "NFS",
>>> value : "netfs"
>>> + } ,{
>>> + label : "ISCSI",
>>> + value : "iscsi"
>>> } ];
>>> kimchi.listHostPartitions(function(data) {
>>> if (data.length > 0) {
>>> @@ -57,14 +60,22 @@ kimchi.initStorageAddPage = function() {
>>>
$('.path-section').removeClass('tmpl-html');
>>>
$('.logical-section').addClass('tmpl-html');
>>> $('.nfs-section').addClass('tmpl-html');
>>> + $('.iscsi-section').addClass('tmpl-html');
>>> } else if ($(this).val() === 'netfs') {
>>> $('.path-section').addClass('tmpl-html');
>>>
$('.logical-section').addClass('tmpl-html');
>>>
$('.nfs-section').removeClass('tmpl-html');
>>> + $('.iscsi-section').addClass('tmpl-html');
>>> + } else if ($(this).val() === 'iscsi') {
>>> + $('.path-section').addClass('tmpl-html');
>>> +
$('.logical-section').addClass('tmpl-html');
>>> + $('.nfs-section').addClass('tmpl-html');
>>> +
$('.iscsi-section').removeClass('tmpl-html');
>>> } else {
>>> $('.path-section').addClass('tmpl-html');
>>>
$('.logical-section').removeClass('tmpl-html');
>>> $('.nfs-section').addClass('tmpl-html');
>>> + $('.iscsi-section').addClass('tmpl-html');
>>> }
>>> });
>>> });
>>> @@ -85,6 +96,8 @@ kimchi.validateForm = function() {
>>> return kimchi.validateDirForm();
>>> } else if (poolType === "netfs") {
>>> return kimchi.validateNfsForm();
>>> + } else if (poolType === "iscsi") {
>>> + return kimchi.validateIscsiForm();
>>> } else {
>>> return kimchi.validateLogicalForm();
>>> }
>>> @@ -107,26 +120,44 @@ kimchi.validateDirForm = function () {
>>> kimchi.validateNfsForm = function () {
>>> var nfspath = $('#nfspathId').val();
>>> var nfsserver = $('#nfsserverId').val();
>>> - if ('' === nfsserver) {
>>> -
kimchi.message.error(i18n['msg.pool.edit.nfsserver.blank']);
>>> + if (!kimchi.validateServer(nfsserver)) {
>>> return false;
>>> }
>>> -
>>> if ('' === nfspath) {
>>>
kimchi.message.error(i18n['msg.pool.edit.nfspath.blank']);
>>> return false;
>>> }
>>> - var domain =
>>>
"([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6}"
>>> - var ip = "(\\d{1,3}\.){3}\\d{1,3}"
>>> - regex = new RegExp('^' + domain + '|' + ip +
'$')
>>> + if (!/((\/([0-9a-zA-Z-_\.]+)))$/.test(nfspath)) {
>>> +
kimchi.message.error(i18n['msg.validate.pool.edit.nfspath']);
>>> + return false;
>>> + }
>>> + return true;
>>> +};
>>>
>>> - if(!regex.test(nfsserver)) {
>>> -
>>> kimchi.message.error(i18n['msg.validate.pool.edit.nfsserver']);
>>> +kimchi.validateIscsiForm = function() {
>>> + var iscsiServer = $('#iscsiserverId').val();
>>> + var iscsiTarget = $('#iscsiTargetId').val();
>>> + if (!kimchi.validateServer(iscsiServer)) {
>>> return false;
>>> }
>>> + if ('' === iscsiTarget) {
>>> +
kimchi.message.error(i18n['msg.pool.edit.iscsitarget.blank']);
>>> + return false;
>>> + }
>>> + return true;
>>> +};
>>>
>>> - if (!/((\/([0-9a-zA-Z-_\.]+)))$/.test(nfspath)) {
>>> -
kimchi.message.error(i18n['msg.validate.pool.edit.nfspath']);
>>> +kimchi.validateServer = function(serverField) {
>>> + if ('' === serverField) {
>>> + kimchi.message.error(i18n['msg.pool.edit.server.blank']);
>>> + return false;
>>> + }
>>> + var domain =
>>>
"([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6}"
>>> + var ip = "(\\d{1,3}\.){3}\\d{1,3}"
>>> + regex = new RegExp('^' + domain + '|' + ip +
'$')
>>> +
>>> + if (!regex.test(serverField)) {
>>> +
kimchi.message.error(i18n['msg.validate.pool.edit.server']);
>>> return false;
>>> }
>>> return true;
>>> @@ -153,6 +184,9 @@ kimchi.addPool = function(event) {
>>> deviceObj[0] = formData.devices;
>>> formData.devices = deviceObj;
>>> }
>>> + } else if (poolType === 'iscsi'){
>>> + formData.srcTarget = $('#iscsiserverId').val();
>>> + formData.srcHost = $('#iscsiTargetId').val();
>>> } else {
>>> formData.nfspath = $('#nfspathId').val();
>>> formData.nfsserver = $('#nfsserverId').val();
>>> diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl
>>> index c1fc3d1..4a02e4d 100644
>>> --- a/ui/pages/i18n.html.tmpl
>>> +++ b/ui/pages/i18n.html.tmpl
>>> @@ -94,11 +94,9 @@ var i18n = {
>>> 'msg.storagepool.confirm.delete':"$_("This will
permanently
>>> delete the Storage Pool. Would you like to continue?")",
>>> 'msg.pool.edit.name.blank':"$_("The storage pool
name can not be
>>> blank.")",
>>> 'msg.pool.edit.path.blank':"$_("The storage pool
path can not be
>>> blank.")",
>>> - 'msg.pool.edit.nfsserver.blank':"$_("NFS server can
not be
>>> blank.")",
>>> 'msg.pool.edit.nfspath.blank':"$_("NFS server mount
path can not
>>> be blank.")",
>>> 'msg.validate.pool.edit.name':"$_("Invalid Storage
Pool name.
>>> It may only contain letters, numbers, underscores, and
hyphens.")",
>>> 'msg.validate.pool.edit.path':"$_("This is not a
real linux
>>> path.")",
>>> - 'msg.validate.pool.edit.nfsserver':"$_("This is not a
valid NFS
>>> server.")",
>>> 'msg.validate.pool.edit.nfspath':"$_("Invalid nfs
mount
>>> path.")",
>>> 'msg.kimchi.storage.pool.empty':"$_("This storage
pool is
>>> empty.")",
>>> 'msg.kimchi.list.volume.fail':"$_("Failed to list
the storage
>>> pool.")",
>>> @@ -121,7 +119,10 @@ var i18n = {
>>> 'action_create': "$_("Create")",
>>> 'msg_warning': "$_("Warning")",
>>> 'msg.logicalpool.confirm.delete': "$_("It will
format your disk
>>> and you will loose any data in"
>>> - " there, are you sure to
>>> continue? ")"
>>> + " there, are you sure to
>>> continue? ")",
>>> + 'msg.pool.edit.iscsitarget.blank': "$_("The iscsi
target can not
>>> be blank.")",
>>> + 'msg.pool.edit.server.blank':"$_("Server name can not
be
>>> blank.")",
>>> + 'msg.validate.pool.edit.server':"$_("This is not a
valid Server
>>> Name or IP. please, modify it.")"
>>> };
>>> </script>
>>> </body>
>>> diff --git a/ui/pages/storagepool-add.html.tmpl
>>> b/ui/pages/storagepool-add.html.tmpl
>>> index 3ab9ae5..2898540 100644
>>> --- a/ui/pages/storagepool-add.html.tmpl
>>> +++ b/ui/pages/storagepool-add.html.tmpl
>>> @@ -84,8 +84,7 @@
>>> <p
class="text-help">$_("The nfs
>>> exported path on nfs server")</p>
>>> <input id="nfspathId"
type="text"
>>> class="text"
>>> style="width: 300px">
>>> - <input type="hidden"
id="localpathId"
>>> class="text"
>>> - value="none">
>>> + <input type="hidden"
id="localpathId"
>>> class="text" value="none">
>>> </div>
>>> <div class="clear"></div>
>>> </section>
>>> @@ -104,6 +103,25 @@
>>> <span
class="text">$_("Create")</span>
>>> </button>
>>> </div>
>>> + <div class="iscsi-section tmpl-html">
>>> + <section class="form-section">
>>> + <h2>3. $_("ISCSI
server")</h2>
>>> + <div class="field">
>>> + <p class="text-help">
>>> + $_("ISCSI server IP or hostname. It
>>> should not be empty.")</p>
>>> + <input id="iscsiserverId"
type="text"
>>> class="text"
>>> + style="width: 300px">
>>> + </div>
>>> + </section>
>>> + <section class="form-section">
>>> + <h2>4. $_("Target")</h2>
>>> + <div class="field">
>>> + <p
class="text-help">$_("The ISCSI target
>>> on ISCSI server")</p>
>>> + <input id="iscsiTargetId"
type="text"
>>> class="text" style="width: 300px">
>>> + </div>
>>> + <div class="clear"></div>
>>> + </section>
>>> + </div>
>> What about iSCSI servers that need authentication ?
>> Will user provide the password through UI or some config file ?
>>
> kimchi transfers password in clear text, and it doesn't force https. I
> think it's not safe, so I didn't add a password in the back-end. I think
> there should be an overall solution for passwords (login, iSCSI CHAP,
> and other). For now, the back-end implementation does not support iSCSI
> authentication.
>
> This question has been asked twice, maybe I can add password support in
> the new patch set, and just transfer the password in clear text.
Sorry for have asked this again and thanks for the answer :)
Agree, transfer password in plan text is not good. I am not UI/WEB
specialist,
but maybe there is a way to send the password already encrypted or force an
https connection when sending passwords ... well, I need to read more about
this.
Thanks! Maybe my word is a bit misleading. By writing "This question has
been asked twice", I actually mean "It's a sign that people want kimchi
to support iSCSI CHAP authentication". I actually took your advice and
wrote a new patch series, and added iSCSI authentication. I decided to
transfer the password in clear text, and rely on HTTPs for security.
Maybe someone will submit a patch to use only HTTPs by default. I'm
sending my new patches, maybe you could have a look at the back-end
implementation.
>>> </footer>
>>> </div>
>>> <script>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org
>>
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>
--
Thanks and best regards!
Zhou Zheng Sheng / 周征晟
E-mail: zhshzhou(a)linux.vnet.ibm.com
Telephone: 86-10-82454397