Merging patch to support https proxies when running experiments using PlanetLab,...
[nepi.git] / examples / planetlab_simple_experiment.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import getpass
5 from nepi.core.design import ExperimentDescription, FactoriesProvider
6 from nepi.core.execute import ExperimentController
7 from nepi.util import proxy
8 from nepi.util.constants import DeploymentConfiguration as DC
9 import os
10 import shutil
11 import tempfile
12 import time
13
14 root_dir = tempfile.mkdtemp()
15 user = getpass.getuser()
16 slicename = os.environ["PL_SLICE"]
17 plchost = "www.planet-lab.eu"
18 port_base = 2000 + (os.getpid() % 1000) * 13
19 pl_ssh_key = os.environ.get(
20     "PL_SSH_KEY",
21     "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
22 pl_user = os.environ.get('PL_USER')
23 pl_pwd = os.environ.get('PL_PASS')
24
25 exp_desc = ExperimentDescription()
26
27 pl_provider = FactoriesProvider("planetlab")
28 pl_desc = exp_desc.add_testbed_description(pl_provider)
29 pl_desc.set_attribute_value("homeDirectory", root_dir)
30 pl_desc.set_attribute_value("slice", slicename)
31 pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
32 pl_desc.set_attribute_value("authUser", pl_user)
33 pl_desc.set_attribute_value("authPass", pl_pwd)
34 pl_desc.set_attribute_value("plcHost", plchost)
35 pl_desc.set_attribute_value("tapPortBase", port_base)
36 pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
37 pl_desc.set_attribute_value("cleanProc", True)
38 pl_desc.set_attribute_value("plLogLevel", "DEBUG")
39        
40 pl_inet = pl_desc.create("Internet")
41
42 pl_node1 = pl_desc.create("Node")
43 pl_iface1 = pl_desc.create("NodeInterface")
44 pl_iface1.set_attribute_value("label", "iface1")
45 pl_iface1.connector("inet").connect(pl_inet.connector("devs"))
46 pl_node1.connector("devs").connect(pl_iface1.connector("node"))
47
48 pl_node2 = pl_desc.create("Node")
49 pl_iface2 = pl_desc.create("NodeInterface")
50 pl_iface2.set_attribute_value("label", "iface2")
51 pl_iface2.connector("inet").connect(pl_inet.connector("devs"))
52 pl_node2.connector("devs").connect(pl_iface2.connector("node"))
53
54 pl_app1 = pl_desc.create("Application")
55 pl_app1.set_attribute_value("command", "ping -qc3 {#[iface2].addr[0].[Address]#}")
56 pl_app1.enable_trace("stdout")
57 pl_app1.connector("node").connect(pl_node1.connector("apps"))
58
59 pl_app2 = pl_desc.create("Application")
60 pl_app2.set_attribute_value("command", "ping -qc3 {#[iface1].addr[0].[Address]#}")
61 pl_app2.enable_trace("stdout")
62 pl_app2.connector("node").connect(pl_node2.connector("apps"))
63
64 xml = exp_desc.to_xml()
65
66 controller = ExperimentController(xml, root_dir)
67 controller.start()
68 while (not controller.is_finished(pl_app1.guid) or not controller.is_finished(pl_app1.guid)):
69     time.sleep(0.5)
70
71 ping_result1 = controller.trace(pl_app1.guid, "stdout")
72 print ping_result1
73 ping_result2 = controller.trace(pl_app2.guid, "stdout")
74 print ping_result2
75
76 controller.stop()
77 controller.shutdown()
78