a01558c3042c98889a4bc3611b9d65a025439388
[nepi.git] / util_scripts / pl_maintenance.py
1 import nepi.testbeds.planetlab.plcapi
2 from optparse import OptionParser, SUPPRESS_HELP
3 import os
4 import subprocess
5
6 def do_maintenance(slicename, hostnames):
7     for hostname in hostnames:
8         login = "%s@%s" % (slicename, hostname)
9         command = 'sudo yum reinstall -y --nogpgcheck fedora-release'
10         proc = subprocess.Popen(['ssh', '-t', '-o', 'StrictHostKeyChecking=no', login, command], 
11             stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = False)
12         retcode = proc.wait()
13         print hostname
14         print retcode
15         if retcode > 0:
16             print proc.stdout.read()
17             print proc.stderr.read()
18
19 def run(slicename, plc_host, pl_user, pl_pwd, pl_ssh_key):
20     api = nepi.testbeds.planetlab.plcapi.plcapi(pl_user, pl_pwd, plc_host,
21         "https://%(hostname)s:443/PLCAPI/")
22     node_ids = api.GetSliceNodes(slicename)
23     hostnames = [d['hostname'] for d in api.GetNodes(node_ids, ['hostname'])]
24
25     do_maintenance(slicename, hostnames)
26
27
28 if __name__ == '__main__':
29     slicename = os.environ.get("PL_SLICE")
30     pl_host = os.environ.get("PL_HOST", "www.planet-lab.eu")
31     pl_ssh_key = os.environ.get(
32         "PL_SSH_KEY",
33         "%s/.ssh/id_rsa_planetlab" % (os.environ['HOME'],) )
34     pl_user = os.environ.get('PL_USER')
35     pl_pwd = os.environ.get('PL_PASS')
36
37     usage = "usage: %prog -s <pl_slice> -H <pl_host> -k <ssh_key> -u <pl_user> -p <pl_password>"
38
39     parser = OptionParser(usage=usage)
40     parser.add_option("-s", "--slicename", dest="slicename", 
41             help="PlanetLab slicename", default=slicename, type="str")
42     parser.add_option("-H", "--pl-host", dest="pl_host", 
43             help="PlanetLab site (e.g. www.planet-lab.eu)", 
44             default=pl_host, type="str")
45     parser.add_option("-k", "--ssh-key", dest="pl_ssh_key", 
46             help="Path to private ssh key used for PlanetLab authentication", 
47             default=pl_ssh_key, type="str")
48     parser.add_option("-u", "--pl-user", dest="pl_user", 
49             help="PlanetLab account user (i.e. Registration email address)", 
50             default=pl_user, type="str")
51     parser.add_option("-p", "--pl-pwd", dest="pl_pwd", 
52             help="PlanetLab account password", default=pl_pwd, type="str")
53     (options, args) = parser.parse_args()
54
55     slicename = options.slicename
56     pl_host = options.pl_host
57     pl_user= options.pl_user
58     pl_pwd = options.pl_pwd
59     pl_ssh_key = options.pl_ssh_key
60
61     run(slicename, pl_host, pl_user, pl_pwd, pl_ssh_key)
62