It works
This commit is contained in:
parent
75badf4f05
commit
775ff78d34
|
@ -18,20 +18,24 @@ def one(manager):
|
|||
forward='nat')
|
||||
private = manager.network_create(
|
||||
environment=environment, name='private', pool=private_pool)
|
||||
node = manager.node_create(name='test_node', environment=environment)
|
||||
manager.interface_create(node=node, network=internal)
|
||||
manager.interface_create(node=node, network=external)
|
||||
manager.interface_create(node=node, network=private)
|
||||
volume = manager.volume_get_predefined(
|
||||
'/var/lib/libvirt/images/centos63-cobbler-base.qcow2')
|
||||
v3 = manager.volume_create_child('test_vp895', backing_store=volume,
|
||||
environment=environment)
|
||||
v4 = manager.volume_create_child('test_vp896', backing_store=volume,
|
||||
environment=environment)
|
||||
manager.node_attach_volume(node=node, volume=v3)
|
||||
manager.node_attach_volume(node, v4)
|
||||
for i in range(0,2):
|
||||
node = manager.node_create(name='test_node' + str(i), environment=environment)
|
||||
manager.interface_create(node=node, network=internal)
|
||||
manager.interface_create(node=node, network=external)
|
||||
manager.interface_create(node=node, network=private)
|
||||
volume = manager.volume_get_predefined(
|
||||
'/var/lib/libvirt/images/centos63-cobbler-base.qcow2')
|
||||
v3 = manager.volume_create_child('test_vp895' + str(i), backing_store=volume,
|
||||
environment=environment)
|
||||
v4 = manager.volume_create_child('test_vp896'+ str(i), backing_store=volume,
|
||||
environment=environment)
|
||||
manager.node_attach_volume(node=node, volume=v3)
|
||||
manager.node_attach_volume(node, v4)
|
||||
environment.define()
|
||||
environment.start()
|
||||
for nodea in environment.nodes:
|
||||
nodea.await('internal')
|
||||
nodea.remote('internal', 'root', 'r00tme').check_stderr('ls -la', verbose=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -3,9 +3,9 @@ class DevopsError(Exception):
|
|||
|
||||
|
||||
class DevopsCalledProcessError(DevopsError):
|
||||
def __init__(self, returncode, cmd, output=None):
|
||||
def __init__(self, command, returncode, output=None):
|
||||
self.returncode = returncode
|
||||
self.cmd = cmd
|
||||
self.cmd = command
|
||||
self.output = output
|
||||
|
||||
def __str__(self):
|
||||
|
|
|
@ -130,14 +130,14 @@ class SSHClient(object):
|
|||
|
||||
def check_call(self, command, verbose=False):
|
||||
ret = self.execute(command, verbose)
|
||||
if not ret['exit_code']:
|
||||
raise DevopsCalledProcessError(command, ret, ret['stderr'])
|
||||
if ret['exit_code'] != 0:
|
||||
raise DevopsCalledProcessError(command, ret, ret['stdout'] + ret['stderr'])
|
||||
return ret
|
||||
|
||||
def check_stderr(self, command, verbose=False):
|
||||
ret = self.check_call(command, verbose)
|
||||
if ret['stderr']:
|
||||
raise DevopsCalledProcessError(command, ret, ret['stderr'])
|
||||
raise DevopsCalledProcessError(command, ret, ret['stdout'] + ret['stderr'])
|
||||
return ret
|
||||
|
||||
def execute(self, command, verbose=False):
|
||||
|
|
|
@ -13,12 +13,18 @@ class Manager(object):
|
|||
self.default_pool = None
|
||||
|
||||
def environment_create(self, name):
|
||||
"""
|
||||
:rtype : Environment
|
||||
"""
|
||||
return Environment.objects.create(name=name)
|
||||
|
||||
def environment_list(self):
|
||||
return Environment.objects.all()
|
||||
|
||||
def environment_get(self, name):
|
||||
"""
|
||||
:rtype : Environment
|
||||
"""
|
||||
return Environment.objects.get(name=name)
|
||||
|
||||
def create_network_pool(self, networks, prefix):
|
||||
|
|
|
@ -159,19 +159,6 @@ class Network(ExternalModel):
|
|||
ip_address=str(ip)).exists():
|
||||
return ip
|
||||
|
||||
def ip_address_by_network_name(self, name):
|
||||
return Address.objects.get(
|
||||
interface__network_name=name).ip_address
|
||||
|
||||
def remote(self, network_name, login, password):
|
||||
return SSHClient(
|
||||
self.ip_address_by_network_name(network_name), login, password)
|
||||
|
||||
def await_remote(self, network_name, login, password, timeout=120):
|
||||
wait(
|
||||
lambda: tcp_ping(self.ip_address_by_network_name(network_name), 22),
|
||||
timeout=timeout)
|
||||
return self.remote(network_name, login, password)
|
||||
|
||||
def bridge_name(self):
|
||||
return self.driver.network_bridge_name(self)
|
||||
|
@ -235,6 +222,25 @@ class Node(ExternalModel):
|
|||
def interface_by_name(self, name):
|
||||
self.interfaces.filter(name=name)
|
||||
|
||||
def get_ip_address_by_network_name(self, name):
|
||||
return Address.objects.get(
|
||||
interface__network__name=name, interface__node=self).ip_address
|
||||
|
||||
def remote(self, network_name, login, password):
|
||||
"""
|
||||
:rtype : SSHClient
|
||||
"""
|
||||
return SSHClient(
|
||||
self.get_ip_address_by_network_name(network_name),
|
||||
username=login,
|
||||
password=password)
|
||||
|
||||
def await(self, network_name, timeout=120):
|
||||
wait(
|
||||
lambda: tcp_ping(
|
||||
self.get_ip_address_by_network_name(network_name), 22),
|
||||
timeout=timeout)
|
||||
|
||||
def define(self):
|
||||
self.driver.node_define(self)
|
||||
self.save()
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import os
|
||||
|
||||
DRIVER = 'src.devops.driver.libvirt.libvirt_driver.LibvirtDriver'
|
||||
HOME_DIR = os.environ.get('DEVOPS_HOME') or os.environ.get('APPDATA') or
|
||||
os.environ['HOME']
|
||||
HOME_DIR = os.environ.get('DEVOPS_HOME') or os.environ.get('APPDATA') or os.environ['HOME']
|
||||
INSTALLED_APPS = ['devops']
|
||||
|
||||
DATABASES = {
|
||||
|
|
|
@ -2,3 +2,4 @@ __author__ = 'vic'
|
|||
from devops.tests.test_models import *
|
||||
from devops.tests.test_manager import *
|
||||
from devops.tests.test_scancodes import *
|
||||
from devops.tests.test_errors import *
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
from unittest import TestCase
|
||||
from devops.error import DevopsCalledProcessError
|
||||
|
||||
class TestManager(TestCase):
|
||||
|
||||
def test(self):
|
||||
raise DevopsCalledProcessError('asdf', 1, ['a', 'b'] + ['b', 'c'])
|
||||
|
||||
def test2(self):
|
||||
raise DevopsCalledProcessError('asdf', 1)
|
Loading…
Reference in New Issue