directory structure reorganized in devops (fixing last devops commit)
This commit is contained in:
parent
19aa812bb1
commit
92b3c14b55
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
exec python -m devops "$@"
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
|
||||
function virsh { command virsh "$@" | tail -n +3; }
|
||||
function foreach { xargs --no-run-if-empty -n 1 "$@"; }
|
||||
|
||||
virsh list --all | awk '{print $2}' | foreach virsh destroy
|
||||
virsh list --all | awk '{print $2}' | foreach virsh undefine
|
||||
|
||||
virsh net-list --all | awk '{print $1}' | foreach virsh net-destroy
|
||||
virsh net-list --all | awk '{print $1}' | foreach virsh net-undefine
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# vim: ts=4 sw=4
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import shutil
|
||||
from optparse import OptionParser
|
||||
|
||||
from devops.model import Environment, Network, Node, Disk, Cdrom, Interface
|
||||
from devops.controller import Controller
|
||||
from devops.network import IpNetworksPool
|
||||
from devops.driver.libvirt import Libvirt
|
||||
from devops.helpers import tcp_ping, wait
|
||||
|
||||
ADMIN_ISO_NAME = 'nailgun-ubuntu-12.04-amd64.last.iso'
|
||||
ADMIN_ISO_URL = "http://mc0n1-srt.srt.mirantis.net/%s" % ADMIN_ISO_NAME
|
||||
ADMIN_ISO_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', ADMIN_ISO_NAME))
|
||||
|
||||
def log(message):
|
||||
print(message)
|
||||
|
||||
def download_iso():
|
||||
print("Downloading installation iso")
|
||||
os.system("cd '%s'; wget --timestamping '%s'" % (os.path.dirname(ADMIN_ISO_PATH), ADMIN_ISO_URL))
|
||||
print("Finished downloading installation iso")
|
||||
|
||||
def main():
|
||||
parser = OptionParser()
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if len(args) != 1:
|
||||
print("Usage: python install_admin.py <admin_disk_path>")
|
||||
sys.exit(1)
|
||||
|
||||
admin_disk_path = args[0]
|
||||
|
||||
download_iso()
|
||||
|
||||
environment = Environment('admin')
|
||||
|
||||
network = Network('default')
|
||||
environment.networks.append(network)
|
||||
|
||||
admin_node = Node('admin')
|
||||
admin_node.vnc = True
|
||||
admin_node.cdrom = Cdrom(isopath=ADMIN_ISO_PATH)
|
||||
admin_node.disks.append(Disk(size=8*1024**3))
|
||||
admin_node.interfaces.append(Interface(network))
|
||||
admin_node.boot += ['disk', 'cdrom']
|
||||
environment.nodes.append(admin_node)
|
||||
|
||||
log("Creating environment")
|
||||
|
||||
controller = Controller(Libvirt())
|
||||
controller.build_environment(environment)
|
||||
|
||||
log("Starting node")
|
||||
|
||||
try:
|
||||
admin_node.start()
|
||||
|
||||
log("Node started. VNC is available at port %d" % admin_node.vnc_port)
|
||||
|
||||
log("Waiting node to boot")
|
||||
|
||||
time.sleep(10)
|
||||
|
||||
ip = network.ip_addresses
|
||||
|
||||
log("Sending user input")
|
||||
|
||||
admin_node.send_keys("""<Esc><Enter>
|
||||
<Wait>
|
||||
/install/vmlinuz initrd=/install/initrd.gz
|
||||
priority=critical
|
||||
locale=en_US
|
||||
file=/cdrom/preseed/manual.seed
|
||||
vga=788
|
||||
netcfg/get_ipaddress=%(ipaddress)s
|
||||
netcfg/get_netmask=%(netmask)s
|
||||
netcfg/get_gateway=%(gateway)s
|
||||
netcfg/get_nameservers=%(gateway)s
|
||||
netcfg/confirm_static=true
|
||||
<Enter>""" % { 'ipaddress': ip[2], 'netmask': ip.netmask, 'gateway': ip[1] })
|
||||
|
||||
log("Waiting for node to install")
|
||||
|
||||
wait(lambda: tcp_ping(ip[2], 22))
|
||||
|
||||
log("Stopping node")
|
||||
|
||||
admin_node.stop()
|
||||
|
||||
log("Copying node's disk image")
|
||||
|
||||
shutil.copy(admin_node.disks[0].path, admin_disk_path)
|
||||
|
||||
print("Admin image creation completed. Image is stored at %s" % admin_disk_path)
|
||||
|
||||
log("Destroying environment")
|
||||
controller.destroy_environment(environment)
|
||||
except:
|
||||
log("Error occurred, leaving environment for inspection")
|
||||
raise
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
import unittest
|
||||
import devops
|
||||
from devops.helpers import wait, TimeoutError
|
||||
import time
|
||||
|
||||
ISO_URL = 'http://mc0n1-srt.srt.mirantis.net/livecd.iso'
|
||||
|
||||
class TestNodeIpAddress(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.env = devops.load("""
|
||||
networks:
|
||||
- network: net1
|
||||
dhcp_server: True
|
||||
nodes:
|
||||
- node: foo
|
||||
networks: net1
|
||||
cdrom: '%s'
|
||||
vnc: True
|
||||
""" % ISO_URL)
|
||||
devops.build(self.env)
|
||||
|
||||
def tearDown(self):
|
||||
devops.destroy(self.env)
|
||||
|
||||
def test_ip_address_detection(self):
|
||||
node = self.env.nodes[0]
|
||||
network = self.env.networks[0]
|
||||
|
||||
node.start()
|
||||
# Wait for ISOLINUX to boot
|
||||
time.sleep(10)
|
||||
# Trigger ISOLINUX menu selection
|
||||
node.send_keys('<Enter>')
|
||||
|
||||
try:
|
||||
wait(lambda: len(node.ip_addresses) > 0, timeout=60)
|
||||
except TimeoutError:
|
||||
self.fail("Node didn't get ip_address in specified amount of time")
|
||||
|
||||
self.assertEqual(node.ip_address, node.ip_addresses[0])
|
||||
self.assertTrue(node.ip_address in network.ip_addresses)
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
import time
|
||||
|
||||
import devops
|
||||
from devops.helpers import wait, tcp_ping
|
||||
|
||||
import logging
|
||||
|
||||
MASTER_AND_SLAVE_CONFIG = """
|
||||
name: 'Sample environment'
|
||||
networks:
|
||||
- network: internal
|
||||
- network: external
|
||||
nodes:
|
||||
- node: master
|
||||
disk: '5Gb'
|
||||
cdrom: http://mc0n1-srt.srt.mirantis.net/nailgun-ubuntu-12.04-amd64.last.iso
|
||||
networks: ['external', 'internal']
|
||||
vnc: True
|
||||
- node: slave
|
||||
networks: ['internal']
|
||||
vnc: True
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(level=logging.WARN)
|
||||
logger = logging.getLogger('test.integration')
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
environment = devops.load(MASTER_AND_SLAVE_CONFIG)
|
||||
|
||||
logger.info("Building environment")
|
||||
|
||||
devops.build(environment)
|
||||
|
||||
logger.info("Environment ready")
|
||||
|
||||
try:
|
||||
external_network = environment.network['external']
|
||||
|
||||
master_node = environment.node['master']
|
||||
slave_node = environment.node['slave']
|
||||
|
||||
logger.info("Starting master node")
|
||||
master_node.start()
|
||||
|
||||
logger.info("VNC to master is available on %d" % master_node.vnc_port)
|
||||
|
||||
logger.info("Waiting master node to boot")
|
||||
time.sleep(15)
|
||||
|
||||
logger.info("Sending user input")
|
||||
|
||||
ip = external_network.ip_addresses
|
||||
host_ip = ip[1]
|
||||
master_ip = ip[2]
|
||||
netmask = ip.netmask
|
||||
|
||||
master_node.send_keys("""<Esc><Enter>
|
||||
<Wait>
|
||||
/install/vmlinuz initrd=/install/initrd.gz
|
||||
priority=critical
|
||||
locale=en_US
|
||||
file=/cdrom/preseed/manual.seed
|
||||
vga=788
|
||||
netcfg/get_ipaddress=%s
|
||||
netcfg/get_netmask=%s
|
||||
netcfg/get_gateway=%s
|
||||
netcfg/get_nameservers=%s
|
||||
netcfg/confirm_static=true
|
||||
<Enter>""" % (master_ip, netmask, host_ip, host_ip))
|
||||
logger.info("Finished sending user input")
|
||||
|
||||
logger.info("Waiting master node to install")
|
||||
wait(lambda: tcp_ping(master_ip, 22))
|
||||
|
||||
logger.info("Starting slave node")
|
||||
|
||||
slave_node.start()
|
||||
|
||||
logger.info("VNC to slave node at port %d" % slave_node.vnc_port)
|
||||
|
||||
logger.info("Waiting slave node to configure network")
|
||||
|
||||
wait(lambda: len(slave_node.ip_addresses) > 0, timeout=120)
|
||||
|
||||
logger.info("Slave node has IP address %s" % slave_node.ip_addresses[0])
|
||||
except:
|
||||
devops.save(environment)
|
||||
logger.warn("Environment has been saved as %s" % environment.id)
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
Loading…
Reference in New Issue