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

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

To: Ewan Mellor <ewan@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] Re: [resend] [PATCH] [XS-TEST] Support for Xen-API authenticated session
From: Stefan Berger <stefanb@xxxxxxxxxx>
Date: Wed, 27 Dec 2006 11:56:55 -0500
Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 27 Dec 2006 08:56:53 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <20061227160946.GB31234@xxxxxxxxxxxxxxxxxxxxxx>
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx

xen-devel-bounces@xxxxxxxxxxxxxxxxxxx wrote on 12/27/2006 11:09:46 AM:

> 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.


On my system I had quite a few problems when I copied the xm-config.xml file to /etc/xen. Probably you should change its contents so it does not use Xen-API by default, yet, since for example Fedora core installs don't come with a pyhton PAM module - at least I could not find it and many others might not have installed the package, either.

The patch I sent before was due to me trying to create a VM using the Xen_API and the ramdisk not becoming available. So I think there is a need for testing the
raw Xen-API as well. I wrote a basic test case for this and put it into a new directory tests/xapi into the xm-test suite.


>
> > 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']


Thanks. This is helpful for raw xen-api testing.

>
>
> 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


I understand, but functionality of xm will likely not cover the whole xen-api and so I think that separate tests for the raw xen-api can be useful.

> writing is tests for the API, but that don't test xm itself.  That'sgreat, 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.


Agreed.

  Stefan

>
> 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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel