PlanetLab support toon-up: home_cleanup only nepi folders + make server support longe...
[nepi.git] / examples / daemonized_testbed_controller.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Experiment Topology:
6 #
7 #  n1 --- n2
8 #  0.1   0.2 
9 #    
10
11 from nepi.core.design import ExperimentDescription, FactoriesProvider
12 from nepi.core.execute import ExperimentController
13 from nepi.util import proxy
14 from nepi.util.constants import DeploymentConfiguration as DC
15 import getpass
16 import tempfile
17 import time
18 import os
19
20 user = getpass.getuser()
21 root_dir = tempfile.mkdtemp()
22 netns_dir = os.path.join(root_dir, "netns")
23 daemon_dir = os.path.join(netns_dir, "daemon")
24 os.makedirs(daemon_dir)
25
26
27 exp_desc = ExperimentDescription()
28
29 netns_provider = FactoriesProvider("netns")
30 netns_desc = exp_desc.add_testbed_description(netns_provider)
31 netns_desc.set_attribute_value("homeDirectory", netns_dir)
32 #netns_desc.set_attribute_value("enableDebug", True)
33 netns_desc.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
34 netns_desc.set_attribute_value(DC.ROOT_DIRECTORY, daemon_dir)
35 netns_desc.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
36 netns_desc.set_attribute_value(DC.USE_SUDO, True)
37
38 node1 = netns_desc.create("Node")
39 node2 = netns_desc.create("Node")
40
41 iface12 = netns_desc.create("P2PNodeInterface")
42 iface12.set_attribute_value("up", True)
43 node1.connector("devs").connect(iface12.connector("node"))
44
45 iface21 = netns_desc.create("P2PNodeInterface")
46 iface21.set_attribute_value("up", True)
47 node2.connector("devs").connect(iface21.connector("node"))
48
49 iface12.connector("p2p").connect(iface21.connector("p2p"))
50
51 ip12 = iface12.add_address()
52 ip12.set_attribute_value("Address", "192.168.0.1")
53 ip12.set_attribute_value("NetPrefix", 30)
54
55 ip21 = iface21.add_address()
56 ip21.set_attribute_value("Address", "192.168.0.2")
57 ip21.set_attribute_value("NetPrefix", 30)
58
59 app1 = netns_desc.create("Application")
60 app1.set_attribute_value("command", "ping -qc 10 192.168.0.1")
61 app1.set_attribute_value("user", user)
62 app1.connector("node").connect(node1.connector("apps"))
63
64 app1.enable_trace("stdout")
65
66 xml = exp_desc.to_xml()
67
68 controller_access_config = proxy.AccessConfiguration()
69 controller_access_config.set_attribute_value(DC.DEPLOYMENT_MODE, DC.MODE_DAEMON)
70 controller_access_config.set_attribute_value(DC.ROOT_DIRECTORY, root_dir)
71 controller_access_config.set_attribute_value(DC.LOG_LEVEL, DC.DEBUG_LEVEL)
72
73 controller = proxy.create_experiment_controller(xml, controller_access_config)
74
75 controller.start()
76 while not controller.is_finished(app1.guid):
77     time.sleep(0.5)
78
79 result = controller.trace(app1.guid, "stdout")
80
81 controller.stop()
82 controller.shutdown()
83
84 print result
85