import repository from arizona
[raven.git] / tools / startstop / startstop.py
1 #!/usr/bin/python
2 # Written by Scott Baker
3
4 import os, sys, time, shutil
5 import plcapilib
6
7 # Parse additional options
8 shortopts = "s:c"
9 longopts = ["slicename=", "removeinitscript=", "addinitscript=", "comon", "installstork", "stopstork","startstork","browse"]
10 moreusage = """
11 usage: %s [OPTION]...
12
13 Shell options:
14         -s (--slicename) slicename      Slice name to reset
15            --removeinitscript id        Remove initscript from plc_initscript_id
16            --addinitscript id           Add initscript to plc_initscript_id
17            --installstork               Install stork initscript
18            --startstork                 An alias for installstork
19            --stopstork                  Stop stork (install stopscript)
20            --browse                     List the initscripts for a slice
21         -c --comon                      Download updated comon stats
22 """ % sys.argv[0]
23
24 STORK_INITSCRIPT_ID = "2"
25 STORK_STOPSCRIPT_ID = "6"
26
27
28 def get_slice_info(name):
29    slice_data = {}
30    slice_data['name'] = name
31    return GetSlices(slice_data)
32
33 def get_slice_id(name):
34    # JAC: Added this check / exit for slice name errors since the IndexError
35    # exception doesn't seem to be caught anywhere
36    try:
37       slice_info = get_slice_info(name)[0]
38    except IndexError:
39       print "Error, cannot locate slice '"+name+"'"
40       sys.exit(1)
41    return slice_info['slice_id']
42
43 def get_attributes(slice_id, attribute_name):
44    filter = {}
45    filter['slice_id'] = slice_id
46    filter['name'] = attribute_name
47    return GetSliceAttributes(filter)
48
49
50 def get_initscript_values(slice_name):
51    """
52       This function takes a slice name and returns a list containing the
53       plc_initscript_id values
54    """
55    slice_id = get_slice_id(slice_name)
56
57    attributes = get_attributes(slice_id, "plc_initscript_id")
58
59    values = []
60    for attribute in attributes:
61       values.append(attribute['value'])
62
63    return values
64  
65
66
67 def do_initscript_addremove(slice_name, add_id=-1, remove_id=-1):
68    
69    slice_id = get_slice_id(slice_name)
70
71    attributes = get_attributes(slice_id, "plc_initscript_id")
72
73    already_added = False
74    for attribute in attributes:
75       if attribute['value'] == remove_id:
76          print "Deleting attribute plc_initscript_id=" + str(remove_id)
77          DeleteSliceAttribute(attribute['slice_attribute_id'])
78       elif attribute['value'] == add_id:
79          print "Already have attribute plc_initscript_id=" + str(add_id)
80          already_added = True
81
82    if (add_id >= 0) and (not already_added):
83       print "Adding plc_initscript_id=" + str(add_id)
84
85       # AddSliceAttribute appears to be looking for these global variables
86       global string0, string1, int2
87       string0 = slice_name
88       string1 = "plc_initscript_id"
89       int2 = int(add_id)
90
91       AddSliceAttribute(slice_id, "plc_initscript_id", add_id)
92
93 def main():
94
95    remove_id = -1
96    add_id = -1
97    browse = False
98
99    (plcapi, moreopts, argv) = plcapilib.plcapi(globals(), sys.argv, shortopts, longopts, moreusage)
100    for opt, optval in moreopts.iteritems():
101       if opt == "-s" or opt == "--slicename":
102          slicename = optval
103       if opt == '--removeinitscript':
104          remove_id = optval
105       if opt == '--addinitscript':
106          add_id = optval
107       if opt == '--installstork' or opt == '--startstork':
108          remove_id = STORK_STOPSCRIPT_ID
109          add_id = STORK_INITSCRIPT_ID
110       if opt == '--stopstork':
111          remove_id = STORK_INITSCRIPT_ID
112          add_id = STORK_STOPSCRIPT_ID
113       if opt == '--browse':
114          browse = True
115
116    if not slicename:
117       print "must use --slicename"
118       sys.exit(1)
119
120    if browse:
121       print "Initscripts for "+slicename+" = "+str(get_initscript_values(slicename))
122    else:
123       do_initscript_addremove(slicename, add_id, remove_id)
124
125 if __name__ == "__main__":
126    main()