jiebi/CodeConvo huggingface dataset:
Change:
It fails with The change seems to have been introduced in - Redirects error messages to stderr so users can see them. /cc
Sorry about that. Fix sent.

Discussion:
# gcutil will print the "external-ip" column header even if no instances are found local minion_ip=$(gcutil listinstances --format=csv --sort=external-ip  --columns=external-ip --zone ${ZONE} --filter="name eq ${MINION_NAMES[$i]}"  <del> | tail --lines=+2 | tail -n 1) </del> <ins> | tail -n '+2' | tail -n 1) </ins> if [ -z "$minion_ip" ] ; then echo "Did not find ${MINION_NAMES[$i]}" 1>&2 else

# gcutil will print the "external-ip" column header even if no instances are found KUBE_MASTER_IP=$(gcutil listinstances --format=csv --sort=external-ip  --columns=external-ip --zone ${ZONE} --filter="name eq ${MASTER_NAME}"  <del> | tail --lines=+2 | tail -n 1) </del> <ins> | tail -n '+2' | tail -n 1) </ins> fi if [ -z "$KUBE_MASTER_IP" ]; then echo "Could not detect Kubernetes master node.  Make sure you've launched a cluster with 'kube-up.sh'" 1>&2
Change:
$ run thockin/hostnametcp 1 hostname-tcp E1002 14:48:23. ] Container port is not integer: strconv.ParseInt: parsing "": invalid syntax

Discussion:
} func portsFromString(spec string) []api.Port { <ins> if spec == "" { return []api.Port{} } </ins> parts := strings.Split(spec, ",") var result []api.Port for _, part := range parts {

{HostPort: 443, ContainerPort: 444}, }, }, <ins> { "", []api.Port{}, }, </ins> } for _, tt := range testCases { ports := portsFromString(tt.spec)
Change:
E1003 10:53:11. ] Could not read directory: , (open : no such file or directory) This happens many times

Discussion:
"io/ioutil" "net/http" "net/http/httptest" <ins> "os" </ins> "reflect" "runtime" "sync"

"github.com/golang/glog" ) <ins> const testRootDir = "/tmp/kubelet" </ins> var ( fakeDocker1, fakeDocker2 dockertools.FakeDockerClient )

controllerManager.Run(10 * time.Minute) // Kubelet (localhost) <ins> os.MkdirAll(testRootDir, 0750) </ins> cfg1 := config.NewPodConfig(config.PodConfigNotificationSnapshotAndUpdates) config.NewSourceEtcd(config.EtcdKeyForHost(machineList[0]), etcdClient, cfg1.Channel("etcd")) config.NewSourceURL(manifestURL, 5*time.Second, cfg1.Channel("url")) <del> myKubelet := kubelet.NewIntegrationTestKubelet(machineList[0], &fakeDocker1) </del> <ins> myKubelet := kubelet.NewIntegrationTestKubelet(machineList[0], testRootDir, &fakeDocker1) </ins> go util.Forever(func() { myKubelet.Run(cfg1.Updates()) }, 0) go util.Forever(func() { kubelet.ListenAndServeKubeletServer(myKubelet, cfg1.Channel("http"), "localhost", 10250)

// have a place they can schedule. cfg2 := config.NewPodConfig(config.PodConfigNotificationSnapshotAndUpdates) config.NewSourceEtcd(config.EtcdKeyForHost(machineList[1]), etcdClient, cfg2.Channel("etcd")) <del> otherKubelet := kubelet.NewIntegrationTestKubelet(machineList[1], &fakeDocker2) </del> <ins> otherKubelet := kubelet.NewIntegrationTestKubelet(machineList[1], testRootDir, &fakeDocker2) </ins> go util.Forever(func() { otherKubelet.Run(cfg2.Updates()) }, 0) go util.Forever(func() { kubelet.ListenAndServeKubeletServer(otherKubelet, cfg2.Channel("http"), "localhost", 10251)

