11
def log(msg, level=1):
15
charmconfig['VSP_VM_NAME'] = 'vsc'
16
charmconfig['VSP_VM_DIR'] = '/home/ovs-6/charms/trusty/nuage-vsc/payload/'
17
charmconfig['VSP_VM_XML'] = 'vsc.xml'
18
charmconfig['VSP_VM_IMAGE_NAME'] = 'nuage_vsc.img'
19
charmconfig['VSP_VM_ORIG_IMAGE_NAME'] = 'vsc_singledisk.qcow2'
20
charmconfig['VSP_VM_IMAGE_DIR'] = '/home/ovs-6/charms/trusty/nuage-vsc/payload/'
24
run_state = subprocess.check_output(['bash', '-c', 'sudo virsh list --all | grep ${VSP_VM_NAME} | awk \'{print $NF}\')'])
25
if run_state == 'running':
29
except subprocess.CalledProcessError, e:
30
log("Error: is_vm_running Failed with error:{}".format(e.returncode), level=ERROR)
33
def _run_virsh_command(cmd, vmconfig):
35
Run virsh command, checking output
37
:param: cmd: str: The virsh command to run.
39
env = os.environ.copy()
40
for key, value in vmconfig.iteritems():
43
#env['VSP_VM_NAME'] = vmconfig['VSP_VM_NAME']
44
#env['VSP_VM_DIR'] = vmconfig['VSP_VM_DIR']
45
#env['VSP_VM_XML'] = vmconfig['VSP_VM_XML']
46
#env['VSP_VM_IMAGE_NAME'] = vmconfig['VSP_VM_IMAGE_NAME']
47
#env['VSP_VM_ORIG_IMAGE_NAME'] = vmconfig['VSP_VM_ORIG_IMAGE_NAME']
48
#env['VSP_VM_IMAGE_DIR'] = vmconfig['VSP_VM_IMAGE_DIR']
51
log("execute virsh cmd {0}\n".format(cmd))
52
resultstr = subprocess.check_output(cmd, env=env)
54
log("Error: virsh cmd {0} Failed with error:{1}".format(cmd, resultstr), level=ERROR)
56
except subprocess.CalledProcessError, e:
57
log("Error: virsh cmd {0} Failed with error:{1}".format(cmd, e.returncode), level=ERROR)
59
log("virsh cmd result: {0}\n".format(resultstr))
63
def createvm(vmconfig):
64
_run_virsh_command(['bash', '-c', 'source /home/ovs-6/charms/trusty/nuage-vsc/payload/nuage_common.sh && create_vsp_vm'], vmconfig)
65
log("{} is successfully created.".format(vmconfig['VSP_VM_NAME']))
66
def startvm(vmconfig):
67
_run_virsh_command(['bash', '-c', 'source /home/ovs-6/charms/trusty/nuage-vsc/payload/nuage_common.sh && start_vsp_vm'], vmconfig)
68
log("{} is successfully started.".format(vmconfig['VSP_VM_NAME']))
72
_run_virsh_command(['bash', '-c', 'source /home/ovs-6/charms/trusty/nuage-vsc/payload/nuage_common.sh && stop_vsp_vm'], vmconfig)
73
log("{} is successfully shutdown.".format(vmconfig['VSP_VM_NAME']))
75
def get_vm_ip_address(vmconfig):
76
vm_ip_address = _run_virsh_command(['bash', '-c', 'source /home/ovs-6/charms/trusty/nuage-vsc/payload/nuage_common.sh && get_vsp_vm_ip_address'], vmconfig)
78
#for mac in `virsh domiflist vsc |grep -o -E "([0-9a-f]{2}:){5}([0-9a-f]{2})"` ; do arp -e |grep $mac |grep -o -P "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" ; done
80
def get_domain_name(ip_address):
82
result_str = subprocess.check_output(['bash', '-c', 'nslookup {} | grep -o -E \"name = .*.[net|com|org]\"'.format(ip_address)])
83
if result_str.startswith('name = '):
84
domain_name = result_str.replace('name = ', '')
88
except subprocess.CalledProcessError, e:
89
log("Error: get_domain_name Failed with error:{}".format(e.returncode), level=ERROR)
96
def update_vsd_domain(vsc_host, username, password, vsd_domain):
97
ssh_newkey = 'Are you sure you want to continue connecting'
98
child = pexpect.spawn('ssh %s@%s' % (username, vsc_host))
99
log('ssh %s@%s' % (username, vsc_host))
100
i=child.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT],1)
103
child.sendline('yes')
104
i=child.expect([ssh_newkey,'password:',pexpect.EOF])
106
print "I give password",
107
child.sendline(password)
109
print "I either got key or connection timeout"
114
child.sendline("configure vswitch-controller xmpp-server \"{}\"".format(vsd_domain))
119
def update_vsd_domain1(vsc_host, username, password, vsd_domain):
120
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
121
ssh = paramiko.SSHClient()
122
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
124
ssh.connect(vsc_host, username, password=password, timeout=120)
125
except Exception as e:
126
err = 'Error(%s): Unable to ssh to VSM VM (%s)' % (e, vsc_host)
128
stdin, stdout, stderr = ssh.exec_command("configure vswitch-controller xmpp-server \"{}\"".format(vsd_domain))
129
msg = stdout.readlines()
130
stdin, stdout, stderr = ssh.exec_command("show vswitch-controller xmpp-server")
131
msg = stdout.readlines()
132
if str(msg).find(vsd_domain) == -1:
133
err = 'Error: {0}:{1} is not set' % (msg, vsd_domain)
b'\\ No newline at end of file'