[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