Support all API YAML Models by default
Service API Models are defined in gluon/models directory, where each sub-directory is a model of NFV networking service. An exemplary structure looks like: gluon/models/net-l3vpn/api.yaml A more generic example looks like: gluon/models/<service>/<name>.yaml Currently, in gluon/cmd/config.py, service model is net-l3vpn only by default. When a new service model is added, we need to add the new service model in "service_list" of proton.conf, and restart the service by something like: proton-server --config-file proton.conf If some user forgets to add it to proton.conf, even if new service model is defined appropriately, Proton Server only loads net-l3vpn by default. This patch changes the default model to be all models under gluon/models directory. This means that if a user adds a service model definition, he does not have to change proton.conf. By simply restarting proton-server, all models will be loaded by default. The user needs to change proton.conf ONLY IF he has specific needs of supporting specific service(s). So this patch improves usability of adding / removing new service models on-demand. The original work is credited to Thomas Hambleton. Change-Id: If2e5b7225105ca0dbbda4bb85090ce3c86e0e7f8 Signed-off-by: Bin Hu <bh526r@att.com>
This commit is contained in:
parent
b7b7bc331a
commit
4630cc62d1
@ -44,10 +44,7 @@ class ProtonController(rest.RestController):
|
||||
"""Version 1 API controller root."""
|
||||
|
||||
def __init__(self):
|
||||
services = str(cfg.CONF.api.service_list).split(',')
|
||||
service_list = list()
|
||||
for api_name in services:
|
||||
service_list.append(api_name.strip())
|
||||
service_list = particle_generator.get_service_list()
|
||||
particle_generator.build_api(self, service_list)
|
||||
|
||||
@wsme_pecan.wsexpose(ProtonRoot)
|
||||
|
@ -44,10 +44,7 @@ def main():
|
||||
service.prepare_service(sys.argv)
|
||||
cfg.CONF.log_opt_values(LOG, logging.DEBUG)
|
||||
# Set source of model files
|
||||
services = str(cfg.CONF.api.service_list).split(',')
|
||||
service_list = list()
|
||||
for api_name in services:
|
||||
service_list.append(api_name.strip())
|
||||
service_list = particle_generator.get_service_list()
|
||||
LOG.info("Service List: %s" % service_list)
|
||||
LOG.info("Generating DB Classes")
|
||||
particle_generator.build_sql_models(service_list)
|
||||
|
@ -17,7 +17,7 @@ import sys
|
||||
|
||||
import click
|
||||
|
||||
from gluon.particleGenerator.cli import get_model_list
|
||||
from gluon.particleGenerator.generator import get_model_list
|
||||
from gluon.particleGenerator.generator import load_model
|
||||
from gluon.particleGenerator.generator import verify_model
|
||||
|
||||
@ -35,7 +35,7 @@ def cli():
|
||||
|
||||
@click.command()
|
||||
def list():
|
||||
model_list = get_model_list(package_name="gluon", model_dir="models")
|
||||
model_list = get_model_list()
|
||||
for api in model_list:
|
||||
click.echo(api)
|
||||
|
||||
@ -43,7 +43,7 @@ def list():
|
||||
@click.command()
|
||||
@click.argument('api')
|
||||
def check(api):
|
||||
model_list = get_model_list(package_name="gluon", model_dir="models")
|
||||
model_list = get_model_list()
|
||||
if api not in model_list:
|
||||
print("Invalid API name!\n")
|
||||
sys.exit(-1)
|
||||
|
@ -19,8 +19,8 @@ import types
|
||||
import click
|
||||
|
||||
from gluon.particleGenerator.cli import get_api_model
|
||||
from gluon.particleGenerator.cli import get_model_list
|
||||
from gluon.particleGenerator.cli import proc_model
|
||||
from gluon.particleGenerator.generator import get_model_list
|
||||
|
||||
|
||||
sys.tracebacklimit = 0
|
||||
@ -33,8 +33,7 @@ def dummy():
|
||||
def main():
|
||||
cli = types.FunctionType(dummy.func_code, {})
|
||||
cli = click.group()(cli)
|
||||
model_list = get_model_list(package_name="gluon",
|
||||
model_dir="models")
|
||||
model_list = get_model_list()
|
||||
model = get_api_model(sys.argv, model_list)
|
||||
proc_model(cli,
|
||||
package_name="gluon",
|
||||
|
@ -22,7 +22,7 @@ API_SERVICE_OPTS = [
|
||||
default='127.0.0.1',
|
||||
help='The listen IP for the proton API server'),
|
||||
cfg.StrOpt('service_list',
|
||||
default='net-l3vpn',
|
||||
default='*',
|
||||
help='Comma separated list of service models'),
|
||||
cfg.StrOpt('etcd_host',
|
||||
default='127.0.0.1',
|
||||
|
@ -66,15 +66,6 @@ def get_api_model(argv, model_list):
|
||||
return api_name
|
||||
|
||||
|
||||
def get_model_list(package_name, model_dir):
|
||||
model_list = list()
|
||||
for f in pkg_resources.resource_listdir(package_name, model_dir):
|
||||
if f == 'base':
|
||||
continue
|
||||
model_list.append(f)
|
||||
return model_list
|
||||
|
||||
|
||||
def get_token():
|
||||
auth_url = os.environ.get('OS_AUTH_URL')
|
||||
tenant = os.environ.get('OS_TENANT_NAME')
|
||||
|
@ -17,6 +17,8 @@ import pkg_resources
|
||||
import six
|
||||
import yaml
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
from gluon.common import exception as exc
|
||||
from gluon.db.sqlalchemy import models as sql_models
|
||||
|
||||
@ -331,6 +333,26 @@ def load_model_for_service(service):
|
||||
return GenData.models.get(service)
|
||||
|
||||
|
||||
def get_model_list(package_name="gluon", model_dir="models"):
|
||||
model_list = list()
|
||||
for f in pkg_resources.resource_listdir(package_name, model_dir):
|
||||
if f == 'base':
|
||||
continue
|
||||
model_list.append(f)
|
||||
return model_list
|
||||
|
||||
|
||||
def get_service_list():
|
||||
service_list = list()
|
||||
services = str(cfg.CONF.api.service_list).split(',')
|
||||
if len(services) == 1 and services[0] == '*':
|
||||
service_list = get_model_list()
|
||||
else:
|
||||
for api_name in services:
|
||||
service_list.append(api_name.strip())
|
||||
return service_list
|
||||
|
||||
|
||||
def build_sql_models(service_list):
|
||||
from gluon.particleGenerator.DataBaseModelGenerator \
|
||||
import DataBaseModelProcessor
|
||||
|
@ -66,15 +66,6 @@ class CliTestCase(partgen_base.ParticleGeneratorTestCase):
|
||||
observed = cli.get_api_model(argv, model_list)
|
||||
self.assertEqual(expected, observed)
|
||||
|
||||
"""
|
||||
test get_model_list
|
||||
"""
|
||||
def test_get_model_list(self):
|
||||
observed = cli.get_model_list("gluon.tests.particleGenerator",
|
||||
"models")
|
||||
expected = ['test_model.yaml']
|
||||
self.assertEqual(expected, observed)
|
||||
|
||||
"""
|
||||
test json_get
|
||||
"""
|
||||
|
@ -43,6 +43,14 @@ class GeneratorTestCase(partgen_base.ParticleGeneratorTestCase):
|
||||
self.assertIn('Interface', service_models['api_objects'])
|
||||
|
||||
"""
|
||||
test get_model_list
|
||||
"""
|
||||
def test_get_model_list(self):
|
||||
observed = generator.get_model_list("gluon.tests.particleGenerator",
|
||||
"models")
|
||||
expected = ['test_model.yaml']
|
||||
self.assertEqual(expected, observed)
|
||||
"""
|
||||
test build_sql_models(service_list)
|
||||
"""
|
||||
@mock.patch('gluon.particleGenerator.generator.load_model')
|
||||
|
Loading…
Reference in New Issue
Block a user