blob: c8a01efb74d2698b4023e981a356f2fa7739ff2d [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2016-2017 RIFT.IO Inc
#
# 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.
#
import argparse
import logging
import rift.auto.proxy
import rift.vcs
import sys
import gi
gi.require_version('RwYang', '1.0')
# TODO (Philip): Relook at this code
from gi.repository import (
NsdYang,
VldYang,
VnfdYang,
RwYang
)
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
model = RwYang.Model.create_libyang()
model.load_schema_ypbc(VldYang.get_schema())
model.load_schema_ypbc(NsdYang.get_schema())
model.load_schema_ypbc(VnfdYang.get_schema())
def configure_vld(proxy, vld_xml_hdl):
vld_xml = vld_xml_hdl.read()
logger.debug("Attempting to deserialize XML into VLD protobuf: %s", vld_xml)
vld = VldYang.YangData_RwProject_Project_VldCatalog_Vld()
vld.from_xml_v2(model, vld_xml)
logger.debug("Sending VLD to netconf: %s", vld)
proxy.merge_config(vld.to_xml_v2(model))
def configure_vnfd(proxy, vnfd_xml_hdl):
vnfd_xml = vnfd_xml_hdl.read()
logger.debug("Attempting to deserialize XML into VNFD protobuf: %s", vnfd_xml)
vnfd = VnfdYang.YangData_VnfdCatalog_Vnfd()
vnfd.from_xml_v2(model, vnfd_xml)
logger.debug("Sending VNFD to netconf: %s", vnfd)
proxy.merge_config(vnfd.to_xml_v2(model))
def configure_nsd(proxy, nsd_xml_hdl):
nsd_xml = nsd_xml_hdl.read()
logger.debug("Attempting to deserialize XML into NSD protobuf: %s", nsd_xml)
nsd = NsdYang.YangData_NsdCatalog_Nsd()
nsd.from_xml_v2(model, nsd_xml)
logger.debug("Sending NSD to netconf: %s", nsd)
proxy.merge_config(nsd.to_xml_v2(model))
def parse_args(argv=sys.argv[1:]):
"""Create a parser which includes all generic demo arguments and parse args
Arguments:
argv - arguments to be parsed
Returns: List of parsed arguments
"""
parser = argparse.ArgumentParser()
parser.add_argument(
'--confd-host',
default="127.0.0.1",
help="Hostname or IP where the confd netconf server is running.")
parser.add_argument(
'--vld-xml-file',
action="append",
default=[],
type=argparse.FileType(),
#help="VLD XML File Path",
# We do not support uploading VLD separately
help=argparse.SUPRESS,
)
parser.add_argument(
'--vnfd-xml-file',
action="append",
default=[],
type=argparse.FileType(),
help="VNFD XML File Path",
)
parser.add_argument(
'--nsd-xml-file',
action="append",
default=[],
type=argparse.FileType(),
help="VNFD XML File Path",
)
parser.add_argument(
'-v', '--verbose',
action='store_true',
help="Logging is normally set to an INFO level. When this flag "
"is used logging is set to DEBUG. ")
args = parser.parse_args(argv)
return args
def connect(args):
# Initialize Netconf Management Proxy
mgmt_proxy = rift.auto.proxy.NetconfProxy(args.confd_host)
mgmt_proxy.connect()
# Ensure system started
vcs_component_info = rift.vcs.mgmt.VcsComponentInfo(mgmt_proxy)
vcs_component_info.wait_until_system_started()
return mgmt_proxy
def main():
args = parse_args()
proxy = connect(args)
for xml_file in args.vnfd_xml_file:
configure_vnfd(proxy, xml_file)
for xml_file in args.vld_xml_file:
configure_vld(proxy, xml_file)
for xml_file in args.nsd_xml_file:
configure_nsd(proxy, xml_file)
if __name__ == "__main__":
main()