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 fed4fire (be careful!)
\r
10 This (very simple) service is coupled to the way fed4fire 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 import dateutil.parser
\r
26 class ServiceContext(object):
\r
27 def __init__(self, restfactory=None, templatefactory=None):
\r
29 :type restfactory: restclient.Factory
\r
31 self.restfactory = restfactory
\r
32 self.templatefactory = templatefactory
\r
35 def createprovider(json_data, context):
\r
36 """Creates a provider in the SlaManager.
\r
38 :type context: ServiceContext
\r
40 An example input is:
\r
42 "uuid": "f4c993580-03fe-41eb-8a21-a56709f9370f",
\r
46 json_obj = json.loads(json_data)
\r
47 p = wsag_model.Provider.from_dict(json_obj)
\r
48 provider_client = context.restfactory.providers()
\r
49 provider_client.create(p)
\r
52 def createtemplate(json_data, context):
\r
53 """Creates a template in the SlaManager
\r
55 An example input is:
\r
57 "template_id" : "template-id",
\r
58 "template_name" : "template-name",
\r
59 "provider" : "provider-1",
\r
60 "service_id" : "service-id",
\r
61 "expiration_time" : "2014-03-28T13:55:00Z",
\r
62 "service_properties" : [
\r
65 "servicename" : "service-a",
\r
66 "metric" : "xs:double",
\r
67 "location" : "//service-a/uptime"
\r
73 :type context: ServiceContext
\r
75 data = jsonparser.templateinput_from_json(json_data)
\r
76 slatemplate = sla.slaclient.templates.fed4fire.render_slatemplate(data)
\r
77 client = context.restfactory.templates()
\r
78 client.create(slatemplate)
\r
81 def createagreement(json_data, context):
\r
82 """Creates an agreement in the SlaManager.
\r
84 The template with template_id is retrieved and the properties and some
\r
85 context info is copied to the agreement.
\r
87 An example input is:
\r
89 "template_id" : "template-id",
\r
90 "agreement_id" : "agreement-id",
\r
91 "expiration_time" : "2014-03-28T13:55:00Z",
\r
92 "consumer" : "consumer-a",
\r
96 "bounds" : [ "0", "1" ]
\r
100 :type json_data:str
\r
101 :type context: ServiceContext
\r
103 client_templates = context.restfactory.templates()
\r
105 # Builds AgreementInput from json
\r
106 data = jsonparser.agreementinput_from_json(json_data)
\r
108 # Read template from manager
\r
109 # client_templates.getbyid(provider_id, testbed)
\r
110 slatemplate, request = client_templates.getbyid(data.template_id)
\r
111 # Copy (overriding if necessary) from template to AgreementInput
\r
112 final_data = data.from_template(slatemplate)
\r
114 slaagreement = fed4fire.render_slaagreement(final_data)
\r
116 client_agreements = context.restfactory.agreements()
\r
117 return client_agreements.create(slaagreement, data.template_id)
\r
120 def createagreementsimplified(template_id, user, expiration_time, resources):
\r
121 context = ServiceContext(
\r
122 restclient.Factory(),
\r
127 "agreement_id": str(uuid.uuid4()),
\r
128 "template_id": template_id,
\r
129 "expiration_time": expiration_time.strftime('%Y-%m-%dT%H:%M:%S%Z'),
\r
134 "bounds": ["0", "1"],
\r
136 "service_name": "",
\r
137 "scope": resources[template_id]
\r
143 json_data = json.dumps(agreement)
\r
145 return createagreement(json_data, context)
\r