[Kimchi-devel] [PATCH V2 5/7] (WIP) Storagepool SCSI/FC: Implement UI when a FC scsi_host will be the pool

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Tue Jan 28 21:45:42 UTC 2014


On 01/25/2014 09:46 PM, Aline Manera wrote:
> On 01/23/2014 10:29 PM, Rodrigo Trujillo wrote:
>> This patch modifies the storagepool add user interface in order to 
>> show all
>> Fibre Channel scsi hosts found in the host system and let user to 
>> create a
>> pool attached to this host (the LUNs will be the volumes).
>> A second option to use and enable FC storages is when a LUN is 
>> assigned as
>> a pool of FS type, hosting guest images. This second option will be 
>> implement
>> in the future.
>>
>> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
>> ---
>>   ui/js/src/kimchi.api.js                  | 11 +++++++++
>>   ui/js/src/kimchi.storagepool_add_main.js | 40 
>> +++++++++++++++++++++++++++++++-
>>   ui/pages/i18n.html.tmpl                  |  1 +
>>   ui/pages/storagepool-add.html.tmpl       | 12 ++++++++++
>>   4 files changed, 63 insertions(+), 1 deletion(-)
>>
>> diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
>> index 63ddd88..66fc41e 100644
>> --- a/ui/js/src/kimchi.api.js
>> +++ b/ui/js/src/kimchi.api.js
>> @@ -731,5 +731,16 @@ var kimchi = {
>>               success : suc,
>>               error : err
>>           });
>> +    },
>> +
>> +    listFCHosts : function(suc, err) {
>> +        kimchi.requestJSON({
>> +            url : kimchi.url + 'host/devices?_cap=fc_host',
>
> For older libvirt version this filter is not true.
>
> My suggestion:
>
> 1) Use /host/devices?_cap='scsi_host'
>
> 2) In backend:
>     - Return all scsi_host devices and identify which are FC
>
>     I think we will only be able to identify the FC scsi_host for 
> newer libvirt versions. You need to investigate it.

This is not a JSON filter ... I am passing the capability parameter to 
the function. Please, review "devices_get_list"  and 
"_get_devices_fc_host" from patch [4/7], I handle older libvirt in the 
latest function.
I tried to expose through the API what libvirt is capable to do with 
"listAllDevices" and  "listDevices(cap)" .  The "listFCHosts" is a very 
very specific function for the UI.


>
>> +            type : 'GET',
>> +            contentType : 'application/json',
>> +            dataType : 'json',
>> +            success : suc,
>> +            error : err
>> +        });
>>       }
>>   };
>> diff --git a/ui/js/src/kimchi.storagepool_add_main.js 
>> b/ui/js/src/kimchi.storagepool_add_main.js
>> index e5922b3..8331076 100644
>> --- a/ui/js/src/kimchi.storagepool_add_main.js
>> +++ b/ui/js/src/kimchi.storagepool_add_main.js
>> @@ -40,7 +40,21 @@ kimchi.initStorageAddPage = function() {
>>           label : "iSCSI",
>>           value : "iscsi"
>>       } ];
>> -    kimchi.listHostPartitions(function(data) {
>> +    kimchi.listFCHosts(function(data){
>> +        if (data.length > 0)  {
>> +            options.push( {
>> +                label : "SCSI Fibre Channel",
>> +                value : "scsi"
>> +            });
>> +        }
>> +        var scsiFCHtml = $('#scsiFCTmpl').html();
>> +        var scsiFCHostListHtml = '';
>> +        $.each(data, function(index, value) {
>> +            scsiFCHostListHtml += kimchi.template(scsiFCHtml, value);
>> +        });
>> +        $('.scsifc-hosts').html(scsiFCHostListHtml);
>> +
>> +      kimchi.listHostPartitions(function(data) {
>>           if (data.length > 0) {
>>               options.push({
>>                   label : "LOGICAL",
>> @@ -107,21 +121,31 @@ kimchi.initStorageAddPage = function() {
>>                   $('.logical-section').addClass('tmpl-html');
>>                   $('.nfs-section').addClass('tmpl-html');
>>                   $('.iscsi-section').addClass('tmpl-html');
>> +                $('.scsifc-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');
>> +                $('.scsifc-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');
>> +                $('.scsifc-section').addClass('tmpl-html');
>> +            } else if ($(this).val() === 'scsi') {
>> +                $('.path-section').addClass('tmpl-html');
>> +                $('.logical-section').addClass('tmpl-html');
>> +                $('.nfs-section').addClass('tmpl-html');
>> +                $('.iscsi-section').addClass('tmpl-html');
>> +                $('.scsifc-section').removeClass('tmpl-html');
>>               } else if ($(this).val() === 'logical') {
>>                   $('.path-section').addClass('tmpl-html');
>> $('.logical-section').removeClass('tmpl-html');
>>                   $('.nfs-section').addClass('tmpl-html');
>>                   $('.iscsi-section').addClass('tmpl-html');
>> +                $('.scsifc-section').addClass('tmpl-html');
>>               }
>>           });
>>           $('#authId').click(function() {
>> @@ -134,6 +158,7 @@ kimchi.initStorageAddPage = function() {
>>           $('#iscsiportId').keyup(function(event) {
>> $(this).toggleClass("invalid-field",!/^[0-9]+$/.test($(this).val()));
>>           });
>> +      });
>>       });
>>   };
>>
>> @@ -154,6 +179,8 @@ kimchi.validateForm = function() {
>>           return kimchi.validateNfsForm();
>>       } else if (poolType === "iscsi") {
>>           return kimchi.validateIscsiForm();
>> +    } else if (poolType === "scsi") {
>> +        return kimchi.validateScsiFCForm();
>>       } else if (poolType === "logical") {
>>           return kimchi.validateLogicalForm();
>>       } else {
>> @@ -204,6 +231,15 @@ kimchi.validateIscsiForm = function() {
>>       return true;
>>   };
>>
>> +kimchi.validateScsiFCForm = function() {
>> +    var fcHost = $('input:radio[name=adapter_name]:checked').val();
>> +    if (fcHost === undefined) {
>> + kimchi.message.error(i18n['msg.validate.pool.edit.scsifchost']);
>> +        return false;
>> +    }
>> +    return true;
>> +};
>> +
>>   kimchi.validateServer = function(serverField) {
>>       if ('' === serverField) {
>> kimchi.message.error(i18n['msg.pool.edit.server.blank']);
>> @@ -248,6 +284,8 @@ kimchi.addPool = function(event) {
>>               source.path = $('#nfspathId').val();
>>               source.host = $('#nfsserverId').val();
>>               formData.source = source;
>> +        } else if (poolType === 'scsi'){
>> +            formData.adapter_type = 'fc_host';
>>           } else if (poolType === 'iscsi') {
>>               var source = {};
>>               source.target = $('#iscsiTargetId').val();
>> diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl
>> index d63d4e9..0d6550f 100644
>> --- a/ui/pages/i18n.html.tmpl
>> +++ b/ui/pages/i18n.html.tmpl
>> @@ -100,6 +100,7 @@ var i18n = {
>>       'msg.validate.pool.edit.path':"$_("This is not a real linux 
>> path.")",
>>       'msg.validate.pool.edit.nfspath':"$_("Invalid nfs mount path.")",
>>       'msg.validate.pool.edit.logical.device':"$_("No logical device 
>> selected.")",
>> +    'msg.validate.pool.edit.scsifchost':"$_("A Fibre Channel SCSI 
>> host must be selected.")",
>>       'msg.kimchi.storage.pool.empty':"$_("This storage pool is 
>> empty.")",
>>       'msg.kimchi.list.volume.fail':"$_("Failed to list the storage 
>> pool.")",
>>       'msg.kimchi.storage.pool.not.active':"$_("The storage pool is 
>> not active now.")",
>> diff --git a/ui/pages/storagepool-add.html.tmpl 
>> b/ui/pages/storagepool-add.html.tmpl
>> index 14ef23a..c8d4114 100644
>> --- a/ui/pages/storagepool-add.html.tmpl
>> +++ b/ui/pages/storagepool-add.html.tmpl
>> @@ -104,6 +104,12 @@
>>                           <div class="host-partition"></div>
>>                       </section>
>>                   </div>
>> +                <div class="scsifc-section tmpl-html">
>> +                    <section class="form-section">
>> +                        <h2>3. $_("Select SCSI Fibre Channel 
>> Host")</h2>
>> +                        <div class="scsifc-hosts"></div>
>> +                    </section>
>> +                </div>
>>                   <div class="iscsi-section tmpl-html">
>>                       <section class="form-section">
>>                           <h2>3. $_("iSCSI Server")</h2>
>> @@ -154,5 +160,11 @@
>>               <label>{path}</label>
>>           </div>
>>       </script>
>> +        <script id="scsiFCTmpl" type="html/text">
>> +        <div class="field">
>> +            <input type="radio" value="{name}" name="adapter_name">
>> +            <label>{name}</label>
>> +        </div>
>> +    </script>
>>   </body>
>>   </html>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>




More information about the Kimchi-devel mailing list