Support to build openstack related apps using Bazel

Change-Id: Ibc9f43a8fd92bb41b162a88a1eb3e8c8c5ad990a
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,
+)