X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Faggregate_manager_eucalyptus.py;h=3f04ce941aeb0221590d4411451a19c218d5f412;hb=2b3c0c7ebe7c55afb14e3ea3aed10f8b1abe01e7;hp=42116e12bd11e67a04ebeeafded9f48115aa7ca7;hpb=c12f58475ea512f04ae3a907ed3ac3be7cc5d935;p=sfa.git diff --git a/sfa/managers/aggregate_manager_eucalyptus.py b/sfa/managers/aggregate_manager_eucalyptus.py index 42116e12..3f04ce94 100644 --- a/sfa/managers/aggregate_manager_eucalyptus.py +++ b/sfa/managers/aggregate_manager_eucalyptus.py @@ -1,9 +1,11 @@ from __future__ import with_statement import sys -import os +import os, errno import logging import datetime +from multiprocessing import Process +from time import sleep import boto from boto.ec2.regioninfo import RegionInfo @@ -15,20 +17,19 @@ from sqlobject import * from sfa.util.faults import * from sfa.util.xrn import urn_to_hrn, Xrn -from sfa.util.rspec import RSpec -from sfa.server.registry import Registries -from sfa.trust.credential import Credential -from sfa.plc.api import SfaAPI -from sfa.plc.aggregate import Aggregate -from sfa.plc.slices import * from sfa.util.plxrn import hrn_to_pl_slicename, slicename_to_hrn from sfa.util.callids import Callids from sfa.util.sfalogging import logger -from sfa.rspecs.sfa_rspec import sfa_rspec_version from sfa.util.version import version_core -from multiprocessing import Process -from time import sleep +from sfa.trust.credential import Credential + +from sfa.server.sfaapi import SfaApi + +from sfa.plc.aggregate import Aggregate +from sfa.plc.slices import * +from sfa.rspecs.sfa_rspec import sfa_rspec_version + ## # The data structure used to represent a cloud. @@ -42,8 +43,6 @@ cloud = {} # EUCALYPTUS_RSPEC_SCHEMA='/etc/sfa/eucalyptus.rng' -api = SfaAPI() - ## # Meta data of an instance. # @@ -546,7 +545,7 @@ def CreateSliver(api, slice_xrn, creds, xml, users, call_id): rspecValidator = ET.RelaxNG(schemaXML) rspecXML = ET.XML(xml) for network in rspecXML.iterfind("./network"): - if network.get('id') != cloud['name']: + if network.get('name') != cloud['name']: # Throw away everything except my own RSpec # sfa_logger().error("CreateSliver: deleting %s from rspec"%network.get('id')) network.getparent().remove(network) @@ -630,6 +629,34 @@ def CreateSliver(api, slice_xrn, creds, xml, users, call_id): # with enough data for the client to understand what's happened return xml +## +# Return information on the IP addresses bound to each slice's instances +# +def dumpInstanceInfo(): + logger = logging.getLogger('EucaMeta') + outdir = "/var/www/html/euca/" + outfile = outdir + "instances.txt" + + try: + os.makedirs(outdir) + except OSError, e: + if e.errno != errno.EEXIST: + raise + + dbResults = Meta.select( + AND(Meta.q.pri_addr != None, + Meta.q.state == 'running') + ) + dbResults = list(dbResults) + f = open(outfile, "w") + for r in dbResults: + instId = r.instance.instance_id + ipaddr = r.pri_addr + hrn = r.instance.slice.slice_hrn + logger.debug('[dumpInstanceInfo] %s %s %s' % (instId, ipaddr, hrn)) + f.write("%s %s %s\n" % (instId, ipaddr, hrn)) + f.close() + ## # A separate process that will update the meta data. # @@ -653,6 +680,8 @@ def updateMeta(): logger.debug('[update process] dbResults: %s' % dbResults) instids = [] for r in dbResults: + if not r.instance: + continue instids.append(r.instance.instance_id) logger.debug('[update process] Instance Id: %s' % ', '.join(instids)) @@ -678,6 +707,8 @@ def updateMeta(): dbInst.meta.pub_addr = ipData['pub_addr'] dbInst.meta.state = 'running' + dumpInstanceInfo() + def GetVersion(api): xrn=Xrn(api.hrn) request_rspec_versions = [dict(sfa_rspec_version)] @@ -691,22 +722,22 @@ def GetVersion(api): } return version_core(version_more) -def main(): - init_server() - - #theRSpec = None - #with open(sys.argv[1]) as xml: - # theRSpec = xml.read() - #CreateSliver(None, 'planetcloud.pc.test', theRSpec, 'call-id-cloudtest') - - #rspec = ListResources('euca', 'planetcloud.pc.test', 'planetcloud.pc.marcoy', 'test_euca') - #print rspec - - server_key_file = '/var/lib/sfa/authorities/server.key' - server_cert_file = '/var/lib/sfa/authorities/server.cert' - api = SfaAPI(key_file = server_key_file, cert_file = server_cert_file, interface='aggregate') - print getKeysForSlice(api, 'gc.gc.test1') - -if __name__ == "__main__": - main() +#def main(): +# init_server() +# +# #theRSpec = None +# #with open(sys.argv[1]) as xml: +# # theRSpec = xml.read() +# #CreateSliver(None, 'planetcloud.pc.test', theRSpec, 'call-id-cloudtest') +# +# #rspec = ListResources('euca', 'planetcloud.pc.test', 'planetcloud.pc.marcoy', 'test_euca') +# #print rspec +# +# server_key_file = '/var/lib/sfa/authorities/server.key' +# server_cert_file = '/var/lib/sfa/authorities/server.cert' +# api = PlcSfaApi(key_file = server_key_file, cert_file = server_cert_file, interface='aggregate') +# print getKeysForSlice(api, 'gc.gc.test1') +# +#if __name__ == "__main__": +# main()