// NewIntegrationTestKubelet creates a new Kubelet for use in integration tests. // TODO: add more integration tests, and expand parameter list as needed. <del> func NewIntegrationTestKubelet(hn string, dc dockertools.DockerInterface) *Kubelet { </del> <ins> func NewIntegrationTestKubelet(hn string, rd string, dc dockertools.DockerInterface) *Kubelet { </ins> return &Kubelet{ hostname:              hn, dockerClient:          dc, <ins> rootDirectory:         rd, </ins> dockerPuller:          &dockertools.FakeDockerPuller{}, networkContainerImage: NetworkContainerImage, resyncInterval:        3 * time.Second,
Change:
Several times over the past few months I've run into HEAD throwing compilation errors when doing , which may not prevent proper functioning of kubernetes but makes some commands during development like very hard to do. It would be great if we could add to Travis CI to prevent this from happening.
See for discussion.
Fix is merged.
This should be re-opened. Travis still doesn't build all packages with or so HEAD still breaks. See for rationale.
Do you mind reopening for now?
Sure. the fix that was merged was for the specific problem, but this bug is about the general class of problems.

Discussion:
- ./hack/verify-description.sh - ./hack/travis/install-std-race.sh - ./hack/build-go.sh <ins> - GOPATH=$PWD/Godeps/_workspace:$GOPATH go install ./... </ins> script: - KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 ./hack/test-go.sh -- -p=2
Change:
https://travis- Setting as P0 since scheduling pods is pretty basic...
Looks like it's the "podBackoff" thing. IMO exponential backoff makes little sense for this; there's either pods that permanently won't schedule, or there's pods having some temporary problem. The former we should give up on and the latter we should retry at some fixed interval.
Actually it's not that because there's no error messages. Hm...
I think fixed this for the moment. But looking at the Travis logs the problem isn't slowness, it's a race-- the pods show up immediately after the 10 second timeout. Probably something is caching something and not updating for 10 seconds.
Actually, not fixed yet: https://travis-
Just extending timeouts isn't sufficient to fix this, or should have worked.
Could this be the problem "fixed" by
I'm betting it was actually fixed by: That's definitely a race/flake inducing bug. (but I'm not 100% positive) --brendan , bgrant0607 wrote:
Closing this as I think we found the cause, and we haven't seen it in a while.

Discussion:
glog.Infof("Done creating replication controllers") // Give the controllers some time to actually create the pods <del> if err := wait.Poll(time.Second, time.Second*10, c.ControllerHasDesiredReplicas(controllerRequest)); err != nil { </del> <ins> if err := wait.Poll(time.Second, time.Second*30, c.ControllerHasDesiredReplicas(controllerRequest)); err != nil { </ins> glog.Fatalf("FAILED: pods never created %v", err) }

if err != nil { glog.Fatalf("FAILED: unable to get pods to list: %v", err) } <del> if err := wait.Poll(time.Second, time.Second*10, podsOnMinions(c, *pods)); err != nil { </del> <ins> if err := wait.Poll(time.Second, time.Second*30, podsOnMinions(c, *pods)); err != nil { </ins> glog.Fatalf("FAILED: pods never started running %v", err) }
Change:
Given the following configuration: No volume will be mounted inside the resulting container: If I modify the volumes element to look like this: I get a volume mounted on /srv: I see the same behavior using either or .
I suspect I broke this default behavior. Hopefully someone else can provide a fix? I'll fix if it's still pending in a day or two. (In the middle of other things)
I will look into this.

Discussion:
for i := range volumes { vol := &volumes[i] // so we can set default values el := errs.ErrorList{} <del> // TODO(thockin) enforce that a source is set once we deprecate the implied form. if vol.Source != nil { el = validateSource(vol.Source).Prefix("source") </del> <ins> if vol.Source == nil { // TODO: Enforce that a source is set once we deprecate the implied form. vol.Source = &api.VolumeSource{ EmptyDir: &api.EmptyDir{}, } </ins> } <ins> el = validateSource(vol.Source).Prefix("source") </ins> if len(vol.Name) == 0 { el = append(el, errs.NewFieldRequired("name", vol.Name)) } else if !util.IsDNSLabel(vol.Name) {

for k, v := range errorCases { _, errs := validateVolumes(v.V) if len(errs) == 0 { <del> t.Errorf("expected failure for %s", k) </del> <ins> t.Errorf("expected failure %s for %v", k, v.V) </ins> continue } for i := range errs {
Change:
The podInfo call has no way to accept namespace, which means the apiserver can't fetch pod info. Probably need to make namespace a required path parameter.
this is probably you :)
- is this something you see when working off ??
- ok so this is pod_cache, will review
If you don't time, I can pick up this one.
I got it.
Per discussion with , will deliver a pull after is merged.

Discussion:
s[i], s[j] = s[j], s[i] } func (s sortedPods) Less(i, j int) bool { <del> return s[i].ID < s[j].ID </del> <ins> return s[i].ID < s[j].ID && s[i].Namespace < s[j].Namespace </ins> } func CreateValidPod(name, namespace, source string) api.BoundPod {

} podID := u.Query().Get("podID") podUUID := u.Query().Get("UUID") <ins> podNamespace := u.Query().Get("podNamespace") </ins> if len(podID) == 0 { w.WriteHeader(http.StatusBadRequest) http.Error(w, "Missing 'podID=' query entry.", http.StatusBadRequest) return } <ins> if len(podNamespace) == 0 { w.WriteHeader(http.StatusBadRequest) http.Error(w, "Missing 'podNamespace=' query entry.", http.StatusBadRequest) return } </ins> // TODO: backwards compatibility with existing API, needs API change podFullName := GetPodFullName(&api.BoundPod{ TypeMeta: api.TypeMeta{ <del> ID: podID, // TODO: I am broken Namespace:   api.NamespaceDefault, </del> <ins> ID:          podID, Namespace:   podNamespace, </ins> Annotations: map[string]string{ConfigSourceAnnotationKey: "etcd"}, }, })

} return nil, fmt.Errorf("bad pod %s", name) } <del> resp, err := http.Get(fw.testHTTPServer.URL + "/podInfo?podID=goodpod") </del> <ins> resp, err := http.Get(fw.testHTTPServer.URL + "/podInfo?podID=goodpod&podNamespace=default") </ins> if err != nil { t.Errorf("Got error GETing: %v", err) }
Change:
When I change branches, I really want the prior build invalidated. Could we consider the git branch (if this is a git repo) in the short_hash that uniquifies the build?
There are no sig labels on this issue. Please by:<br(1) mentioning a sig: <br(2) specifying the label manually: <br<brNote: method (1) will trigger a notification to the team. You can find the team list .
/sig testing ?
/remove-sig testing
/sig release (on the presumption that build lands there)

Discussion:
fi fi <del> KUBE_ROOT_HASH=$(kube::build::short_hash "${HOSTNAME:-}:${KUBE_ROOT}") </del> <ins> KUBE_GIT_BRANCH=$(git symbolic-ref --short -q HEAD 2>/dev/null || true) KUBE_ROOT_HASH=$(kube::build::short_hash "${HOSTNAME:-}:${KUBE_ROOT}:${KUBE_GIT_BRANCH}") </ins> KUBE_BUILD_IMAGE_TAG_BASE="build-${KUBE_ROOT_HASH}" KUBE_BUILD_IMAGE_TAG="${KUBE_BUILD_IMAGE_TAG_BASE}-${KUBE_BUILD_IMAGE_VERSION}" KUBE_BUILD_IMAGE="${KUBE_BUILD_IMAGE_REPO}:${KUBE_BUILD_IMAGE_TAG}"
Change:
-r is deprecated in favor of per-container restart policies, which we do not use (yet?). We need a plan to stop setting the -r flag, which will break backwards compat with 1.2
How many back-versions of docker do we want to be compatible with? Current + 2 sounds reasonable to me.
Now that docker 1.3 is our baseline, we should remove this from our configs.
Is this still an issue?
Nope.
We still have -r in our salt template for docker. Fix is in flight.

Discussion:
{% if grains.docker_opts is defined and grains.docker_opts %} DOCKER_OPTS="${DOCKER_OPTS} {{grains.docker_opts}}" {% endif %} <del> DOCKER_OPTS="${DOCKER_OPTS} --bridge cbr0 --iptables=false --ip-masq=false -r=false" </del> <ins> DOCKER_OPTS="${DOCKER_OPTS} --bridge cbr0 --iptables=false --ip-masq=false" </ins> DOCKER_NOFILE=1000000
Change:
We need to version-lock to docker 1.2 until they fix this flag, or else we need to drop 1.2 support, or else we need to detect the docker version before writing the flags file. - we need something here ASAP.
After a little bit thinking, I think we shouldn't have the problem. kube-push only updates our own binaries, not docker's. kube-up builds a new cluster which will pull the latest docker, but we can change docker's defaults, so that at the minion's provision stage, we disable both --iptables and --ip-masq.
Something like for gce.

Discussion:
<del> DOCKER_OPTS="--bridge cbr0 --iptables=false -r=false" </del> <ins> DOCKER_OPTS="--bridge cbr0 --iptables=false --ip-masq=false -r=false" </ins>

ovs-vsctl set Bridge ${OVS_SWITCH} stp_enable=true # modify the docker service file such that it uses the kube docker bridge and not its own <del> sed -ie "s/ExecStart=/usr/bin/docker -d/ExecStart=/usr/bin/docker -d -b=${DOCKER_BRIDGE} --iptables=false/g" /usr/lib/systemd/system/docker.service </del> <ins> sed -ie "s/ExecStart=/usr/bin/docker -d/ExecStart=/usr/bin/docker -d -b=${DOCKER_BRIDGE} --iptables=false --ip-masq=false/g" /usr/lib/systemd/system/docker.service </ins> systemctl daemon-reload systemctl restart docker.service
Change:
e.g. REST.Update should never return an arbitrary error value. Maybe we should change the return code to something stricter than generic error.
/cc
FYI: is for remaining cases where the API doesn't return JSON/Status errors.
Re-opening this until we
I think etcd errors require more abstraction, also:
There are some admission control plugins that did not always follow that practice which I will resolve as part of
Are there any known instances of this remaining?
None that I know of.

Discussion:
"strings" "github.com/GoogleCloudPlatform/kubernetes/pkg/api" <ins> "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" </ins> "github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta" "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"

} // errEmptyName is returned when API requests do not fill the name section of the path. <del> var errEmptyName = fmt.Errorf("name must be provided") </del> <ins> var errEmptyName = errors.NewBadRequest("name must be provided") </ins> // Installs handlers for API resources. func (a *APIInstaller) Install() (ws *restful.WebService, errors []error) {

