2 # -*- coding: utf-8 -*-
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
14 def add_node(pl_desc, pl_inet, hostname):
15 pl_node = pl_desc.create("Node")
16 pl_node.set_attribute_value("hostname", hostname)
17 pl_iface = pl_desc.create("NodeInterface")
18 pl_iface.connector("inet").connect(pl_inet.connector("devs"))
19 pl_node.connector("devs").connect(pl_iface.connector("node"))
23 def add_dependency(pl_desc, pl_node):
24 pl_dep = pl_desc.create("Dependency")
25 pl_dep.set_attribute_value("depends", "gcc vim emacs")
26 pl_dep.connector("node").connect(pl_node.connector("deps"))
30 root_dir = tempfile.mkdtemp()
31 user = getpass.getuser()
32 slicename = os.environ["PL_SLICE"]
33 plchost = "www.planet-lab.eu"
34 port_base = 2000 + (os.getpid() % 1000) * 13
35 pl_ssh_key = os.environ.get(
37 "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
38 pl_user = os.environ.get('PL_USER')
39 pl_pwd = os.environ.get('PL_PASS')
41 exp_desc = ExperimentDescription()
43 pl_provider = FactoriesProvider("planetlab")
44 pl_desc = exp_desc.add_testbed_description(pl_provider)
45 pl_desc.set_attribute_value("homeDirectory", root_dir)
46 pl_desc.set_attribute_value("slice", slicename)
47 pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
48 pl_desc.set_attribute_value("authUser", pl_user)
49 pl_desc.set_attribute_value("authPass", pl_pwd)
50 pl_desc.set_attribute_value("plcHost", plchost)
51 pl_desc.set_attribute_value("tapPortBase", port_base)
52 pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
53 pl_desc.set_attribute_value("cleanProc", True)
54 pl_desc.set_attribute_value("plLogLevel", "DEBUG")
56 pl_inet = pl_desc.create("Internet")
58 hostnames = ["ait21.us.es", "planetlab4.cslab.ece.ntua.gr", "kostis.di.uoa.gr", "pl1.uni-rostock.de" ]
61 for hostname in hostnames:
62 pl_node = add_node(pl_desc, pl_inet, hostname)
63 pl_dep = add_dependency(pl_desc, pl_node)
66 xml = exp_desc.to_xml()
68 controller = ExperimentController(xml, root_dir)
75 for pl_dep in set(deps):
76 if not controller.is_finished(pl_dep.guid):