4 from sfa.util.faults import *
5 from sfa.util.method import Method
6 from sfa.util.parameter import Parameter, Mixed
7 from sfa.trust.auth import Auth
8 from sfa.util.record import GeniRecord
9 from sfa.util.genitable import GeniTable
10 from sfa.util.debug import log
11 from sfa.trust.credential import Credential
12 from sfa.server.registry import Registries
16 Remove an object from the registry. If the object represents a PLC object,
17 then the PLC records will also be removed.
19 @param cred credential string
20 @param type record type
21 @param hrn human readable name of record to remove
23 @return 1 if successful, faults otherwise
26 interfaces = ['registry']
29 Parameter(str, "Credential string"),
30 Parameter(str, "Record type"),
31 Parameter(str, "Human readable name of slice to instantiate"),
32 Mixed(Parameter(str, "Human readable name of the original caller"),
33 Parameter(None, "Origin hrn not specified"))
36 returns = Parameter(int, "1 if successful")
38 def call(self, cred, type, hrn, origin_hrn=None):
39 user_cred = Credential(string=cred)
43 origin_hrn = user_cred.get_gid_caller().get_hrn()
44 self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name))
47 self.api.auth.check(cred, "remove")
48 self.api.auth.verify_object_permission(hrn)
52 if type not in ['all', '*']:
54 records = table.find(filter)
56 raise RecordNotFound(hrn)
60 credential = self.api.getCredential()
61 registries = Registries(self.api)
63 # Try to remove the object from the PLCDB of federated agg.
64 # This is attempted before removing the object from the local agg's PLCDB and sfa table
65 if hrn.startswith(self.api.hrn) and type in ['user', 'slice', 'authority']:
66 for registry in registries:
67 if registry not in [self.api.hrn]:
68 result=registries[registry].remove_peer_object(credential, record, origin_hrn)
71 persons = self.api.plshell.GetPersons(self.api.plauth, record['pointer'])
72 # only delete this person if he has site ids. if he doesnt, it probably means
73 # he was just removed from a site, not actually deleted
74 if persons and persons[0]['site_ids']:
75 self.api.plshell.DeletePerson(self.api.plauth, record['pointer'])
77 if self.api.plshell.GetSlices(self.api.plauth, record['pointer']):
78 self.api.plshell.DeleteSlice(self.api.plauth, record['pointer'])
80 if self.api.plshell.GetNodes(self.api.plauth, record['pointer']):
81 self.api.plshell.DeleteNode(self.api.plauth, record['pointer'])
82 elif type == "authority":
83 if self.api.plshell.GetSites(self.api.plauth, record['pointer']):
84 self.api.plshell.DeleteSite(self.api.plauth, record['pointer'])
86 raise UnknownGeniType(type)