w := res.ResponseWriter namespace, name, err := namer.Name(req) if err != nil { <del> notFound(w, req.Request) </del> <ins> errorJSON(err, codec, w) </ins> return } ctx := ctxFn(req)

namespace, err := namer.Namespace(req) if err != nil { <del> notFound(w, req.Request) </del> <ins> errorJSON(err, codec, w) </ins> return } ctx := ctxFn(req)

namespace, name, err := namer.Name(req) if err != nil { <del> notFound(w, req.Request) </del> <ins> errorJSON(err, codec, w) </ins> return }

namespace, name, err := namer.Name(req) if err != nil { <del> notFound(w, req.Request) </del> <ins> errorJSON(err, codec, w) </ins> return } ctx := ctxFn(req)
Change:
building release, hopefully it's just binary missing; but i expect e2e-test to build binary automatically.
Steps to reproduce? /cc
Just run hack/e2e-, will fail. The _output/go/bin directory only has integration binary. (tried run first, still fails).
Did you try hack/build- first? e2e is in the default target list:
It's also in the client target list in the new build infrastructure:
Ah, I think that will do the trick. I didn't run hack/build-, as I saw e2e- output something like this (A little misleading if it won't build the binary). Re-running test now, will close the issue if it works. But it would be great if the binary will be built automatically.
I agree it should be built automatically. Otherwise, we'd at least have to update our e2e documentation.
Ah, yeah, I ran into this too and haven't fixed it yet. I this cmd/e2e to the build system, where does it end up? Apparently not in _output...

