X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfi.py;h=0b447263721f06a659517a8a209368b093c330f0;hb=1e95f8a388325499564df5f8eb6eb1fd10ca2d42;hp=6fd0a70c055bb7ea0f9c0970ddeaee8c7e9e7f6a;hpb=5bb8f044e0085d73ec79abb1822421db3fc50101;p=sfa.git diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 6fd0a70c..0b447263 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -6,27 +6,23 @@ import sys sys.path.append('.') import os, os.path import tempfile -import traceback import socket -import random import datetime -import zlib import codecs import pickle from lxml import etree from StringIO import StringIO -from types import StringTypes, ListType from optparse import OptionParser -from sfa.client.client_helper import pg_users_arg, sfa_users_arg, sfa_to_pg_users_arg +from sfa.client.client_helper import pg_users_arg, sfa_users_arg from sfa.util.sfalogging import sfi_logger from sfa.trust.certificate import Keypair, Certificate from sfa.trust.gid import GID from sfa.trust.credential import Credential -from sfa.util.sfaticket import SfaTicket +from sfa.trust.sfaticket import SfaTicket from sfa.util.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, AuthorityRecord from sfa.rspecs.rspec import RSpec from sfa.rspecs.rspec_converter import RSpecConverter -from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn +from sfa.util.xrn import get_leaf, get_authority, hrn_to_urn import sfa.util.xmlrpcprotocol as xmlrpcprotocol from sfa.util.config import Config from sfa.util.version import version_core @@ -116,7 +112,7 @@ def save_records_to_file(filename, recordList, format="xml"): for record in recordList: record = SfaRecord(dict=record) f.write('\n') - f.write("\n"); + f.write("\n") f.close() elif format == "hrnlist": f = open(filename, "w") @@ -270,7 +266,7 @@ class Sfi: help="output file format ([xml]|xmllist|hrnlist)", default="xml", choices=("xml", "xmllist", "hrnlist")) - if command in ("status"): + if command in ("status", "version"): parser.add_option("-o", "--output", dest="file", help="output dictionary to file", metavar="FILE", default=None) parser.add_option("-F", "--fileformat", dest="fileformat", type="choice", @@ -537,7 +533,6 @@ class Sfi: hrn = self.user gidfile = os.path.join(self.options.sfi_dir, hrn + ".gid") - print gidfile gid = self.get_cached_gid(gidfile) if not gid: user_cred = self.get_user_cred() @@ -920,6 +915,8 @@ class Sfi: version=server.GetVersion() for (k,v) in version.iteritems(): print "%-20s: %s"%(k,v) + if opts.file: + save_variable_to_file(version, opts.file, opts.fileformat) # list instantiated slices def slices(self, opts, args): @@ -979,26 +976,26 @@ class Sfi: else: save_rspec_to_file(result, opts.file) return - + # created named slice with given rspec def create(self, opts, args): server = self.get_server_from_opts(opts) server_version = self.get_cached_server_version(server) slice_hrn = args[0] - slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_urn = hrn_to_urn(slice_hrn, 'slice') user_cred = self.get_user_cred() slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) - creds = [slice_cred] - if opts.delegate: - delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) - creds.append(delegated_cred) + # delegate the cred to the callers root authority + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)+'.slicemanager') + #delegated_cred = self.delegate_cred(slice_cred, get_authority(slice_hrn)) + #creds.append(delegated_cred) rspec_file = self.get_rspec_file(args[1]) rspec = open(rspec_file).read() - # need to pass along user keys to the aggregate. + # need to pass along user keys to the aggregate. # users = [ # { urn: urn:publicid:IDN+emulab.net+user+alice - # keys: [, ] + # keys: [, ] # }] users = [] slice_records = self.registry.Resolve(slice_urn, [user_cred.save_to_string(save_parents=True)]) @@ -1007,18 +1004,20 @@ class Sfi: user_hrns = slice_record['researcher'] user_urns = [hrn_to_urn(hrn, 'user') for hrn in user_hrns] user_records = self.registry.Resolve(user_urns, [user_cred.save_to_string(save_parents=True)]) - + if 'sfa' not in server_version: users = pg_users_arg(user_records) rspec = RSpec(rspec) rspec.filter({'component_manager_id': server_version['urn']}) rspec = RSpecConverter.to_pg_rspec(rspec.toxml(), content_type='request') + creds = [slice_cred] else: users = sfa_users_arg(user_records, slice_record) + creds = [slice_cred, delegated_cred] call_args = [slice_urn, creds, rspec, users] if self.server_supports_call_id_arg(server): call_args.append(unique_call_id()) - + result = server.CreateSliver(*call_args) if opts.file is None: print result