add rbe-debian8 container by container_layer

* make use of container_layer rule to generate the experimental
rbe-debian8 container.
* rbe-debian8 container can pass the same tests as the current
debian8-clang-fully-loaded container
* since `layers` attr is used in container_image rule, we rename
`layers` -> `language_layers`

Tested:
- bazel test //container/debian8-clang-fully-loaded:all
- bazel test //container/experimental/rbe-debian8:all

Change-Id: I7c4a9e626d720d94f6f730f31f3f4d57c35a9a10
diff --git a/WORKSPACE b/WORKSPACE
index 48b6657..dcf8f28 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -22,9 +22,9 @@
 # https://docs.bazel.build/versions/master/be/workspace.html#git_repository
 http_archive(
     name = "io_bazel_rules_docker",
-    sha256 = "bc2182a51e19bf1fe5c3c33636b3e2827fac7be34af07690f9d612ca9bf31c3b",
-    strip_prefix = "rules_docker-4d49182a85c745065e621c145238c5e9420ed91b",
-    urls = ["https://github.com/bazelbuild/rules_docker/archive/4d49182a85c745065e621c145238c5e9420ed91b.tar.gz"],
+    sha256 = "d2e6408b8f8b03ad1f2172acadf979204dedd0423c5194a82a1301cc6d1c224b",
+    strip_prefix = "rules_docker-17f2587dc58642cd494b9d56890e6210f406380d",
+    urls = ["https://github.com/bazelbuild/rules_docker/archive/17f2587dc58642cd494b9d56890e6210f406380d.tar.gz"],
 )
 
 load(
diff --git a/container/debian8-clang-fully-loaded/BUILD b/container/debian8-clang-fully-loaded/BUILD
index a16aa31..7080e11 100644
--- a/container/debian8-clang-fully-loaded/BUILD
+++ b/container/debian8-clang-fully-loaded/BUILD
@@ -43,9 +43,9 @@
     env = {
         # PATH envvar is a special case, and currently only the one in the
         # topmost layer is set. So that we override it here to include all.
-        "PATH": "/usr/local/go/bin:/opt/python3.6/bin:$PATH",
+        "PATH": "/opt/python3.6/bin:/usr/local/go/bin:$PATH",
     },
-    layers = [
+    language_layers = [
         "base-ltl",
         "clang-ltl",
         "go-ltl",
@@ -118,6 +118,6 @@
 
 container_test(
     name = "fl-toolchain-test",
-    configs = ["test.yaml"],
+    configs = ["//container/test:rbe-debian8.yaml"],
     image = ":fl-toolchain",
 )
diff --git a/container/experimental/rbe-debian8/BUILD b/container/experimental/rbe-debian8/BUILD
new file mode 100644
index 0000000..92b0437
--- /dev/null
+++ b/container/experimental/rbe-debian8/BUILD
@@ -0,0 +1,113 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+licenses(["notice"])  # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+load("@distroless//cacerts:cacerts.bzl", "cacerts")
+load("@jessie_package_bundle//file:packages.bzl", "packages")
+load(
+    "//skylib:packages.bzl",
+    "base_layer_packages",
+    "clang_layer_packages",
+    "java_layer_packages",
+    "python_layer_packages",
+)
+load("@io_bazel_rules_docker//contrib:test.bzl", "container_test")
+load(
+    "@io_bazel_rules_docker//container:container.bzl",
+    "container_image",
+    "container_layer",
+)
+
+cacerts(
+    name = "cacerts",
+    deb = packages["ca-certificates"],
+)
+
+container_image(
+    name = "fl-toolchain",
+    base = "@debian8//image",
+    layers = [
+        "base-ltl",
+        "clang-ltl",
+        "go-ltl",
+        "java-ltl",
+        "python-ltl",
+    ],
+    tags = ["manual"],
+)
+
+container_layer(
+    name = "base-ltl",
+    debs = base_layer_packages(),
+    tags = ["manual"],
+    tars = [
+        ":cacerts.tar",
+    ],
+)
+
+container_layer(
+    name = "clang-ltl",
+    debs = clang_layer_packages(),
+    env = {
+        "CC": "/usr/local/bin/clang",
+    },
+    tags = ["manual"],
+    tars = ["//third_party/clang:tar"],
+)
+
+container_layer(
+    name = "go-ltl",
+    env = {
+        "GOPATH": "/go",
+        "PATH": "/usr/local/go/bin:$PATH",
+    },
+    tags = ["manual"],
+    tars = ["//third_party/golang:tar"],
+)
+
+container_layer(
+    name = "java-ltl",
+    debs = java_layer_packages(),
+    env = {
+        "JAVA_HOME": "/usr/lib/jvm/java-8-openjdk-amd64",
+    },
+    symlinks = {
+        "/usr/bin/java": "/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java",
+    },
+    tags = ["manual"],
+)
+
+container_layer(
+    name = "python-ltl",
+    debs = python_layer_packages(),
+    env = {
+        "PATH": "/opt/python3.6/bin:$PATH",
+    },
+    symlinks = {
+        "/usr/bin/python": "/usr/bin/python2.7",
+        "/opt/python3.6/bin/python3": "/opt/python3.6/bin/python3.6",
+        "/opt/python3.6/bin/pip3": "/opt/python3.6/bin/pip3.6",
+    },
+    tags = ["manual"],
+    tars = ["//third_party/python:tar"],
+)
+
+container_test(
+    name = "fl-toolchain-test",
+    configs = ["//container/test:rbe-debian8.yaml"],
+    image = ":fl-toolchain",
+)
diff --git a/container/rules/docker_toolchains.bzl b/container/rules/docker_toolchains.bzl
index 418ded8..468430b 100644
--- a/container/rules/docker_toolchains.bzl
+++ b/container/rules/docker_toolchains.bzl
@@ -76,7 +76,7 @@
   symlinks = {}
   # TODO(ngiraldo): we rewrite env and symlinks if there are conficts,
   # warn the user of conflicts or error out.
-  for layer in ctx.attr.layers:
+  for layer in ctx.attr.language_layers:
     debs.extend(layer.debs)
     tars.extend(layer.tars)
     files.extend(layer.input_files)
@@ -92,7 +92,7 @@
 
 toolchain_container_ = rule(
     attrs = _container.image.attrs + {
-        "layers": attr.label_list(),
+        "language_layers": attr.label_list(),
     },
     executable = True,
     outputs = _container.image.outputs,
diff --git a/container/test/BUILD b/container/test/BUILD
new file mode 100644
index 0000000..263db40
--- /dev/null
+++ b/container/test/BUILD
@@ -0,0 +1,19 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+licenses(["notice"])  # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(glob(["**"]))
diff --git a/container/debian8-clang-fully-loaded/test.yaml b/container/test/rbe-debian8.yaml
similarity index 82%
rename from container/debian8-clang-fully-loaded/test.yaml
rename to container/test/rbe-debian8.yaml
index 6f8ee0c..7a34884 100644
--- a/container/debian8-clang-fully-loaded/test.yaml
+++ b/container/test/rbe-debian8.yaml
@@ -1,9 +1,21 @@
 schemaVersion: "1.0.0"
 
 commandTests:
-- name: 'path'
+- name: 'path-envvar'
   command: ['sh', '-c', 'echo $PATH']
-  expectedOutput: ['/usr/local/go/bin:/opt/python3.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin']
+  expectedOutput: ['/opt/python3.6/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin']
+- name: 'cc-envvar'
+  command: ['sh', '-c', 'echo $CC']
+  expectedOutput: ['/usr/local/bin/clang']
+- name: 'javahome-envvar'
+  command: ['sh', '-c', 'echo $JAVA_HOME']
+  expectedOutput: ['/usr/lib/jvm/java-8-openjdk-amd64']
+- name: 'gopath-envvar'
+  command: ['sh', '-c', 'echo $GOPATH']
+  expectedOutput: ['/go']
+- name: 'python3-version'
+  command: ['python3', '-V']
+  expectedOutput: ['Python 3.6.2']
 
 fileExistenceTests:
 - name: 'Root'