From 114b25560e15995db43f8170d9aa428e8f765c3a Mon Sep 17 00:00:00 2001 From: Nikolay Markov Date: Tue, 10 Jul 2012 16:18:30 +0400 Subject: [PATCH] devops network pxe support --- devops/devops/controller.py | 6 +++++- devops/devops/driver/libvirt.py | 5 ++++- devops/devops/model.py | 3 ++- test/integration/__init__.py | 2 +- test/integration/helpers.py | 4 ++++ test/integration/test_node.py | 11 +++++++---- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/devops/devops/controller.py b/devops/devops/controller.py index bd00c0aa4..e25545a3e 100644 --- a/devops/devops/controller.py +++ b/devops/devops/controller.py @@ -58,7 +58,11 @@ class Controller: for network in environment.networks: logger.info("Building network %s" % network.name) - + if network.pxe: + tftp_path = os.path.join(environment.work_dir, "tftp") + if not os.path.exists(tftp_path): + os.mkdir(tftp_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) + network.tftp_root_dir = tftp_path network.ip_addresses = self.networks_pool.get() self.driver.create_network(network) network.driver = self.driver diff --git a/devops/devops/driver/libvirt.py b/devops/devops/driver/libvirt.py index 9b204fc86..26656e1e7 100644 --- a/devops/devops/driver/libvirt.py +++ b/devops/devops/driver/libvirt.py @@ -43,12 +43,15 @@ class LibvirtXMLBuilder: if hasattr(network, 'ip_addresses') and not network.ip_addresses is None: with network_xml.ip(address=str(network.ip_addresses[1]), prefix=str(network.ip_addresses.prefixlen)): + if network.pxe: + network_xml.tftp(root=network.tftp_root_dir) if network.dhcp_server: with network_xml.dhcp: start = network.ip_addresses[2] end = network.ip_addresses[network.ip_addresses.numhosts-2] - network_xml.range(start=str(start), end=str(end)) + if network.pxe: + network_xml.bootp(file="pxelinux.0") return str(network_xml) diff --git a/devops/devops/model.py b/devops/devops/model.py index 23d1b6abd..055ba4e62 100644 --- a/devops/devops/model.py +++ b/devops/devops/model.py @@ -44,11 +44,12 @@ class Environment(ManagedObject): return name2network class Network(ManagedObject): - def __init__(self, name, dhcp_server=False): + def __init__(self, name, dhcp_server=False, pxe=False): super(Network, self).__init__() self.name = name self.dhcp_server = dhcp_server + self.pxe = pxe def start(self): self.driver.start_network(self) diff --git a/test/integration/__init__.py b/test/integration/__init__.py index a3268b8fe..c9fb523c3 100644 --- a/test/integration/__init__.py +++ b/test/integration/__init__.py @@ -9,7 +9,7 @@ import traceback import logging logger = logging.getLogger('integration') -class Ci: +class Ci(object): hostname = 'nailgun' domain = 'mirantis.com' diff --git a/test/integration/helpers.py b/test/integration/helpers.py index 37a7d571d..81b108c35 100644 --- a/test/integration/helpers.py +++ b/test/integration/helpers.py @@ -6,6 +6,10 @@ import paramiko logging.basicConfig(format=':%(lineno)d: %(asctime)s %(message)s', level=logging.DEBUG) + +""" +Integration test helpers +""" class HTTPClient(object): def __init__(self): self.opener = urllib2.build_opener(urllib2.HTTPHandler) diff --git a/test/integration/test_node.py b/test/integration/test_node.py index 59d0dde4c..4bf47ba4a 100644 --- a/test/integration/test_node.py +++ b/test/integration/test_node.py @@ -8,12 +8,13 @@ import urllib2 from unittest import TestCase from subprocess import Popen, PIPE -from . import ci -from devops.helpers import wait, tcp_ping, http -from integration.helpers import HTTPClient, SSHClient - import paramiko +from devops.helpers import wait, tcp_ping, http + +from . import ci +from integration.helpers import HTTPClient, SSHClient + logging.basicConfig(format=':%(lineno)d: %(asctime)s %(message)s', level=logging.DEBUG) SOLO_PATH = os.path.join(os.path.dirname(__file__), "..", "..", "scripts", "agent") @@ -25,6 +26,8 @@ SAMPLE_REMOTE_PATH = "/home/ubuntu" class StillPendingException(Exception): pass + + class TestNode(TestCase): def __init__(self, *args, **kwargs): super(TestNode, self).__init__(*args, **kwargs)