Adding ICN PlanetLab large experiment scenarios
[nepi.git] / misc / planetlab_sfa.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 netns_root_dir = os.path.join(root_dir, "netns")
16 os.makedirs(netns_root_dir)
17 user = getpass.getuser()
18 slicename = os.environ["PL_SLICE"]
19 slicehrn = os.environ["PL_SLICE_HRN"]
20 plchost = os.environ["PL_HOST"]
21 port_base = 2000 + (os.getpid() % 1000) * 13
22 pl_ssh_key = os.environ.get(
23     "PL_SSH_KEY",
24     "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
25 pl_user = os.environ.get('PL_USER')
26 pl_pwd = os.environ.get('PL_PASS')
27
28 exp_desc = ExperimentDescription()
29
30 pl_provider = FactoriesProvider("planetlab")
31 pl_desc = exp_desc.add_testbed_description(pl_provider)
32 pl_desc.set_attribute_value("homeDirectory", root_dir)
33 pl_desc.set_attribute_value("slice", slicename)
34 pl_desc.set_attribute_value("sliceHrn", slicehrn)
35 pl_desc.set_attribute_value("sfa", True)
36 pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
37 pl_desc.set_attribute_value("authUser", pl_user)
38 pl_desc.set_attribute_value("authPass", pl_pwd)
39 pl_desc.set_attribute_value("plcHost", plchost)
40 pl_desc.set_attribute_value("tapPortBase", port_base)
41 pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
42 pl_desc.set_attribute_value("cleanProc", True)
43 pl_desc.set_attribute_value("plLogLevel", "DEBUG")
44        
45 pl_inet = pl_desc.create("Internet")
46
47 pl_node = pl_desc.create("Node")
48 pl_iface = pl_desc.create("NodeInterface")
49 pl_iface.connector("inet").connect(pl_inet.connector("devs"))
50 pl_node.connector("devs").connect(pl_iface.connector("node"))
51
52 app = pl_desc.create("Application")
53 app.set_attribute_value("command", "ping -qc1 173.194.34.51")
54 app.enable_trace("stdout")
55 app.connector("node").connect(pl_node.connector("apps"))
56
57 xml = exp_desc.to_xml()
58
59 controller = ExperimentController(xml, root_dir)
60 controller.start()
61 while not controller.is_finished(app.guid):
62     time.sleep(0.5)
63     
64 ping_result = controller.trace(app.guid, "stdout")
65 print ping_result
66
67 controller.stop()
68 controller.shutdown()
69