Discussion:
} if *build { <del> if !runBash("build", `test-build-release`) { </del> <ins> if !run("build-local", "hack/build-go.sh") { log.Fatal("Error building. Aborting.") } if !runBash("build-release", `test-build-release`) { </ins> log.Fatal("Error building. Aborting.") } }

// All nonsense below is temporary until we have go versions of these things. func runBash(stepName, bashFragment string) bool { <del> log.Printf("Running: %v", stepName) </del> cmd := exec.Command("bash", "-s") cmd.Stdin = strings.NewReader(bashWrap(bashFragment)) <ins> return finishRunning(stepName, cmd) } func run(stepName, cmdPath string) bool { return finishRunning(stepName, exec.Command(filepath.Join(*root, cmdPath))) } func finishRunning(stepName string, cmd *exec.Cmd) bool { log.Printf("Running: %v", stepName) </ins> stdout, stderr := bytes.NewBuffer(nil), bytes.NewBuffer(nil) if *verbose { cmd.Stdout = os.Stdout
Change:
~L60 does a shallow copy, and ends up aliasing slices.
Is this bug still valid?
yes, but now it in L78: This is not a huge deal, but it is wrong. It should call
ok I'll fix it

Discussion:
defer r.mu.Unlock() r.Service = new(api.Service) <del> *r.Service = *svc </del> <ins> clone, err := api.Scheme.DeepCopy(svc) if err != nil { return nil, err } r.Service = clone.(*api.Service) </ins> r.List.Items = append(r.List.Items, *svc) return svc, r.Err }
Change:
Intermittent failures on Travis.
Hrm, this passes 100/100 locally for me. I'll look at the code and see if I see anything. --brendan

