xen-devel
Re: [Xen-devel] Re: [resend] [PATCH] [XS-TEST] Support for Xen-API authe
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
|
|
|