mirror of https://github.com/apache/cloudstack.git
101 lines
3.3 KiB
Python
101 lines
3.3 KiB
Python
# -*- encoding: utf-8 -*-
|
|
#
|
|
# Copyright (c) 2012 Citrix. All rights reserved.
|
|
#
|
|
|
|
"""Utilities functions
|
|
"""
|
|
|
|
import time
|
|
import remoteSSHClient
|
|
from cloudstackAPI import *
|
|
import cloudstackConnection
|
|
#from cloudstackConnection import cloudConnection
|
|
import configGenerator
|
|
import logging
|
|
import string
|
|
import random
|
|
|
|
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):
|
|
"""Return ssh handle else wait till sshd is running"""
|
|
loop_cnt = retries
|
|
while True:
|
|
try:
|
|
ssh = remoteSSHClient.remoteSSHClient(
|
|
ipaddress,
|
|
port,
|
|
username,
|
|
password
|
|
)
|
|
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 = configGenerator.get_setup_config(config_file)
|
|
mgt = config.mgtSvr[0]
|
|
testClientLogger = logging.getLogger("testClient")
|
|
asyncTimeout = 3600
|
|
return cloudstackAPIClient.CloudStackAPIClient(
|
|
cloudstackConnection.cloudConnection(
|
|
mgt.mgtSvrIp,
|
|
mgt.port,
|
|
mgt.apiKey,
|
|
mgt.securityKey,
|
|
asyncTimeout,
|
|
testClientLogger
|
|
)
|
|
)
|
|
|
|
def get_process_status(hostip, port, username, password, linklocalip, process):
|
|
"""Double hop and returns a process status"""
|
|
|
|
#SSH to the machine
|
|
ssh = remoteSSHClient.remoteSSHClient(
|
|
hostip,
|
|
port,
|
|
username,
|
|
password
|
|
)
|
|
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 |