WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [resend] [PATCH] [XS-TEST] Support for Xen-API authentic

To: Stefan Berger <stefanb@xxxxxxxxxx>
Subject: [Xen-devel] Re: [resend] [PATCH] [XS-TEST] Support for Xen-API authenticated session
From: Ewan Mellor <ewan@xxxxxxxxxxxxx>
Date: Wed, 27 Dec 2006 16:09:46 +0000
Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 27 Dec 2006 08:09:41 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <OF0C68491E.53EEB1FB-ON85257250.004ADF49-85257250.004B3215@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20061223124504.GE28890@xxxxxxxxxxxxxxxxxxxxxx> <OF0C68491E.53EEB1FB-ON85257250.004ADF49-85257250.004B3215@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.9i
On Tue, Dec 26, 2006 at 08:41:30AM -0500, Stefan Berger wrote:

> Ewan Mellor <ewan@xxxxxxxxxxxxx> wrote on 12/23/2006 07:45:04 AM:
> 
> > On Thu, Dec 21, 2006 at 03:38:21PM -0500, Stefan Berger wrote:
> >
> > > I am adding a tool 'xapi-setup.py' to the xm-test suite for being able
> > > to setup authentication credentials needed for automatically running
> > > Xen-API - related tests. The username and password information is
> stored
> > > in cleartext in lib/XmTestLib/xapi_auth.py.
> > > In the one test using the Xen-API I add another check for availability
> > > of the python PAM module. The test is skipped if the module is not
> > > available on the system.
> > >
> > > Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>
> >
> > Ah, sorry, I'd forgotten about this one.
> >
> > There is now a configuration file for xm (see
> > tools/examples/xm-config.xml) so would it make sense to pull the
> > username and password from there?  If you look at xen/xm/main.py,
> 
> I had not seen this file, but it seems not to be copied into /etc/xen/ by
> default.

No, it doesn't go in by default at the moment, because it arrived quite late
in the 3.0.4 run-up, so I decided not to activate it by default.  Sorry that
you'd missed it.  I'm going to change the Makefile in unstable now so that it
gets put in there by default.

> Would it be ok for now if I adapted the XML format and have
> xapi.py try to get username/password from the xm-config.xml file first and
> if it does not exist read the file created by the tool that I add to the
> xm test suite (xapi-setup.py) ?

You could if you want to, but you'll have a lot less code to write if you just
import the relevant bits from xm:

