Implement bazel support for web context

- add web context to OSGI rules
- build ACL app
- build DHCP app

Change-Id: I03687d109eb44621458ad7269a435e03eec47495
This commit is contained in:
Ray Milkey 2018-06-13 14:12:51 -07:00
parent 9952dab238
commit 25747d88f7
7 changed files with 115 additions and 12 deletions

22
apps/acl/BUILD Normal file
View File

@ -0,0 +1,22 @@
COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [
"@javax_ws_rs_api//jar",
"//utils/rest:onlab-rest",
"//core/store/serializers:onos-core-serializers",
]
TEST_DEPS = TEST_REST + [
"@jersey_server//jar",
]
osgi_jar_with_tests(
test_deps = TEST_DEPS,
web_context = "/onos/v1/acl",
deps = COMPILE_DEPS,
)
onos_app(
category = "Security",
description = "ONOS ACL application.",
title = "Access Control Lists",
url = "http://onosproject.org",
)

11
apps/dhcp/BUILD Normal file
View File

@ -0,0 +1,11 @@
BUNDLES = [
"//apps/dhcp/api:onos-apps-dhcp-api",
"//apps/dhcp/app:onos-apps-dhcp-app",
]
onos_app(
category = "Utility",
included_bundles = BUNDLES,
title = "DHCP Server",
url = "http://onosproject.org",
)

3
apps/dhcp/api/BUILD Normal file
View File

@ -0,0 +1,3 @@
osgi_jar_with_tests(
deps = CORE_DEPS,
)

18
apps/dhcp/app/BUILD Normal file
View File

@ -0,0 +1,18 @@
COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [
"@javax_ws_rs_api//jar",
"@org_apache_karaf_shell_console//jar",
"//apps/dhcp/api:onos-apps-dhcp-api",
"//utils/rest:onlab-rest",
"//core/store/serializers:onos-core-serializers",
"//cli:onos-cli",
]
osgi_jar_with_tests(
api_description = "REST API for DHCP Server",
api_package = "org.onosproject.dhcp.rest",
api_title = "DHCP Server",
api_version = "1.0",
test_deps = TEST_ADAPTERS,
web_context = "/onos/dhcp",
deps = COMPILE_DEPS,
)

View File

