This commit is contained in:
vic 2013-01-23 19:13:42 +04:00
parent 75badf4f05
commit 775ff78d34
8 changed files with 58 additions and 32 deletions

View File

@ -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__':

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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()

View File

@ -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 = {

View File

@ -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 *

View File

@ -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)