blob: 80fe63df05341be5951cfb35245fdfba3df08d19 [file] [log] [blame]
Khen Nursimulua7b842a2016-12-03 23:28:42 -05001#!/usr/bin/env python
2#
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -05003# Copyright 2017 the original author or authors.
Khen Nursimulua7b842a2016-12-03 23:28:42 -05004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050017import structlog
18import sys
Khen Nursimulua7b842a2016-12-03 23:28:42 -050019from constants import Constants as C
20
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050021# URN_PREFIX = "urn:ietf:params:netconf:capability:"
22URN_PREFIX = "urn:opencord:params:xml:ns:voltha:"
23log = structlog.get_logger()
24
Khen Nursimulua7b842a2016-12-03 23:28:42 -050025class Capabilities:
26
27 def __init__(self):
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050028 self.server_caps = set()
Khen Nursimulua7b842a2016-12-03 23:28:42 -050029 self.client_caps = set()
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050030 self.voltha_schemas = set()
31 self.schema_dir = None
Khen Nursimulua7b842a2016-12-03 23:28:42 -050032
33 def add_client_capability(self, cap):
34 self.client_caps.add(cap)
35
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050036 def set_server_capabilities(self, schemas):
37 # prefix = "urn:ietf:params:netconf:capability:"
38 # first add the basic capabilities
39 self.server_caps.add(C.NETCONF_BASE_10)
40 self.server_caps.add(C.NETCONF_BASE_11)
41 self.server_caps.add(C.NETCONF_MONITORING)
42 for schema in schemas:
43 self.server_caps.add(''.join([URN_PREFIX, schema]))
44 self.voltha_schemas.add(schema)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050045
46
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050047 def set_schema_dir(self, schema_dir) :
48 self.schema_dir = schema_dir
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050049
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050050 def get_yang_schemas_definitions(self):
51 defs = []
52 for schema in self.voltha_schemas:
53 defs.append(
54 {
55 'id': schema,
56 'version': '2016-11-15', #TODO: need to extract from voltha
57 'format': 'yang',
58 'location': 'NETCONF',
59 'namespace': ''.join([URN_PREFIX, schema])
60 }
61 )
62 return defs
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050063
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050064 def is_schema_supported(self, schema):
65 return schema in self.voltha_schemas
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050066
67
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050068 def get_schema_content(self, schema):
69 if self.schema_dir not in sys.path:
70 sys.path.insert(0, self.schema_dir)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050071
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050072 try:
73 with open(''.join([self.schema_dir, '/', schema, '.yang']),
74 'r') as f:
75 content = f.read()
76 return content
77 except Exception as e:
78 log.error("error-opening-file", file=''.join([schema, '.yang']),
79 dir=self.schema_dir, exception=repr(e))
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050080