Discussion:
} func TestCreate(t *testing.T) { <del> simpleStorage := &SimpleRESTStorage{} </del> <ins> wait := sync.WaitGroup{} wait.Add(1) simpleStorage := &SimpleRESTStorage{ injectedFunction: func(obj runtime.Object) (returnObj runtime.Object, err error) { wait.Wait() return &Simple{}, nil }, } </ins> handler := Handle(map[string]RESTStorage{ "foo": simpleStorage, }, codec, "/prefix/version", selfLinker)

if itemOut.Status != api.StatusWorking || itemOut.Details == nil || itemOut.Details.ID == "" { t.Errorf("Unexpected status: %#v (%s)", itemOut, string(body)) } <ins> wait.Done() </ins> } func TestCreateNotFound(t *testing.T) {
Change:
While developing a test, I POSTed and incorrect /events and got a 500. Should have been some other error code, I think? Action: POST to /api/v1beta1/events with body: Response was 500 with this "kind":"Status","creationTimestamp":null,"apiVersion":"v1beta1","status":"Failure","message":"couldn't get version/kind: YAML error: line 12: did not find expected ',' or '}'","code":500} Note there is one missing close brace. Error message in body is quite helpful. But should the error code be 400 or
/cc

Discussion:
} func parseSelectorQueryParams(query url.Values, version, apiResource string) (label, field labels.Selector, err error) { <del> label, err = labels.Parse(query.Get("labels")) </del> <ins> labelString := query.Get("labels") label, err = labels.Parse(labelString) </ins> if err != nil { <del> return nil, nil, err </del> <ins> return nil, nil, errors.NewBadRequest(fmt.Sprintf("The 'labels' selector parameter (%s) could not be parsed: %v", labelString, err)) </ins> } convertToInternalVersionFunc := func(label, value string) (newLabel, newValue string, err error) { return api.Scheme.ConvertFieldLabel(version, apiResource, label, value) } <del> field, err = labels.ParseAndTransformSelector(query.Get("fields"), convertToInternalVersionFunc) </del> <ins> fieldString := query.Get("fields") field, err = labels.ParseAndTransformSelector(fieldString, convertToInternalVersionFunc) </ins> if err != nil { <del> return nil, nil, err </del> <ins> return nil, nil, errors.NewBadRequest(fmt.Sprintf("The 'fields' selector parameter (%s) could not be parsed: %v", fieldString, err)) </ins> } return label, field, nil }
Change:
I'm not using publicaddressoverride. At boot I'm trying to launch using: /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcdservers=http://10.13.137.165:4001 --address=0.0.0.0 --port=8080 --kubeletport= --allowprivileged=true --portalnet=10.254.0.0/16 But this gets launched before eth0 has an ip address. This used to work. Now apiserver just refused to start (complaining about 127.0.0.1 being invalid). I think it needs to just keep trying until it gets an address and can get to work....
Adding --publicaddressoverride= as suggested doesn't help.... Nov 05 12:43:55 localhost kube-apiserver[713]: F1105 12:43:55. ] listen tcp 10.13.137.165:7080: bind: cannot assign requested address Which is a fatal error. I can't bind to it. It isn't up yet.
Bisect says either commit or
If publicaddressoverride is specified, I can put the read-only server bind in a goroutine and retry periodically. If it's not, though, since we can't change the public address once started, we'd have to delay construction until a suitable address shows up. That's pretty ugly; is it an important case to support?
I personally think delaying construction is fine. Being able to launch the apiserver on any node from the init system and have it just work 99% of the time seems like a good thing....
OK. Fix coming in 3, 2, 1...
See if does the trick for you.
commented there. it fixed it.

