1 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
2 # Copyright (C) 2010 INRIA
4 # wrapper to xmlrpc server, that support dry-run commands
5 # we dont want to have to depend on PLCAPI, so:
9 # the default value is for the dry run mode
10 server_methods = [ ('GetNodes', []),
12 ('SetNodePlainBootstrapfs', True),
13 ('SetNodeFcdistro', True),
14 ('SetNodePldistro', True),
15 ('DeleteNode' , True),
16 ('UpdateNode' , True),
17 ('AddInterface' , True),
18 ('AddIpAddress' , True),
20 ('GetInterfaces' , True),
22 ('AddTagType' , True),
23 ('AddInterfaceTag' , True),
24 ('GetBootMedium' , "some non-empty-string"),
25 ('GetNodeGroups' , True),
26 ('AddNodeGroup' , True),
27 ('DeleteNodeGroup', True),
28 ('GetNodeTags', True),
30 ('AddInitScript' , True),
31 ('DeleteInitScript', True),
32 ('GetInitScripts', True),
34 ('AddSiteAddress' , True),
35 ('DeleteSite' , True),
36 ('DeleteSlice' , True),
38 ('AddPersonToSlice' , True),
39 ('AddSliceToNodes' , True),
40 ('DeleteSliceFromNodes' , True),
41 ('AddSliceTag' , True),
43 ('UpdatePerson' , True),
44 ('AddRoleToPerson' , True),
45 ('AddPersonToSite' , True),
46 ('DeletePerson' , True),
47 ('AddPersonKey' , True),
48 ('GetPlcRelease', {'build': {'target-arch':'i386'}}),
50 ('GetSlices', [{'name':'dry_run_slice','node_ids':['dry_run']}]),
51 ('GetLeaseGranularity', 180),
54 ('DeleteLeases',True),
56 ('AddConfFile','True'),
58 ('GetNodeFlavour','dry-run-nodeflavour'),
59 ('system.listMethods',[]),
64 def __init__(self, server, dry_run, method, defaults):
66 self.dry_run = dry_run
68 self.defaults = defaults
69 def __call__ (self, *args):
71 print("dry_run:",self.method, end=' ')
72 if len(args) > 0 and type(args[0]) == type({}) and 'AuthMethod' in args[0]:
73 print('<auth>', end=' ')
78 actual_method = getattr(self.server, self.method)
79 return actual_method(*args)
81 def __init__(self, url, dry_run=False):
82 self.apiserver = xmlrpc.client.ServerProxy(url, allow_none=True,
83 use_builtin_types=True,
84 context=ssl._create_unverified_context())
85 self.dry_run = dry_run
86 for method, defaults in server_methods:
87 setattr(self, method, TestApiserver.Callable(self.apiserver, dry_run, method, defaults))
89 def set_dry_run (self, dry_run):
90 self.dry_run = dry_run
91 for (method, defaults) in server_methods:
92 getattr(self, method).dry_run = dry_run
94 def has_method (self, methodname):
95 return methodname in self.apiserver.system.listMethods()