1 # -*- coding: utf-8 -*-
\r
2 """Builds templates/agreements based on input data (in json format), submitting
\r
5 It is intended as backend service for a rest interface.
\r
7 The json input must work together with the templates to form a valid template
\r
8 or agreement for Xifi (be careful!)
\r
10 This (very simple) service is coupled to the way xifi is interpreting
\r
17 from sla.slaclient import wsag_model
\r
18 from sla.slaclient import restclient
\r
19 from sla.slaclient.templates.fed4fire.django.factory import Factory as TemplateFactory
\r
20 import sla.slaclient.templates.fed4fire as fed4fire
\r
21 from time import localtime, strftime
\r
23 class ServiceContext(object):
\r
24 def __init__(self, restfactory = None, templatefactory=None):
\r
26 :type restfactory: restclient.Factory
\r
28 self.restfactory = restfactory
\r
29 self.templatefactory = templatefactory
\r
32 def createprovider(json_data, context):
\r
33 """Creates a provider in the SlaManager.
\r
35 :type context: ServiceContext
\r
37 An example input is:
\r
39 "uuid": "f4c993580-03fe-41eb-8a21-a56709f9370f",
\r
43 json_obj = json.loads(json_data)
\r
44 p = wsag_model.Provider.from_dict(json_obj)
\r
45 provider_client = context.restfactory.providers()
\r
46 provider_client.create(p)
\r
49 def createtemplate(json_data, context):
\r
50 """Creates a template in the SlaManager
\r
52 An example input is:
\r
54 "template_id" : "template-id",
\r
55 "template_name" : "template-name",
\r
56 "provider" : "provider-1",
\r
57 "service_id" : "service-id",
\r
58 "expiration_time" : "2014-03-28T13:55:00Z",
\r
59 "service_properties" : [
\r
62 "servicename" : "service-a",
\r
63 "metric" : "xs:double",
\r
64 "location" : "//service-a/uptime"
\r
70 :type context: ServiceContext
\r
72 data = jsonparser.templateinput_from_json(json_data)
\r
73 slatemplate = sla.slaclient.templates.fed4fire.render_slatemplate(data)
\r
74 client = context.restfactory.templates()
\r
75 client.create(slatemplate)
\r
78 def createagreement(json_data, context):
\r
79 """Creates an agreement in the SlaManager.
\r
81 The template with template_id is retrieved and the properties and some
\r
82 context info is copied to the agreement.
\r
84 An example input is:
\r
86 "template_id" : "template-id",
\r
87 "agreement_id" : "agreement-id",
\r
88 "expiration_time" : "2014-03-28T13:55:00Z",
\r
89 "consumer" : "consumer-a",
\r
93 "bounds" : [ "0", "1" ]
\r
98 :type context: ServiceContext
\r
100 client_templates = context.restfactory.templates()
\r
102 # Builds AgreementInput from json
\r
103 data = jsonparser.agreementinput_from_json(json_data)
\r
104 # Read template from manager
\r
105 slatemplate, request = client_templates.getbyid(data.template_id)
\r
106 # Copy (overriding if necessary) from template to AgreementInput
\r
107 final_data = data.from_template(slatemplate)
\r
108 slaagreement = fed4fire.render_slaagreement(final_data)
\r
110 client_agreements = context.restfactory.agreements()
\r
111 return client_agreements.create(slaagreement)
\r
114 def createagreementsimplified(template_id, user, expiration_time):
\r
115 context = ServiceContext(
\r
116 restclient.Factory(),
\r
121 "agreement_id": str(uuid.uuid4()),
\r
122 "template_id": template_id,
\r
123 "expiration_time": expiration_time,
\r
127 json_data = json.dumps(agreement)
\r
129 return createagreement(json_data, context)
\r
132 createagreementsimplified("iMindsServiceWiLab2", "virtualwall", "2014-04-34T23:12:12")
\r
135 if __name__ == "__main__":
\r