From 725ec2f10019c35bafeb1aabfce6f14174bf4f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com> Date: Mon, 12 Apr 2010 16:04:22 +0200 Subject: [PATCH] QA: Make the rapi credential handling less involving MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RenΓ© Nussbaumer <rn@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- qa/ganeti-qa.py | 15 ++++++++++++--- qa/qa_cluster.py | 24 ++++++++---------------- qa/qa_rapi.py | 17 +++++++++++++++-- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index 0925796a6..a51473668 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -38,6 +38,8 @@ import qa_rapi import qa_tags import qa_utils +from ganeti import utils + def RunTest(fn, *args): """Runs a test after printing a header. @@ -70,12 +72,15 @@ def RunEnvTests(): RunTest(qa_env.TestGanetiCommands) -def SetupCluster(): +def SetupCluster(rapi_user, rapi_secret): """Initializes the cluster. + @param rapi_user: Login user for RAPI + @param rapi_secret: Login secret for RAPI + """ if qa_config.TestEnabled('create-cluster'): - RunTest(qa_cluster.TestClusterInit) + RunTest(qa_cluster.TestClusterInit, rapi_user, rapi_secret) RunTest(qa_node.TestNodeAddAll) else: # consider the nodes are already there @@ -274,8 +279,12 @@ def main(): qa_config.Load(config_file) + rapi_user = "ganeti-qa" + rapi_secret = utils.GenerateSecret() + qa_rapi.OpenerFactory.SetCredentials(rapi_user, rapi_secret) + RunEnvTests() - SetupCluster() + SetupCluster(rapi_user, rapi_secret) RunClusterTests() RunOsTests() diff --git a/qa/qa_cluster.py b/qa/qa_cluster.py index 37d1c45a9..489800b56 100644 --- a/qa/qa_cluster.py +++ b/qa/qa_cluster.py @@ -56,10 +56,17 @@ def _CheckFileOnAllNodes(filename, content): content) -def TestClusterInit(): +def TestClusterInit(rapi_user, rapi_secret): """gnt-cluster init""" master = qa_config.GetMasterNode() + # First create the RAPI credentials + cred_string = "%s %s write" % (rapi_user, rapi_secret) + cmd = ("echo %s > %s" % + (utils.ShellQuote(cred_string), + utils.ShellQuote(constants.RAPI_USERS_FILE))) + AssertEqual(StartSSH(master['primary'], cmd).wait(), 0) + cmd = ['gnt-cluster', 'init'] if master.get('secondary', None): @@ -79,21 +86,6 @@ def TestClusterInit(): AssertEqual(StartSSH(master['primary'], utils.ShellQuoteArgs(cmd)).wait(), 0) - # Create RAPI credentials - rapi_user = qa_config.get("rapi-user", default=None) - rapi_pass = qa_config.get("rapi-pass", default=None) - - if rapi_user and rapi_pass: - cmds = [] - - cred_string = "%s %s write" % (rapi_user, rapi_pass) - cmds.append(("echo %s >> %s" % - (utils.ShellQuote(cred_string), - utils.ShellQuote(constants.RAPI_USERS_FILE)))) - cmds.append("%s stop-master" % constants.DAEMON_UTIL) - cmds.append("%s start-master" % constants.DAEMON_UTIL) - AssertEqual(StartSSH(master['primary'], ' && '.join(cmds)).wait(), 0) - def TestClusterRename(): """gnt-cluster rename""" diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py index 919dc7869..179ce8a9b 100644 --- a/qa/qa_rapi.py +++ b/qa/qa_rapi.py @@ -44,6 +44,16 @@ class OpenerFactory: """ _opener = None + _rapi_user = None + _rapi_secret = None + + @classmethod + def SetCredentials(cls, rapi_user, rapi_secret): + """Set the credentials for authorized access. + + """ + cls._rapi_user = rapi_user + cls._rapi_secret = rapi_secret @classmethod def Opener(cls): @@ -51,14 +61,17 @@ class OpenerFactory: """ if not cls._opener: + if not cls._rapi_user or not cls._rapi_secret: + raise errors.ProgrammerError("SetCredentials was never called.") + # Create opener which doesn't try to look for proxies and does auth master = qa_config.GetMasterNode() host = master["primary"] port = qa_config.get("rapi-port", default=constants.DEFAULT_RAPI_PORT) passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, 'https://%s:%s' % (host, port), - qa_config.get("rapi-user", default=""), - qa_config.get("rapi-pass", default="")) + cls._rapi_user, + cls._rapi_secret) authhandler = urllib2.HTTPBasicAuthHandler(passman) cls._opener = urllib2.build_opener(urllib2.ProxyHandler({}), authhandler) -- GitLab