[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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




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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.