@ -147,11 +147,11 @@ ONOS_PROVIDERS = [
ONOS_APPS = [
# Apps
#"//apps/dhcp:onos-apps-dhcp-oar",
"//apps/dhcp:onos-apps-dhcp-oar",
#"//apps/dhcprelay:onos-apps-dhcprelay-oar",
#"//apps/fwd:onos-apps-fwd-oar",
#"//apps/packet-stats:onos-apps-packet-stats-oar",
#"//apps/acl:onos-apps-acl-oar",
"//apps/acl:onos-apps-acl-oar",
#"//apps/bgprouter:onos-apps-bgprouter-oar",
#"//apps/cip:onos-apps-cip-oar",
#"//apps/drivermatrix:onos-apps-drivermatrix-oar",
@ -280,8 +280,8 @@ PIPELINES = [
APP_JARS = [
#"//apps/cpman/api:onos-apps-cpman-api",
#"//apps/routing-api:onos-apps-routing-api",
#"//apps/dhcp/api:onos-apps-dhcp-api",
#"//apps/dhcp/app:onos-apps-dhcp-app",
"//apps/dhcp/api:onos-apps-dhcp-api",
"//apps/dhcp/app:onos-apps-dhcp-app",
#"//apps/imr/api:onos-apps-imr-api",
#"//apps/imr/app:onos-apps-imr-app",
#"//apps/dhcprelay:onos-apps-dhcprelay",

View File

@ -33,6 +33,9 @@ def _all_resources(resources_root):
else:
return native.glob([resources_root + "**"])
def _webapp():
return native.glob(["src/main/webapp/**"])
# Implementation of the rule to call bnd to make an OSGI jar file
def _bnd_impl(ctx):
if (len(ctx.files.source) == 1):
@ -56,7 +59,10 @@ def _bnd_impl(ctx):
import_packages = ctx.attr.import_packages
exportPackages = "*"
includeResources = ""
webContext = "NONE"
web_context = ctx.attr.web_context
if web_context == None or web_context == "":
web_context = "NONE"
web_xml = ctx.attr.web_xml
dynamicimportPackages = ""
cp = ""
@ -83,6 +89,11 @@ def _bnd_impl(ctx):
progress_message = "Expanding jar file: %s" % jar,
)
inputDependencies += [classes]
web_xml_root_path = ""
if len(web_xml) != 0:
web_xml_root = web_xml[0].files.to_list()[0]
inputDependencies += [web_xml_root]
web_xml_root_path = web_xml_root.path.replace("WEB-INF/web.xml", "")
# call bnd to make the OSGI jar file
arguments = [
@ -96,7 +107,8 @@ def _bnd_impl(ctx):
import_packages,
exportPackages,
includeResources,
webContext,
web_context,
web_xml_root_path,
dynamicimportPackages,
classesPath,
]
@ -124,6 +136,8 @@ _bnd = rule(
"package_name_root": attr.string(),
"source": attr.label(),
"import_packages": attr.string(),
"web_context": attr.string(),
"web_xml": attr.label_list(allow_files = True),
"_bnd_exe": attr.label(
executable = True,
cfg = "host",
@ -138,8 +152,26 @@ _bnd = rule(
implementation = _bnd_impl,
)
def wrapped_osgi_jar(name, jar, deps, version = ONOS_VERSION, package_name_root = "org.onosproject", import_packages = "*", visibility = ["//visibility:private"]):
_bnd(name = name, source = jar, deps = deps, version = version, package_name_root = package_name_root, visibility = visibility, import_packages = import_packages)
def wrapped_osgi_jar(
name,
jar,
deps,
version = ONOS_VERSION,
package_name_root = "org.onosproject",
import_packages = "*",
web_context = None,
web_xml = None,
visibility = ["//visibility:private"]):
_bnd(
name = name,
source = jar,
deps = deps,
version = version,
package_name_root = package_name_root,
visibility = visibility,
import_packages = import_packages,
web_xml = web_xml,
)
def osgi_jar_with_tests(
name = None,
@ -154,6 +186,11 @@ def osgi_jar_with_tests(
test_resources = None,
visibility = ["//visibility:public"],
version = ONOS_VERSION,
web_context = None,
api_title = "",
api_version = "",
api_description = "",
api_package = "",
import_packages = None):
if name == None:
name = "onos-" + native.package_name().replace("/", "-")
@ -176,8 +213,11 @@ def osgi_jar_with_tests(
tests_name = name + "-tests"
tests_jar_deps = list(depset(deps + test_deps)) + [name]
all_test_deps = tests_jar_deps + [tests_name]
web_xml = _webapp()
# compile the Java code
native.java_library(name = name + "-native", srcs = srcs, resources = resources, deps = deps, visibility = visibility)
_bnd(
name = name,
source = name + "-native",
@ -186,6 +226,8 @@ def osgi_jar_with_tests(
package_name_root = package_name_root,
visibility = visibility,
import_packages = import_packages,
web_context = web_context,
web_xml = web_xml,
)
if test_srcs != []:
native.java_library(
@ -214,7 +256,7 @@ def osgi_jar(
visibility = ["//visibility:public"],
version = ONOS_VERSION,
# TODO - implement these for swagger and web.xml
web_context = "",
web_context = None,
api_title = "",
api_version = "",
api_description = "",
@ -238,4 +280,5 @@ def osgi_jar(
visibility = visibility,
version = version,
import_packages = import_packages,
web_context = web_context,
)

View File

@ -74,6 +74,7 @@ public class OSGiWrapper {
private String bundleLicense;
private String webContext;
private String webXmlRoot;
private String destdir;
// FIXME should consider using Commons CLI, etc.
@ -94,8 +95,9 @@ public class OSGiWrapper {
String exportPackages = args[8];
String includeResources = args[9];
String webContext = args[10];
String dynamicimportPackages = args[11];
String destdir = args[12];
String webXmlRoot = args[11];
String dynamicimportPackages = args[12];
String destdir = args[13];
String desc = Joiner.on(' ').join(Arrays.copyOfRange(args, 12, args.length));
OSGiWrapper wrapper = new OSGiWrapper(jar, output, cp,
@ -104,6 +106,7 @@ public class OSGiWrapper {
importPackages, exportPackages,
includeResources,
webContext,
webXmlRoot,
dynamicimportPackages,
desc,
destdir);
@ -126,6 +129,7 @@ public class OSGiWrapper {
String exportPackages,
String includeResources,
String webContext,
String webXmlRoot,
String dynamicimportPackages,
String bundleDescription,
String destdir) {
@ -155,6 +159,7 @@ public class OSGiWrapper {
}
this.webContext = webContext;
this.webXmlRoot = webXmlRoot;
this.destdir = destdir;
}
@ -184,7 +189,7 @@ public class OSGiWrapper {
}
if (isWab()) {
analyzer.setProperty(Analyzer.WAB, "src/main/webapp/");
analyzer.setProperty(Analyzer.WAB, webXmlRoot);
analyzer.setProperty("Web-ContextPath", webContext);
analyzer.setProperty(Analyzer.IMPORT_PACKAGE, "*,org.glassfish.jersey.servlet,org.jvnet.mimepull\n");
}
@ -281,6 +286,7 @@ public class OSGiWrapper {
}
Path wabRoot = Paths.get(wab);
log("wab root " + wabRoot.toString());
includeFiles(dot, null, wabRoot.toString());
}