blob: 32bbea480c531ec1772f25a393b414325dd29407 [file] [log] [blame]
#
# Copyright 2017 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from twisted.internet.defer import inlineCallbacks, returnValue
from common.utils.consulhelpers import get_endpoint_from_consul
from structlog import get_logger
from netconf.nc_server import NCServer
log = get_logger()
class ConnectionManager(object):
def __init__(self,
consul_endpoint,
voltha_endpoint,
netconf_port,
server_private_key_file,
server_public_key_file,
client_public_keys_file,
client_passwords_file,
voltha_retry_interval=0.5,
devices_refresh_interval=5):
log.info('init-connection-manager')
self.netconf_port = netconf_port
self.server_private_key_file = server_private_key_file
self.server_public_key_file = server_public_key_file
self.client_public_keys_file = client_public_keys_file
self.client_passwords_file = client_passwords_file
self.consul_endpoint = consul_endpoint
self.voltha_endpoint = voltha_endpoint
self.channel = None
self.grpc_client = None # single, shared gRPC client to Voltha
self.nc_server = None
self.voltha_retry_interval = voltha_retry_interval
self.devices_refresh_interval = devices_refresh_interval
self.running = False
@inlineCallbacks
def start(self):
if self.running:
return
log.debug('starting')
self.running = True
# # Get voltha grpc endpoint
# self.channel = self.get_grpc_channel_with_voltha()
#
# # Create shared gRPC API object
# self.grpc_client = GrpcClient(self, self.channel).start()
# Start the netconf server
self.nc_server = yield self.start_netconf_server().start()
log.info('started')
returnValue(self)
def stop(self):
log.debug('stopping')
self.running = False
# clean the netconf server
self.nc_server.stop()
log.info('stopped')
def resolve_endpoint(self, endpoint):
ip_port_endpoint = endpoint
if endpoint.startswith('@'):
try:
ip_port_endpoint = get_endpoint_from_consul(
self.consul_endpoint, endpoint[1:])
log.debug('found-service-from-consul', endpoint=endpoint,
ip_port=ip_port_endpoint)
except Exception as e:
log.error('not-found-service-from-consul',
endpoint=endpoint, exception=repr(e))
return
if ip_port_endpoint:
host, port = ip_port_endpoint.split(':', 2)
return host, int(port)
def start_netconf_server(self):
return NCServer(self.netconf_port,
self.server_private_key_file,
self.server_public_key_file,
self.client_public_keys_file,
self.client_passwords_file,
self.grpc_client)