~ # python
Python 2.4.4 (#2, Oct 19 2006, 23:03:48)
[GCC 4.1.2 20061007 (prerelease) (Debian 4.1.1-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append('/usr/lib/python')
>>> import xen.xm.main
>>> xen.xm.main.serverType
u'Xen-API'
>>> xen.xm.main.serverURI
u'http://localhost:9363/'
>>> xen.xm.main.parseAuthentication()
(u'ewan', u'letmein')


Connecting to the server should be a lot easier now too:

>>> from xen.xm import XenAPI
>>> session = XenAPI.Session(xen.xm.main.serverURI)
>>> session.login_with_password(*xen.xm.main.parseAuthentication())
>>> session.xenapi.VM.get_all()
['00000000-0000-0000-0000-000000000000',
 '2f8dada9-387c-d981-0e51-6f5e2732d752',
 '53a01d42-c8c8-e561-6939-e2bc750454f7']


It would be best, I think, if xm-test shares those bits of code with xm.

It's possible that xm-test doesn't need that code at all, in the long run,
because it ought to be able to drive xm from the outside (that's the whole
point of xm-test after all -- its an end-to-end test).  What you seem to be
writing is tests for the API, but that don't test xm itself.  That's great, if
xm itself will never have the bits of functionality under test.  The plan is
for xm to move over to using the new API throughout, so for the majority of
the functionality, we ought to be doing the full end-to-end test, and prodding
xm from the outside, rather than using ServerProxy.

Coverage from both aspects -- the raw API and the xm-sanitised version --
would be best, of course, but we're already struggling to get enough people
writing tests, so it'd be best to concentrate on the end-to-end tests for now.

Ewan.


> 
>   Stefan
> > there's code for parsing the config file, and also for using the XenAPI
> > session manager and server proxy -- you ought to be able to import that
> > code now rather than using ServerProxy, and then there will be less for
> > xapi.py to do, because it will be sharing with xm.
> >
> > Cheers,
> >
> > Ewan.
> >
> > > Index: root/xen-unstable.hg/tools/xm-test/lib/XmTestLib/xapi.py
> > > ===================================================================
> > > --- root.orig/xen-unstable.hg/tools/xm-test/lib/XmTestLib/xapi.py
> > > +++ root/xen-unstable.hg/tools/xm-test/lib/XmTestLib/xapi.py
> > > @@ -24,9 +24,6 @@ from xen.util.xmlrpclib2 import ServerPr
> > >  from types import DictType
> > >
> > >
> > > -XAPI_DEFAULT_LOGIN = " "
> > > -XAPI_DEFAULT_PASSWORD = " "
> > > -
> > >  class XenAPIError(Exception):
> > >      pass
> > >
> > > @@ -58,8 +55,12 @@ def _connect(*args):
> > >      global _server, _session, _initialised
> > >      if not _initialised:
> > >          _server = ServerProxy('httpu:///var/run/xend/xen-api.sock')
> > > -        login = XAPI_DEFAULT_LOGIN
> > > -        password = XAPI_DEFAULT_PASSWORD
> > > +        try:
> > > +            from XmTestLib import xapi_auth
> > > +        except:
> > > +            FAIL("Missing Xen-API credentials. Run xapi-setup.py!")
> > > +        login = xapi_auth.XAPI_DEFAULT_LOGIN
> > > +        password = xapi_auth.XAPI_DEFAULT_PASSWORD
> > >          creds = (login, password)
> > >          _session = execute(_server.session.login_with_password,
> *creds)
> > >          _initialised = True
> > > Index: root/xen-unstable.hg/tools/xm-test/tests/vtpm/09_vtpm-xapi.py
> > > ===================================================================
> > > --- root.orig/xen-unstable.hg/tools/xm-test/tests/vtpm/09_vtpm-xapi.py
> > > +++ root/xen-unstable.hg/tools/xm-test/tests/vtpm/09_vtpm-xapi.py
> > > @@ -68,6 +68,10 @@ def do_test():
> > >      domain.destroy()
> > >
> > >
> > > +try:
> > > +    import PAM
> > > +except ImportError:
> > > +    SKIP("Skipping test. Python-PAM module not found.")
> > >
> > >  try:
> > >      do_test()
> > > Index: root/xen-unstable.hg/tools/xm-test/xapi-setup.py
> > > ===================================================================
> > > --- /dev/null
> > > +++ root/xen-unstable.hg/tools/xm-test/xapi-setup.py
> > > @@ -0,0 +1,41 @@
> > > +#!/usr/bin/python
> > > +import sys as sys
> > > +import getpass as getpass
> > > +
> > > +XAPI_AUTH_FILE = "xapi_auth.py"
> > > +XAPI_AUTH_PATH = "./lib/XmTestLib/"
> > > +XAPI_FILE = XAPI_AUTH_PATH + XAPI_AUTH_FILE
> > > +
> > > +def usage():
> > > +    print "Usage: xapi-setup.py [<username>] [<password>]\n\n" \
> > > +          "Tool to setup the xm-test suite for being able to use
> > the Xen-API\n" \
> > > +          "with authenticated sessions. Username and password are
> > stored in\n" \
> > > +          "cleartext in %s.\n" % XAPI_FILE
> > > +
> > > +def main():
> > > +    if (len(sys.argv) >= 2) and sys.argv[1] == "-?":
> > > +        usage()
> > > +        sys.exit(0)
> > > +    print "Enter username and password for usage with Xen-API:\n"
> > > +    if (len(sys.argv) >=2  ):
> > > +        username = sys.argv[1]
> > > +        print "Login: %s" % username
> > > +    else:
> > > +        username = rawinput("Login: ")
> > > +    if (len(sys.argv) >= 3 ):
> > > +        password = sys.argv[2]
> > > +        print "Password: <given>"
> > > +    else:
> > > +        password = getpass.getpass()
> > > +    f = open(XAPI_FILE, "w")
> > > +    if f:
> > > +        f.write("# File was created by xapi-setup.py.\n"
> > > +                "XAPI_DEFAULT_LOGIN = \"%s\"\n"
> > > +                "XAPI_DEFAULT_PASSWORD = \"%s\"\n"
> > > +                % (username, password))
> > > +        f.close()
> > > +    else:
> > > +        print("Could not open file %s for writing." % XAPI_FILE)
> > > +
> > > +if __name__ == "__main__":
> > > +    sys.exit(main())
> >

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel