added vlc_cross_testbed_experiment.py
[nepi.git] / examples / planetlab_fix_gpgkeys.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 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"))
20
21     return pl_node
22
23 def add_app(pl_desc, pl_node):
24     pl_app = pl_desc.create("Application")
25     pl_app.set_attribute_value("command", "yum reinstall -y --nogpgcheck fedora-release")
26     pl_app.set_attribute_value("sudo", True)
27     pl_app.enable_trace("stderr")
28     pl_app.enable_trace("stdout")
29     pl_app.connector("node").connect(pl_node.connector("apps"))
30     
31     return pl_app
32
33 root_dir = tempfile.mkdtemp()
34 user = getpass.getuser()
35 slicename = os.environ["PL_SLICE"]
36 plchost = "www.planet-lab.eu"
37 port_base = 2000 + (os.getpid() % 1000) * 13
38 pl_ssh_key = os.environ.get(
39     "PL_SSH_KEY",
40     "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
41 pl_user = os.environ.get('PL_USER')
42 pl_pwd = os.environ.get('PL_PASS')
43
44 exp_desc = ExperimentDescription()
45
46 pl_provider = FactoriesProvider("planetlab")
47 pl_desc = exp_desc.add_testbed_description(pl_provider)
48 pl_desc.set_attribute_value("homeDirectory", root_dir)
49 pl_desc.set_attribute_value("slice", slicename)
50 pl_desc.set_attribute_value("sliceSSHKey", pl_ssh_key)
51 pl_desc.set_attribute_value("authUser", pl_user)
52 pl_desc.set_attribute_value("authPass", pl_pwd)
53 pl_desc.set_attribute_value("plcHost", plchost)
54 pl_desc.set_attribute_value("tapPortBase", port_base)
55 pl_desc.set_attribute_value("p2pDeployment", False) # it's interactive, we don't want it in tests
56 pl_desc.set_attribute_value("cleanProc", True)
57 pl_desc.set_attribute_value("plLogLevel", "DEBUG")
58        
59 pl_inet = pl_desc.create("Internet")
60
61 hostnames = ["ait21.us.es", "planetlab4.cslab.ece.ntua.gr", "kostis.di.uoa.gr", "pl1.uni-rostock.de" ]
62 apps = []
63
64 for hostname in hostnames:
65     pl_node = add_node(pl_desc, pl_inet, hostname)
66     pl_app = add_app(pl_desc, pl_node)
67     apps.append(pl_app)
68
69 xml = exp_desc.to_xml()
70
71 controller = ExperimentController(xml, root_dir)
72 controller.start()
73
74 stop = False
75
76 while not stop:
77     time.sleep(0.5)
78
79     stop = True
80     for pl_app in set(apps):
81         if not controller.is_finished(pl_app.guid):
82             stop = False
83             break
84         else:
85             apps.remove(pl_app)
86
87 controller.stop()
88 controller.shutdown()
89