Support to build openstack related apps using Bazel

Change-Id: Ibc9f43a8fd92bb41b162a88a1eb3e8c8c5ad990a
diff --git a/BUILD b/BUILD
index e39bf4c..f71c4b7 100644
--- a/BUILD
+++ b/BUILD
@@ -86,7 +86,7 @@
     srcs = [
         ":onos-package",
         "tools/package/onos-run-karaf",
-        ] + glob(["tools/package/config/**"]),
+    ] + glob(["tools/package/config/**"]),
     outs = ["onos-runner"],
     cmd = "sed \"s#ONOS_TAR=#ONOS_TAR=$(location :onos-package)#\" $(location tools/package/onos-run-karaf) > $(location onos-runner); chmod +x $(location onos-runner)",
     executable = True,
diff --git a/apps/openstacknetworking/BUILD b/apps/openstacknetworking/BUILD
new file mode 100644
index 0000000..e9e995c
--- /dev/null
+++ b/apps/openstacknetworking/BUILD
@@ -0,0 +1,15 @@
+BUNDLES = [
+    "//apps/openstacknetworking/api:onos-apps-openstacknetworking-api",
+    "//apps/openstacknetworking/app:onos-apps-openstacknetworking-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Openstack Networking Application.",
+    included_bundles = BUNDLES,
+    required_apps = [
+        "org.onosproject.openstacknode",
+    ],
+    title = "OpenStack Networking Application",
+    url = "https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization",
+)
diff --git a/apps/openstacknetworking/api/BUILD b/apps/openstacknetworking/api/BUILD
new file mode 100644
index 0000000..5348b60
--- /dev/null
+++ b/apps/openstacknetworking/api/BUILD
@@ -0,0 +1,15 @@
+load(
+    "//apps/openstacknode:openstack4j.bzl",
+    "ALL_PACKAGES",
+    "EXCLUDE_PACKAGES",
+    "INCLUDE_PACKAGES",
+)
+
+COMPILE_DEPS = CORE_DEPS + [
+    "@openstack4j_core//jar",
+]
+
+osgi_jar_with_tests(
+    import_packages = INCLUDE_PACKAGES + "," + EXCLUDE_PACKAGES + "," + ALL_PACKAGES,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacknetworking/app/BUILD b/apps/openstacknetworking/app/BUILD
new file mode 100644
index 0000000..529c9c0
--- /dev/null
+++ b/apps/openstacknetworking/app/BUILD
@@ -0,0 +1,43 @@
+load(
+    "//apps/openstacknode:openstack4j.bzl",
+    "ALL_PACKAGES",
+    "EXCLUDE_PACKAGES",
+    "INCLUDE_PACKAGES",
+    "get_jackson_deps_path",
+    "get_openstack4j_deps_path",
+)
+
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [
+    "//core/store/serializers:onos-core-serializers",
+    "//protocols/ovsdb/api:onos-protocols-ovsdb-api",
+    "//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "//apps/openstacknetworking/api:onos-apps-openstacknetworking-api",
+    "@openstack4j_core//jar",
+    "@openstack4j_http_connector//jar",
+    "@openstack4j_httpclient//jar",
+    "@json_patch//jar",
+    "@jackson_coreutils//jar",
+    "@btf//jar",
+    "@msg_simple//jar",
+    "@snakeyaml//jar",
+]
+
+TEST_DEPS = TEST_ADAPTERS + TEST_REST + [
+    "//core/api:onos-api-tests",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api-tests",
+    "//core/common:onos-core-common-tests",
+    "//web/api:onos-rest-tests",
+]
+
+osgi_jar_with_tests(
+    api_description = "REST API for OpenStack Networking",
+    api_package = "org.onosproject.openstacknetworking.web",
+    api_title = "OpenStack Networking API",
+    api_version = "1.0",
+    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path(),
+    import_packages = INCLUDE_PACKAGES + "," + EXCLUDE_PACKAGES + "," + ALL_PACKAGES,
+    test_deps = TEST_DEPS,
+    web_context = "/onos/openstacknetworking",
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacknetworkingui/BUILD b/apps/openstacknetworkingui/BUILD
new file mode 100644
index 0000000..faf4563
--- /dev/null
+++ b/apps/openstacknetworkingui/BUILD
@@ -0,0 +1,35 @@
+EXCLUDE_PACKAGES = "!org.apache.sshd.client,!org.apache.sshd.client.*,!org.apache.sshd.common.util.io"
+
+COMPILE_DEPS = CORE_DEPS + JACKSON + CLI + REST + [
+    "//core/store/serializers:onos-core-serializers",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "//apps/openstacknetworking/api:onos-apps-openstacknetworking-api",
+    "@sshd_core//jar",
+]
+
+EXCLUDED_BUNDLES = [
+    "@sshd_core//jar",
+]
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    import_packages = EXCLUDE_PACKAGES,
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
+
+onos_app(
+    app_name = "org.onosproject.openstacknetworkingui",
+    category = "GUI",
+    description = "Openstack Networking UI Service",
+    excluded_bundles = EXCLUDED_BUNDLES,
+    required_apps = [
+        "org.onosproject.openstacknetworking",
+    ],
+    title = "Openstack Networking UI",
+    url = "http://onosproject.org",
+)
diff --git a/apps/openstacknode/BUILD b/apps/openstacknode/BUILD
new file mode 100644
index 0000000..06c2abf
--- /dev/null
+++ b/apps/openstacknode/BUILD
@@ -0,0 +1,16 @@
+BUNDLES = [
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "//apps/openstacknode/app:onos-apps-openstacknode-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Openstack Node Bootstrap Application.",
+    included_bundles = BUNDLES,
+    required_apps = [
+        "org.onosproject.ovsdb-base",
+        "org.onosproject.drivers.ovsdb",
+    ],
+    title = "OpenStack Node Bootstrap",
+    url = "http://onosproject.org",
+)
diff --git a/apps/openstacknode/api/BUILD b/apps/openstacknode/api/BUILD
new file mode 100644
index 0000000..9cccaaa
--- /dev/null
+++ b/apps/openstacknode/api/BUILD
@@ -0,0 +1,24 @@
+load(
+    "//apps/openstacknode:openstack4j.bzl",
+    "ALL_PACKAGES",
+    "EXCLUDE_PACKAGES",
+    "INCLUDE_PACKAGES",
+)
+
+COMPILE_DEPS = CORE_DEPS + CLI + [
+    "//core/store/serializers:onos-core-serializers",
+    "//protocols/ovsdb/api:onos-protocols-ovsdb-api",
+    "//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc",
+]
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    exclude_tests = ["org.onosproject.openstacknode.api.OpenstackNodeTest"],
+    import_packages = INCLUDE_PACKAGES + "," + EXCLUDE_PACKAGES + "," + ALL_PACKAGES,
+    test_deps = TEST_ADAPTERS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacknode/app/BUILD b/apps/openstacknode/app/BUILD
new file mode 100644
index 0000000..36b55f5
--- /dev/null
+++ b/apps/openstacknode/app/BUILD
@@ -0,0 +1,42 @@
+load(
+    "//apps/openstacknode:openstack4j.bzl",
+    "ALL_PACKAGES",
+    "EXCLUDE_PACKAGES",
+    "INCLUDE_PACKAGES",
+    "get_jackson_deps_path",
+    "get_openstack4j_deps_path",
+)
+
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [
+    "//core/store/serializers:onos-core-serializers",
+    "//protocols/ovsdb/api:onos-protocols-ovsdb-api",
+    "//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "@openstack4j_core//jar",
+    "@openstack4j_http_connector//jar",
+    "@openstack4j_httpclient//jar",
+    "@json_patch//jar",
+    "@jackson_coreutils//jar",
+    "@btf//jar",
+    "@msg_simple//jar",
+    "@snakeyaml//jar",
+]
+
+TEST_DEPS = TEST_ADAPTERS + TEST_REST + [
+    "//core/api:onos-api-tests",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api-tests",
+    "//core/common:onos-core-common-tests",
+    "//web/api:onos-rest-tests",
+]
+
+osgi_jar_with_tests(
+    api_description = "REST API for OpenStack Node",
+    api_package = "org.onosproject.openstacknode.web",
+    api_title = "OpenStack Node API",
+    api_version = "1.0",
+    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path(),
+    import_packages = INCLUDE_PACKAGES + "," + EXCLUDE_PACKAGES + "," + ALL_PACKAGES,
+    test_deps = TEST_DEPS,
+    web_context = "/onos/openstacknode",
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacknode/openstack4j.bzl b/apps/openstacknode/openstack4j.bzl
new file mode 100644
index 0000000..fc68a41
--- /dev/null
+++ b/apps/openstacknode/openstack4j.bzl
@@ -0,0 +1,41 @@
+INCLUDE_PACKAGES = "com.google.common.net,com.google.common.io,com.fasterxml.jackson.annotation"
+EXCLUDE_PACKAGES = "!org.openstack4j,!org.openstack4j.*,!org.openstack4j.api,!org.openstack4j.api.*,!org.openstack4j.core.*,!org.openstack4j.model.network,!org.openstack4j.model.common,!org.openstack4j.openstack"
+ALL_PACKAGES = "*"
+
+def get_openstack4j_deps_path():
+
+    WEB_INF_PATH = 'WEB-INF/classes/deps/'
+    OPENSTACK4J_DEPS = [
+        'openstack4j-core',
+        'openstack4j-http-connector',
+        'openstack4j-httpclient',
+    ]
+    OPENSTACK4J_VER = '3.1.0'
+
+    openstack_deps_path = ''
+
+    for dep in OPENSTACK4J_DEPS:
+        name = dep + '-' + OPENSTACK4J_VER + '.jar'
+        path = WEB_INF_PATH + name
+        openstack_deps_path = openstack_deps_path + path + ','
+
+    return openstack_deps_path
+
+def get_jackson_deps_path():
+
+    WEB_INF_PATH = 'WEB-INF/classes/deps/'
+    JACKSON_DEPS_WITH_VER = [
+        'json-patch-1.9.jar',
+        'jackson-coreutils-1.6.jar',
+        'msg-simple-1.1.jar',
+        'btf-1.2.jar',
+        'snakeyaml-1.15.jar'
+    ]
+
+    jackson_deps_path = ''
+
+    for dep in JACKSON_DEPS_WITH_VER:
+        path = WEB_INF_PATH + dep
+        jackson_deps_path = jackson_deps_path + path + ','
+
+    return jackson_deps_path
\ No newline at end of file
diff --git a/apps/openstacktelemetry/BUILD b/apps/openstacktelemetry/BUILD
new file mode 100644
index 0000000..134dc51
--- /dev/null
+++ b/apps/openstacktelemetry/BUILD
@@ -0,0 +1,28 @@
+BUNDLES = [
+    "@kafka_clients//jar",
+    "@influxdb_java//jar",
+    "@commons_codec//jar",
+    "@retrofit//jar",
+    "@okhttp//jar",
+    "@logging_interceptor//jar",
+    "@gson//jar",
+    "@okio//jar",
+    "@moshi//jar",
+    "@converter_moshi//jar",
+    "@protobuf_java_3_2_0//jar",
+    "@google_instrumentation_0_3_0//jar",
+    "@grpc_core_1_3_1//jar",
+    "//apps/openstacktelemetry/api:onos-apps-openstacktelemetry-api",
+    "//apps/openstacktelemetry/app:onos-apps-openstacktelemetry-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Openstack Telemetry Application.",
+    included_bundles = BUNDLES,
+    required_apps = [
+        "org.onosproject.openstacknetworking",
+    ],
+    title = "OpenStack Telemetry Application",
+    url = "https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization",
+)
diff --git a/apps/openstacktelemetry/api/BUILD b/apps/openstacktelemetry/api/BUILD
new file mode 100644
index 0000000..167d8ce
--- /dev/null
+++ b/apps/openstacktelemetry/api/BUILD
@@ -0,0 +1,16 @@
+COMPILE_DEPS = CORE_DEPS + [
+    "@kafka_clients//jar",
+    "@jersey_client//jar",
+    "@javax_ws_rs_api//jar",
+    "@influxdb_java//jar",
+]
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacktelemetry/app/BUILD b/apps/openstacktelemetry/app/BUILD
new file mode 100644
index 0000000..434c13c
--- /dev/null
+++ b/apps/openstacktelemetry/app/BUILD
@@ -0,0 +1,27 @@
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + REST + CLI + GRPC_1_3 + [
+    "@kafka_clients//jar",
+    "@jersey_client//jar",
+    "@influxdb_java//jar",
+    "@grpc_core_1_3_1//jar",
+    "//core/store/serializers:onos-core-serializers",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "//apps/openstacknetworking/api:onos-apps-openstacknetworking-api",
+    "//apps/openstacktelemetry/api:onos-apps-openstacktelemetry-api",
+    "@grpc_protobuf_lite_1_3_1//jar",
+]
+
+TEST_DEPS = TEST_ADAPTERS + TEST_REST + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+    "//web/api:onos-rest-tests",
+]
+
+osgi_jar_with_tests(
+    api_description = "OpenStack Network Telemetry REST API",
+    api_package = "org.onosproject.openstacktelemetry.web",
+    api_title = "OpenStack Network Telemetry REST API",
+    api_version = "1.0",
+    test_deps = TEST_DEPS,
+    web_context = "/onos/openstacktelemetry",
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacktroubleshoot/BUILD b/apps/openstacktroubleshoot/BUILD
new file mode 100644
index 0000000..c7f776f
--- /dev/null
+++ b/apps/openstacktroubleshoot/BUILD
@@ -0,0 +1,13 @@
+BUNDLES = [
+    "//apps/openstacktroubleshoot/api:onos-apps-openstacktroubleshoot-api",
+    "//apps/openstacktroubleshoot/app:onos-apps-openstacktroubleshoot-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Openstack Troubleshoot Application.",
+    included_bundles = BUNDLES,
+    required_apps = ["org.onosproject.openstacknetworking"],
+    title = "OpenStack Troubleshoot",
+    url = "http://onosproject.org",
+)
diff --git a/apps/openstacktroubleshoot/api/BUILD b/apps/openstacktroubleshoot/api/BUILD
new file mode 100644
index 0000000..b22d9f6
--- /dev/null
+++ b/apps/openstacktroubleshoot/api/BUILD
@@ -0,0 +1,11 @@
+COMPILE_DEPS = CORE_DEPS + CLI
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstacktroubleshoot/app/BUILD b/apps/openstacktroubleshoot/app/BUILD
new file mode 100644
index 0000000..3c979d2
--- /dev/null
+++ b/apps/openstacktroubleshoot/app/BUILD
@@ -0,0 +1,19 @@
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [
+    "//apps/openstacktroubleshoot/api:onos-apps-openstacktroubleshoot-api",
+]
+
+TEST_DEPS = TEST_ADAPTERS + TEST_REST + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+    "//web/api:onos-rest-tests",
+]
+
+osgi_jar_with_tests(
+    api_description = "REST API for OpenStack Troubleshoot",
+    api_package = "org.onosproject.openstacktroubleshoot.web",
+    api_title = "OpenStack Troubleshoot API",
+    api_version = "1.0",
+    test_deps = TEST_DEPS,
+    web_context = "/onos/openstacktroubleshoot",
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstackvtap/BUILD b/apps/openstackvtap/BUILD
new file mode 100644
index 0000000..fad480d
--- /dev/null
+++ b/apps/openstackvtap/BUILD
@@ -0,0 +1,15 @@
+BUNDLES = [
+    "//apps/openstackvtap/api:onos-apps-openstackvtap-api",
+    "//apps/openstackvtap/app:onos-apps-openstackvtap-app",
+]
+
+onos_app(
+    category = "Integration",
+    description = "SONA Openstack vTap Application.",
+    included_bundles = BUNDLES,
+    required_apps = [
+        "org.onosproject.openstacknetworking",
+    ],
+    title = "OpenStack vTap Application",
+    url = "https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization",
+)
diff --git a/apps/openstackvtap/api/BUILD b/apps/openstackvtap/api/BUILD
new file mode 100644
index 0000000..36d2da1
--- /dev/null
+++ b/apps/openstackvtap/api/BUILD
@@ -0,0 +1,11 @@
+COMPILE_DEPS = CORE_DEPS
+
+TEST_DEPS = TEST_ADAPTERS + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+]
+
+osgi_jar_with_tests(
+    test_deps = TEST_DEPS,
+    deps = COMPILE_DEPS,
+)
diff --git a/apps/openstackvtap/app/BUILD b/apps/openstackvtap/app/BUILD
new file mode 100644
index 0000000..078ed2b
--- /dev/null
+++ b/apps/openstackvtap/app/BUILD
@@ -0,0 +1,22 @@
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + REST + [
+    "//core/store/serializers:onos-core-serializers",
+    "//apps/openstacknetworking/api:onos-apps-openstacknetworking-api",
+    "//apps/openstacknode/api:onos-apps-openstacknode-api",
+    "//apps/openstackvtap/api:onos-apps-openstackvtap-api",
+]
+
+TEST_DEPS = TEST_ADAPTERS + TEST_REST + [
+    "//core/api:onos-api-tests",
+    "//core/common:onos-core-common-tests",
+    "//web/api:onos-rest-tests",
+]
+
+osgi_jar_with_tests(
+    api_description = "OpenStack Network vTap REST API",
+    api_package = "org.onosproject.openstackvtap.web",
+    api_title = "OpenStack Network vTap REST API",
+    api_version = "1.0",
+    test_deps = TEST_DEPS,
+    web_context = "/onos/openstackvtap",
+    deps = COMPILE_DEPS,
+)
diff --git a/core/store/primitives/BUILD b/core/store/primitives/BUILD
index 1d726e8..0a925d1 100644
--- a/core/store/primitives/BUILD
+++ b/core/store/primitives/BUILD
@@ -14,50 +14,57 @@
 ]
 
 _primitive_package_names = [
-    'barrier',
-    'collection',
-    'counter',
-    'election',
-    'idgenerator',
-    'iterator',
-    'list',
-    'lock',
-    'map',
-    'multimap',
-    'multiset',
-    'queue',
-    'semaphore',
-    'set',
-    'transaction',
-    'tree',
-    'value',
-    'workqueue',
+    "barrier",
+    "collection",
+    "counter",
+    "election",
+    "idgenerator",
+    "iterator",
+    "list",
+    "lock",
+    "map",
+    "multimap",
+    "multiset",
+    "queue",
+    "semaphore",
+    "set",
+    "transaction",
+    "tree",
+    "value",
+    "workqueue",
 ]
 
 # A list of all core primitive packages for dynamic class loading
-PRIMITIVE_PACKAGES = ','.join(['io.atomix.primitive.session.impl'] + ['io.atomix.core.{primitive},io.atomix.core.{primitive}.impl'.format(primitive=primitive) for primitive in _primitive_package_names])
+PRIMITIVE_PACKAGES = ",".join(["io.atomix.primitive.session.impl"] + ["io.atomix.core.{primitive},io.atomix.core.{primitive}.impl".format(primitive = primitive) for primitive in _primitive_package_names])
 
 # Base package names for core Atomix protocols
 _protocol_package_names = [
-    'raft',
-    'backup',
+    "raft",
+    "backup",
 ]
 
 # A list of all core protocol packages for dynamic class loading
-PROTOCOL_PACKAGES = ','.join(['io.atomix.primitive.partition.impl'] + ['io.atomix.protocols.{protocol},io.atomix.protocols.{protocol}.partition'.format(protocol=protocol) for protocol in _protocol_package_names] + ['io.atomix.protocols.gossip'])
+PROTOCOL_PACKAGES = ",".join(["io.atomix.primitive.partition.impl"] + ["io.atomix.protocols.{protocol},io.atomix.protocols.{protocol}.partition".format(protocol = protocol) for protocol in _protocol_package_names] + ["io.atomix.protocols.gossip"])
 
 # A list of all additional core packages used in dynamic class loading
-CORE_PACKAGES = ','.join(['io.atomix.core.profile', 'io.atomix.core.profile.impl'])
+CORE_PACKAGES = ",".join([
+    "io.atomix.core.profile",
+    "io.atomix.core.profile.impl",
+])
 
 # A list of all dynamically loadable Atomix packages
-INCLUDE_PACKAGES = ','.join([PRIMITIVE_PACKAGES, PROTOCOL_PACKAGES, CORE_PACKAGES])
+INCLUDE_PACKAGES = ",".join([
+    PRIMITIVE_PACKAGES,
+    PROTOCOL_PACKAGES,
+    CORE_PACKAGES,
+])
 
-ALL_PACKAGES = '*'
+ALL_PACKAGES = "*"
 
 osgi_jar_with_tests(
     name = "onos-core-primitives",
+    import_packages = INCLUDE_PACKAGES + "," + ALL_PACKAGES,
     test_deps = TEST_DEPS,
     visibility = ["//visibility:public"],
     deps = COMPILE_DEPS,
-    import_packages = INCLUDE_PACKAGES + ',' + ALL_PACKAGES,
 )
diff --git a/modules.bzl b/modules.bzl
index e30a370..b0deb36 100644
--- a/modules.bzl
+++ b/modules.bzl
@@ -165,7 +165,6 @@
     "//apps/metrics:onos-apps-metrics-oar",
     "//apps/mfwd:onos-apps-mfwd-oar",
     "//apps/mlb:onos-apps-mlb-oar",
-    #"//apps/openstacknetworking:onos-apps-openstacknetworking-oar",
     "//apps/mobility:onos-apps-mobility-oar",
     "//apps/newoptical:onos-apps-newoptical-oar",
     "//apps/optical-model:onos-apps-optical-model-oar",
@@ -197,7 +196,12 @@
     "//apps/routing/fpm:onos-apps-routing-fpm-oar",
     "//apps/vtn:onos-apps-vtn-oar",
     "//apps/faultmanagement:onos-apps-faultmanagement-oar",
-    #"//apps/openstacknode:onos-apps-openstacknode-oar",
+    "//apps/openstacknode:onos-apps-openstacknode-oar",
+    "//apps/openstacknetworking:onos-apps-openstacknetworking-oar",
+    "//apps/openstacknetworkingui:onos-apps-openstacknetworkingui-oar",
+    "//apps/openstacktelemetry:onos-apps-openstacktelemetry-oar",
+    "//apps/openstacktroubleshoot:onos-apps-openstacktroubleshoot-oar",
+    "//apps/openstackvtap:onos-apps-openstackvtap-oar",
     "//apps/cpman/app:onos-apps-cpman-app-oar",
     "//apps/scalablegateway:onos-apps-scalablegateway-oar",
     "//apps/castor:onos-apps-castor-oar",
@@ -229,8 +233,6 @@
     "//apps/evpn-route-service:onos-apps-evpn-route-service-oar",
     #"//incubator/protobuf/registry:onos-incubator-protobuf-registry-oar",
     #"//incubator/protobuf/services/nb:onos-incubator-protobuf-services-nb-oar",
-    #"//apps/openstacknetworkingui:onos-apps-openstacknetworkingui-oar",
-    #"//apps/openstacktelemetry:onos-apps-openstacktelemetry-oar",
     #"//apps/p4-tutorial/pipeconf:onos-apps-p4-tutorial-pipeconf-oar",
     #"//apps/p4-tutorial/mytunnel:onos-apps-p4-tutorial-mytunnel-oar",
     "//apps/cfm:onos-apps-cfm-oar",
diff --git a/protocols/p4runtime/proto/BUILD b/protocols/p4runtime/proto/BUILD
index 11eed2f..8c533af 100644
--- a/protocols/p4runtime/proto/BUILD
+++ b/protocols/p4runtime/proto/BUILD
@@ -13,7 +13,6 @@
     deps = CORE_DEPS + ["@protobuf_java_3_2_0//jar"],
 )
 
