cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From t..@apache.org
Subject [01/51] [abbrv] Merge branch 'master' into marvin_refactor
Date Thu, 25 Apr 2013 14:45:27 GMT
Updated Branches:
  refs/heads/marvin_refactor 0b5fe9a90 -> dbcfc6661


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5cea6012/tools/marvin/marvin/utils.py
----------------------------------------------------------------------
diff --cc tools/marvin/marvin/utils.py
index 74d4d27,0000000..73ed0e6
mode 100644,000000..100644
--- a/tools/marvin/marvin/utils.py
+++ b/tools/marvin/marvin/utils.py
@@@ -1,176 -1,0 +1,185 @@@
 +# Licensed to the Apache Software Foundation (ASF) under one
 +# or more contributor license agreements.  See the NOTICE file
 +# distributed with this work for additional information
 +# regarding copyright ownership.  The ASF licenses this file
 +# to you under the Apache License, Version 2.0 (the
 +# "License"); you may not use this file except in compliance
 +# with the License.  You may obtain a copy of the License at
 +# 
 +#   http://www.apache.org/licenses/LICENSE-2.0
 +# 
 +# Unless required by applicable law or agreed to in writing,
 +# software distributed under the License is distributed on an
 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +# KIND, either express or implied.  See the License for the
 +# specific language governing permissions and limitations
 +# under the License.
 +"""Utilities functions
 +"""
 +
 +import marvin
 +import time
 +from marvin.remoteSSHClient import remoteSSHClient
 +from marvin.cloudstackAPI import *
 +import logging
 +import string
 +import random
 +import imaplib
 +import email
 +import datetime
 +
 +
 +def restart_mgmt_server(server):
 +    """Restarts the management server"""
 +
 +    try:
 +        # Get the SSH client
 +        ssh = is_server_ssh_ready(
 +                                  server["ipaddress"],
 +                                  server["port"],
 +                                  server["username"],
 +                                  server["password"],
 +                                )
 +        result = ssh.execute("/etc/init.d/cloud-management restart")
 +        res = str(result)
 +        # Server Stop - OK
 +        # Server Start - OK
 +        if res.count("OK") != 2:
 +            raise ("ErrorInReboot!")
 +    except Exception as e:
 +        raise e
 +    return
 +
 +
 +def fetch_latest_mail(services, from_mail):
 +    """Fetch mail"""
 +
 +    # Login to mail server to verify email
 +    mail = imaplib.IMAP4_SSL(services["server"])
 +    mail.login(
 +                   services["email"],
 +                   services["password"]
 +                   )
 +    mail.list()
 +    mail.select(services["folder"])
 +    date = (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")
 +
 +    result, data = mail.uid(
 +            'search',
 +            None,
 +            '(SENTSINCE {date} HEADER FROM "{mail}")'.format(
 +                                                             date=date,
 +                                                             mail=from_mail
 +                                                             )
 +            )
 +    # Return False if email is not present
 +    if data == []:
 +        return False
 +
 +    latest_email_uid = data[0].split()[-1]
 +    result, data = mail.uid('fetch', latest_email_uid, '(RFC822)')
 +    raw_email = data[0][1]
 +    email_message = email.message_from_string(raw_email)
 +    result = get_first_text_block(email_message)
 +    return result
 +
 +
 +def get_first_text_block(email_message_instance):
 +    """fetches first text block from the mail"""
 +    maintype = email_message_instance.get_content_maintype()
 +    if maintype == 'multipart':
 +        for part in email_message_instance.get_payload():
 +            if part.get_content_maintype() == 'text':
 +                return part.get_payload()
 +    elif maintype == 'text':
 +        return email_message_instance.get_payload()
 +
 +
 +def random_gen(size=6, chars=string.ascii_uppercase + string.digits):
 +    """Generate Random Strings of variable length"""
 +    return ''.join(random.choice(chars) for x in range(size))
 +
 +
 +def cleanup_resources(api_client, resources):
 +    """Delete resources"""
 +    for obj in resources:
 +        obj.delete(api_client)
 +
 +
- def is_server_ssh_ready(ipaddress, port, username, password, retries=50):
++def is_server_ssh_ready(ipaddress, port, username, password, retries=50, keyPairFileLocation=None):
 +    """Return ssh handle else wait till sshd is running"""
 +    loop_cnt = retries
 +    while True:
 +        try:
-             ssh = remoteSSHClient(ipaddress, port, username, password)
++            ssh = remoteSSHClient(
++                                    host=ipaddress,
++                                    port=port,
++                                    user=username,
++                                    passwd=password,
++                                    keyPairFileLocation=keyPairFileLocation)
 +        except Exception as e:
 +            if loop_cnt == 0:
 +                raise e
 +            loop_cnt = loop_cnt - 1
 +            time.sleep(30)
 +        else:
 +            return ssh
 +
 +
 +def format_volume_to_ext3(ssh_client, device="/dev/sda"):
 +    """Format attached storage to ext3 fs"""
 +    cmds = [
 +            "echo -e 'n\np\n1\n\n\nw' | fdisk %s" % device,
 +            "mkfs.ext3 %s1" % device,
 +           ]
 +    for c in cmds:
 +        ssh_client.execute(c)
 +
 +
 +def fetch_api_client(config_file='datacenterCfg'):
 +    """Fetch the Cloudstack API Client"""
 +    config = marvin.configGenerator.get_setup_config(config_file)
 +    mgt = config.mgtSvr[0]
 +    testClientLogger = logging.getLogger("testClient")
 +    asyncTimeout = 3600
 +    return cloudstackAPIClient.CloudStackAPIClient(
 +            marvin.cloudstackConnection.CloudConnection(
 +                                                mgt.mgtSvrIp,
 +                                                mgt.port,
 +                                                mgt.apiKey,
 +                                                mgt.securityKey,
 +                                                asyncTimeout,
 +                                                testClientLogger
 +                                                )
 +                                            )
 +
 +
- def get_process_status(hostip, port, username, password, linklocalip, process):
++def get_process_status(hostip, port, username, password, linklocalip, process, hypervisor=None):
 +    """Double hop and returns a process status"""
 +
 +    #SSH to the machine
 +    ssh = remoteSSHClient(hostip, port, username, password)
-     ssh_command = "ssh -i ~/.ssh/id_rsa.cloud -ostricthostkeychecking=no "
++    if str(hypervisor).lower() == 'vmware':
++        ssh_command = "ssh -i /var/lib/cloud/management/.ssh/id_rsa -ostricthostkeychecking=no
"
++    else:
++        ssh_command = "ssh -i ~/.ssh/id_rsa.cloud -ostricthostkeychecking=no "
++
 +    ssh_command = ssh_command + \
 +                    "-oUserKnownHostsFile=/dev/null -p 3922 %s %s" % (
 +                                                                linklocalip,
 +                                                                process)
 +
 +    # Double hop into router
 +    timeout = 5
 +    # Ensure the SSH login is successful
 +    while True:
 +        res = ssh.execute(ssh_command)
 +
 +        if res[0] != "Host key verification failed.":
 +            break
 +        elif timeout == 0:
 +            break
 +
 +        time.sleep(5)
 +        timeout = timeout - 1
 +    return res


Mime
View raw message