[ovirt-devel] UI Plugin to Upload ISO Files

Tony James tony at anthonyjames.org
Fri Jan 2 03:19:37 UTC 2015


> On Dec 29, 2014, at 11:13 AM, Tony James <tony at anthonyjames.org> wrote:
> 
> On Mon, Dec 29, 2014 at 5:26 AM, Itamar Heim <iheim at redhat.com> wrote:
>> On 12/29/2014 09:25 AM, Nir Soffer wrote:
>>> 
>>> ----- Original Message -----
>>>> 
>>>> From: "Tony James" <tony at anthonyjames.org>
>>>> To: devel at ovirt.org
>>>> Sent: Monday, December 29, 2014 3:30:49 AM
>>>> Subject: [ovirt-devel] UI Plugin to Upload ISO Files
>>>> 
>>>> This message is in response to an earlier thread regarding a UI plugin
>>>> to upload ISO files.  Like the original poster, Lucas, I began work on
>>>> a UI plugin to allow uploading ISO files through a UI plugin.  After
>>>> reading the previous thread I'm re-thinking the architecture.
>>>> 
>>>> It was suggested that the recommended approach to upload files to a
>>>> storage domain is through the VDSM API [1].  I'm pretty familiar with
>>>> the oVirt REST API but have been unable to find documentation
>>>> regarding accessing the VDSM API.  Should the VDSM API be accessible
>>>> by a UI plugin? If so, is there documentation available to do so?
>>>> 
>>>> [1] http://lists.ovirt.org/pipermail/devel/2014-December/009497.html
>>> 
>>> 
>>> Basically you have to:
>>> 1. Use the vdsm xmlrpc/jsonrpc to create an image
>>> 2. Use the vdsm http api to upload the data to the image. This will create
>>>    a task and return a task id.
>>> 3. Use the vdsm xmlrpc/jsonrpc api to check the task status, and clear
>>>    the task when done
>>> 
>>> The xmlrpc/jsonrpc api is documented here:
>>> 
>>> http://gerrit.ovirt.org/gitweb?p=vdsm.git;a=blob;f=vdsm/rpc/vdsmapi-schema.json;h=1edcda86c8468b68c620eff4844b57ca30e44ea7;hb=HEAD
>>> 
>>> You can check the code for upload here:
>>> 
>>> http://gerrit.ovirt.org/gitweb?p=vdsm.git;a=blob;f=vdsm/rpc/BindingXMLRPC.py;h=759ed7845e63658a13c139684095bd56c03a29ac;hb=HEAD#l158
>> 
>> 
>> I assume the upload will be done via a servlet on the engine, not directly
>> by the ui plugin accessing vdsm.
>> worth discussing your plans here, to make sure architecture/security are
>> correct.
>> 
> 
> I was planning on using a python CGI script which would accept the
> upload via POST from the UI plugin.  The file would be stored in /tmp
> on the engine host.
> 
> After the file was successfully uploaded, the CGI script would send a
> POST to a python HTTP server (BaseHTTPServer, also running on engine
> host) with the filename and storage domain information.  This python
> script would then take care of mounting the storage domain and copying
> the file to the appropriate location.
> 
> This was my initial approach, I plan on checking out the VDSM API as well.

I’ve made some progress interacting with the VDSM API and wanted to get feedback on the connection method before proceeding.  Below is the Python code I’m using to connect to the API:

import xmlrpclib


host = ’node.example.com'
port = '54321'
key_file = '/etc/pki/ovirt-engine/keys/engine_id_rsa'
cert_file = '/etc/pki/ovirt-engine/certs/engine.cer'


class MySafeTransport(xmlrpclib.SafeTransport):
    host_tuple = ('%s:%s' % (host, port), {'key_file': key_file,
                                           'cert_file': cert_file})

    def make_connection(self, host):
        return xmlrpclib.SafeTransport.make_connection(self, self.host_tuple)


transport = MySafeTransport()
server = xmlrpclib.ServerProxy('https://%s:%s' % (host, port), transport)

This will be run from the engine host.  If all is well I assume the ‘uploadImage’ method is the one to use for actually uploading an ISO file?

-Tony




More information about the Devel mailing list