-
 wrapped_osgi_jar(
     name = "grpc-core-repkg-1.3.1",
     jar = "@grpc_src_zip_131//:grpc-core-repkg-1.3.1-native",
diff --git a/web/gui/BUILD b/web/gui/BUILD
index b23bf94..72e280b 100644
--- a/web/gui/BUILD
+++ b/web/gui/BUILD
@@ -150,16 +150,19 @@
 
 genrule(
     name = "_web_app_all",
-    srcs =  glob([
-                   "src/main/webapp/**",
-                   "src/main/webapp/app/**/*.js",
-               ], exclude = [
-                   "src/main/webapp/tests/**",
-                   "src/main/webapp/node_modules/**",
-                   "src/main/webapp/dist/**",
-                   "src/main/webapp/vendor/**",
-                   "src/main/webapp/npm-debug.log",
-               ]),
+    srcs = glob(
+        [
+            "src/main/webapp/**",
+            "src/main/webapp/app/**/*.js",
+        ],
+        exclude = [
+            "src/main/webapp/tests/**",
+            "src/main/webapp/node_modules/**",
+            "src/main/webapp/dist/**",
+            "src/main/webapp/vendor/**",
+            "src/main/webapp/npm-debug.log",
+        ],
+    ),
     outs = ["web_app_all.jar"],
     cmd = "cd web/gui &&" +
           " find src/main/webapp -type f -exec touch -t 201806280000 {} \; &&" +