Discussion:
} go func() { defer util.HandleCrash() <del> glog.Fatal(readOnlyServer.ListenAndServe()) </del> <ins> for { if err := readOnlyServer.ListenAndServe(); err != nil { glog.Errorf("Unable to listen for read only traffic (%v); will try again.", err) } time.Sleep(15 * time.Second) } </ins> }() }

if c.ReadWritePort == 0 { c.ReadWritePort = 443 } <del> if c.PublicAddress == "" { </del> <ins> for c.PublicAddress == "" { </ins> // Find and use the first non-loopback address. // TODO: potentially it'd be useful to skip the docker interface if it // somehow is first in the list.

break } if !found { <del> glog.Fatalf("Unable to find suitible network address in list: %v", addrs) </del> <ins> glog.Errorf("Unable to find suitible network address in list: '%v'n"+ "Will try again in 5 seconds. Set the public address directly to avoid this wait.", addrs) time.Sleep(5 * time.Second) </ins> } } }
Change:
Twice in the last two weeks I have dealt with "bugs" which turned out to be due to the fact that the fundamental requirements of pod networking were not being met. We need a way for a user to very quickly verify that the basic assumptions are met: pods can talk to pods, master can talk to pods, pods can talk to master, services work, etc.
Sounds like something that should have a dual life as an e2e test.
Yes, I ran into the similar issues when I tried to have containervm image as the default one. It turns out just some simple network configuration issues.
Service and replication controller that creates two pods, where the pod takes the kube service as an argument and tries to connect to the other pods described by endpoints?
Yeah that's sorta what I was thinking, too.
After gets merged, I think the easiest path to finishing this off is to just parameterize so that it's easy to point it at an existing cluster and run only the network test.
This is fixed by
Not completely fixed yet; need simple way to run it on existing cluster.
Remaining action item: Write a go script (bash if you must) that runs the networking test from against an existing cluster. Something that you can run via "go run" would be great, or adding flags to such that you can run it with something like "_output/go/bin/e2e -test=network" would be great too.
Reopening. Along the way in , we're moving the e2e script. But I also noticed this is relying on test assets. If you're trying to ship something to users, isn't something we ship to users.
Running will work after . We might end up renaming the test as part of the Ginkgo migration, in which case we can update this issue to indicate the correct invocation.
Closing this as is merged.

Discussion:
<ins> #!/bin/bash # Copyright 2014 Google Inc. 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. set -o errexit set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. source "${KUBE_ROOT}/cluster/kube-env.sh" source "${KUBE_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh" ${KUBE_ROOT}/hack/e2e-suite/goe2e.sh -tTestNetwork </ins>

"${e2e}" "${auth_config[@]:+${auth_config[@]}}"  --host="https://${KUBE_MASTER_IP-}"  --provider="${KUBERNETES_PROVIDER}"  <del> ${E2E_REPORT_DIR+"--report_dir=${E2E_REPORT_DIR}"} </del> <ins> ${E2E_REPORT_DIR+"--report_dir=${E2E_REPORT_DIR}"}  "${@}" </ins>