+ peer = slices.get_peer(hrn)
+ sfa_peer = slices.get_sfa_peer(hrn)
+ registries = Registries(api)
+ registry = registries[api.hrn]
+ credential = api.getCredential()
+ site_id, remote_site_id = slices.verify_site(registry, credential, hrn,
+ peer, sfa_peer)
+ slice = slices.verify_slice(registry, credential, hrn, site_id,
+ remote_site_id, peer, sfa_peer)
+
+ network = Network(api)
+
+ slice = network.get_slice(api, hrn)
+ current = __get_hostnames(slice.get_nodes())
+
+ network.addRSpec(xml, "/var/www/html/schemas/pl.rng")
+ request = __get_hostnames(network.nodesWithSlivers())
+
+ # remove nodes not in rspec
+ deleted_nodes = list(set(current).difference(request))
+
+ # add nodes from rspec
+ added_nodes = list(set(request).difference(current))
+
+ if peer:
+ api.plshell.UnBindObjectFromPeer(api.plauth, 'slice', slice.id, peer)
+
+ api.plshell.AddSliceToNodes(api.plauth, slice.name, added_nodes)
+ api.plshell.DeleteSliceFromNodes(api.plauth, slice.name, deleted_nodes)
+
+ network.updateSliceTags()
+
+ if peer:
+ api.plshell.BindObjectToPeer(api.plauth, 'slice', slice.id, peer,
+ slice.peer_id)
+
+ print network.toxml()
+
+ return True
+