From 3204572f01b93f87c34f5235d199ecfb2c25f011 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Tue, 28 Jun 2022 19:04:30 +0200 Subject: [PATCH 1/2] replace echoserver image with agnhost agnhost contains the same features than echoserver. --- test/e2e/framework/ingress/ingress_utils.go | 9 ++++++++- test/e2e/network/scale/ingress.go | 9 +++++++-- .../testing-manifests/ingress/gce/static-ip-2/rc.yaml | 8 +++++++- test/e2e/testing-manifests/ingress/http/rc.yaml | 6 +++++- test/e2e/testing-manifests/ingress/http2/rc.yaml | 8 +++++++- .../e2e/testing-manifests/ingress/multiple-certs/rc.yaml | 8 +++++++- .../testing-manifests/ingress/pre-shared-cert/rc.yaml | 8 +++++++- test/e2e/testing-manifests/ingress/static-ip/rc.yaml | 8 +++++++- 8 files changed, 55 insertions(+), 9 deletions(-) diff --git a/test/e2e/framework/ingress/ingress_utils.go b/test/e2e/framework/ingress/ingress_utils.go index 05af74bd93e..fac47be4093 100644 --- a/test/e2e/framework/ingress/ingress_utils.go +++ b/test/e2e/framework/ingress/ingress_utils.go @@ -1104,8 +1104,15 @@ func generateBacksideHTTPSServiceSpec() *v1.Service { func generateBacksideHTTPSDeploymentSpec() *appsv1.Deployment { labels := map[string]string{"app": "echoheaders-https"} - d := e2edeployment.NewDeployment("echoheaders-https", 0, labels, "echoheaders-https", imageutils.GetE2EImage(imageutils.EchoServer), appsv1.RollingUpdateDeploymentStrategyType) + d := e2edeployment.NewDeployment("echoheaders-https", 0, labels, "echoheaders-https", imageutils.GetE2EImage(imageutils.Agnhost), appsv1.RollingUpdateDeploymentStrategyType) d.Spec.Replicas = nil + d.Spec.Template.Spec.Containers[0].Command = []string{ + "/agnhost", + "netexec", + "--http-port=8443", + "--tls-cert-file=/localhost.crt", + "--tls-private-key-file=/localhost.key", + } d.Spec.Template.Spec.Containers[0].Ports = []v1.ContainerPort{{ ContainerPort: 8443, Name: "echo-443", diff --git a/test/e2e/network/scale/ingress.go b/test/e2e/network/scale/ingress.go index 56d03977717..7dd16bea8d6 100644 --- a/test/e2e/network/scale/ingress.go +++ b/test/e2e/network/scale/ingress.go @@ -29,12 +29,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" clientset "k8s.io/client-go/kubernetes" - imageutils "k8s.io/kubernetes/test/utils/image" "k8s.io/kubernetes/test/e2e/framework" e2edeployment "k8s.io/kubernetes/test/e2e/framework/deployment" e2eingress "k8s.io/kubernetes/test/e2e/framework/ingress" "k8s.io/kubernetes/test/e2e/framework/providers/gce" + imageutils "k8s.io/kubernetes/test/utils/image" ) const ( @@ -448,7 +448,12 @@ func generateScaleTestServiceSpec(suffix string) *v1.Service { func generateScaleTestBackendDeploymentSpec(numReplicas int32) *appsv1.Deployment { d := e2edeployment.NewDeployment( scaleTestBackendName, numReplicas, scaleTestLabels, scaleTestBackendName, - imageutils.GetE2EImage(imageutils.EchoServer), appsv1.RollingUpdateDeploymentStrategyType) + imageutils.GetE2EImage(imageutils.Agnhost), appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Template.Spec.Containers[0].Command = []string{ + "/agnhost", + "netexec", + "--http-port=8080", + } d.Spec.Template.Spec.Containers[0].Ports = []v1.ContainerPort{{ContainerPort: 8080}} d.Spec.Template.Spec.Containers[0].ReadinessProbe = &v1.Probe{ ProbeHandler: v1.ProbeHandler{ diff --git a/test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml b/test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml index 90464c1e7b7..6644f50c3f9 100644 --- a/test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml +++ b/test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml @@ -11,6 +11,12 @@ spec: spec: containers: - name: echoheaders-https - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8080 + - --tls-cert-file=/localhost.crt + - --tls-private-key-file=/localhost.key ports: - containerPort: 8080 diff --git a/test/e2e/testing-manifests/ingress/http/rc.yaml b/test/e2e/testing-manifests/ingress/http/rc.yaml index ed66c01e182..8fa9505c9fa 100644 --- a/test/e2e/testing-manifests/ingress/http/rc.yaml +++ b/test/e2e/testing-manifests/ingress/http/rc.yaml @@ -11,7 +11,11 @@ spec: spec: containers: - name: echoheaders - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8080 ports: - containerPort: 8080 readinessProbe: diff --git a/test/e2e/testing-manifests/ingress/http2/rc.yaml b/test/e2e/testing-manifests/ingress/http2/rc.yaml index 79651c07718..83c92c21ed4 100644 --- a/test/e2e/testing-manifests/ingress/http2/rc.yaml +++ b/test/e2e/testing-manifests/ingress/http2/rc.yaml @@ -14,6 +14,12 @@ spec: spec: containers: - name: echoheaders - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8443 + - --tls-cert-file=/localhost.crt + - --tls-private-key-file=/localhost.key ports: - containerPort: 8443 diff --git a/test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml b/test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml index 90464c1e7b7..6644f50c3f9 100644 --- a/test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml +++ b/test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml @@ -11,6 +11,12 @@ spec: spec: containers: - name: echoheaders-https - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8080 + - --tls-cert-file=/localhost.crt + - --tls-private-key-file=/localhost.key ports: - containerPort: 8080 diff --git a/test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml b/test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml index 90464c1e7b7..6644f50c3f9 100644 --- a/test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml +++ b/test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml @@ -11,6 +11,12 @@ spec: spec: containers: - name: echoheaders-https - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8080 + - --tls-cert-file=/localhost.crt + - --tls-private-key-file=/localhost.key ports: - containerPort: 8080 diff --git a/test/e2e/testing-manifests/ingress/static-ip/rc.yaml b/test/e2e/testing-manifests/ingress/static-ip/rc.yaml index 90464c1e7b7..6644f50c3f9 100644 --- a/test/e2e/testing-manifests/ingress/static-ip/rc.yaml +++ b/test/e2e/testing-manifests/ingress/static-ip/rc.yaml @@ -11,6 +11,12 @@ spec: spec: containers: - name: echoheaders-https - image: registry.k8s.io/e2e-test-images/echoserver:2.3 + image: registry.k8s.io/e2e-test-images/agnhost:2.39 + command: + - /agnhost + - netexec + - --http-port=8080 + - --tls-cert-file=/localhost.crt + - --tls-private-key-file=/localhost.key ports: - containerPort: 8080 From 092f7f601e60dcbc763f6b80d224bcf20013670e Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Tue, 28 Jun 2022 19:09:57 +0200 Subject: [PATCH 2/2] remove echoserver image --- test/images/echoserver/BASEIMAGE | 8 - test/images/echoserver/Dockerfile | 29 -- test/images/echoserver/Dockerfile_windows | 42 -- test/images/echoserver/OWNERS | 2 - test/images/echoserver/README.md | 11 - test/images/echoserver/VERSION | 1 - test/images/echoserver/install-deps.sh | 26 -- test/images/echoserver/nginx.conf | 105 ----- test/images/echoserver/run.sh | 35 -- test/images/echoserver/template.lua | 509 ---------------------- test/images/image-util.sh | 2 +- test/utils/image/manifest.go | 3 - 12 files changed, 1 insertion(+), 772 deletions(-) delete mode 100644 test/images/echoserver/BASEIMAGE delete mode 100644 test/images/echoserver/Dockerfile delete mode 100644 test/images/echoserver/Dockerfile_windows delete mode 100644 test/images/echoserver/OWNERS delete mode 100644 test/images/echoserver/README.md delete mode 100644 test/images/echoserver/VERSION delete mode 100755 test/images/echoserver/install-deps.sh delete mode 100644 test/images/echoserver/nginx.conf delete mode 100644 test/images/echoserver/run.sh delete mode 100644 test/images/echoserver/template.lua diff --git a/test/images/echoserver/BASEIMAGE b/test/images/echoserver/BASEIMAGE deleted file mode 100644 index 30938a40d25..00000000000 --- a/test/images/echoserver/BASEIMAGE +++ /dev/null @@ -1,8 +0,0 @@ -linux/amd64=nginx:1.15-alpine -linux/arm=arm32v6/nginx:1.15-alpine -linux/arm64=arm64v8/nginx:1.15-alpine -linux/ppc64le=ppc64le/nginx:1.15-alpine -linux/s390x=s390x/nginx:1.15-alpine -windows/amd64/1809=REGISTRY/busybox:1.29-2-windows-amd64-1809 -windows/amd64/20H2=REGISTRY/busybox:1.29-2-windows-amd64-20H2 -windows/amd64/ltsc2022=REGISTRY/busybox:1.29-2-windows-amd64-ltsc2022 diff --git a/test/images/echoserver/Dockerfile b/test/images/echoserver/Dockerfile deleted file mode 100644 index 9528c544236..00000000000 --- a/test/images/echoserver/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2017 The Kubernetes Authors. -# -# 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. - -ARG BASEIMAGE -FROM $BASEIMAGE - -CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/ - -COPY install-deps.sh / -RUN ["sh", "-c", "/install-deps.sh"] -RUN mkdir -p /run/nginx - -ADD nginx.conf /etc/nginx/nginx.conf -ADD template.lua /usr/local/share/lua/5.1/ -ADD README.md README.md -ADD run.sh /usr/local/bin/run.sh -RUN chmod +x /usr/local/bin/run.sh -ENTRYPOINT ["/usr/local/bin/run.sh"] diff --git a/test/images/echoserver/Dockerfile_windows b/test/images/echoserver/Dockerfile_windows deleted file mode 100644 index 708a59ce6a9..00000000000 --- a/test/images/echoserver/Dockerfile_windows +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2020 The Kubernetes Authors. -# -# 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. - -ARG BASEIMAGE -ARG REGISTRY - -# We're using a Linux image to unpack the archive, then we're copying it over to Windows. -FROM --platform=linux/amd64 alpine:3.6 as prep - -ADD https://openresty.org/download/openresty-1.13.6.2-win64.zip /openresty-win64.zip -ADD http://wiki.overbyte.eu/arch/openssl-1.1.1i-win64.zip /openssl.zip -RUN mkdir /openresty &&\ - unzip /openresty-win64.zip -d /openresty &&\ - mkdir /openssl &&\ - unzip /openssl.zip -d /openssl - -FROM $BASEIMAGE - -COPY --from=prep /openresty/openresty-1.13.6.2-win64 /openresty -COPY --from=prep /openssl /openssl - -ADD ["https://raw.githubusercontent.com/openssl/openssl/OpenSSL_1_1_1i/apps/openssl.cnf", "/Program Files/Common Files/SSL/openssl.cnf"] - -ENV PATH="C:\openssl\;C:\openresty\;C:\bin\;C:\curl\;C:\Windows\system32;C:\Windows;C:\Program Files\PowerShell;" - -ADD run.sh /openresty/run.sh -ADD nginx.conf /openresty/conf/nginx.conf -ADD template.lua /openresty/lua/template.lua - -EXPOSE 80 443 8080 8443 -ENTRYPOINT ["/bin/sh", "-c", " cd /openresty && ./run.sh"] diff --git a/test/images/echoserver/OWNERS b/test/images/echoserver/OWNERS deleted file mode 100644 index dfd3632daa7..00000000000 --- a/test/images/echoserver/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -approvers: - - dims diff --git a/test/images/echoserver/README.md b/test/images/echoserver/README.md deleted file mode 100644 index 37d35585db8..00000000000 --- a/test/images/echoserver/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Echoserver - -This is a simple server that responds with the http headers it received. - -Image versions >= 2.5 support IPv6. -Image Versions >= 1.10 support HTTP2 on :8443. -Image Versions >= 1.9 expose HTTPS endpoint on :8443. -Image versions >= 1.4 removes the redirect introduced in 1.3. -Image versions >= 1.3 redirect requests on :80 with `X-Forwarded-Proto: http` to :443. -Image versions > 1.0 run an nginx server, and implement the echoserver using lua in the nginx config. -Image versions <= 1.0 run a python http server instead of nginx, and don't redirect any requests. diff --git a/test/images/echoserver/VERSION b/test/images/echoserver/VERSION deleted file mode 100644 index 95e3ba81920..00000000000 --- a/test/images/echoserver/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.5 diff --git a/test/images/echoserver/install-deps.sh b/test/images/echoserver/install-deps.sh deleted file mode 100755 index 75b51a3051a..00000000000 --- a/test/images/echoserver/install-deps.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -# Copyright 2020 The Kubernetes Authors. -# -# 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. - -ARCH=$(uname -m) - -if [ "${ARCH}" = "s390x" ]; then - echo "http://dl-cdn.alpinelinux.org/alpine/v3.8/main" > /etc/apk/repositories - echo "http://dl-cdn.alpinelinux.org/alpine/v3.8/community" >> /etc/apk/repositories -fi - -apk add --no-cache openssl nginx-mod-http-lua nginx-mod-http-lua-upstream - -exit 0 diff --git a/test/images/echoserver/nginx.conf b/test/images/echoserver/nginx.conf deleted file mode 100644 index d89721f148d..00000000000 --- a/test/images/echoserver/nginx.conf +++ /dev/null @@ -1,105 +0,0 @@ -load_module modules/ndk_http_module.so; -load_module modules/ngx_http_lua_module.so; -load_module modules/ngx_http_lua_upstream_module.so; - -events { - worker_connections 1024; -} - -env HOSTNAME; -env NODE_NAME; -env POD_NAME; -env POD_NAMESPACE; -env POD_IP; - -http { - default_type 'text/plain'; - # maximum allowed size of the client request body. By default this is 1m. - # Request with bigger bodies nginx will return error code 413. - # http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size - client_max_body_size 10m; - - init_by_lua_block { - local template = require("template") - -- template syntax documented here: - -- https://github.com/bungle/lua-resty-template/blob/master/README.md - tmpl = template.compile([[ - - -Hostname: {{os.getenv("HOSTNAME") or "N/A"}} - -Pod Information: -{% if os.getenv("POD_NAME") then %} - node name: {{os.getenv("NODE_NAME") or "N/A"}} - pod name: {{os.getenv("POD_NAME") or "N/A"}} - pod namespace: {{os.getenv("POD_NAMESPACE") or "N/A"}} - pod IP: {{os.getenv("POD_IP") or "N/A"}} -{% else %} - -no pod information available- -{% end %} - -Server values: - server_version=nginx: {{ngx.var.nginx_version}} - lua: {{ngx.config.ngx_lua_version}} - -Request Information: - client_address={{ngx.var.remote_addr}} - method={{ngx.req.get_method()}} - real path={{ngx.var.request_uri}} - query={{ngx.var.query_string or ""}} - request_version={{ngx.req.http_version()}} - request_scheme={{ngx.var.scheme}} - request_uri={{ngx.var.scheme.."://"..ngx.var.host..":"..ngx.var.server_port..ngx.var.request_uri}} - -Request Headers: -{% for i, key in ipairs(keys) do %} - {% local val = headers[key] %} - {% if type(val) == "table" then %} - {% for i = 1,#val do %} - {{key}}={{val[i]}} - {% end %} - {% else %} - {{key}}={{val}} - {% end %} -{% end %} - -Request Body: -{{ngx.var.request_body or " -no body in request-"}} -]]) - } - - server { - # please check the benefits of reuseport https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1 - # basically instructs to create an individual listening socket for each worker process (using the SO_REUSEPORT - # socket option), allowing a kernel to distribute incoming connections between worker processes. - listen 8080 default_server reuseport; - listen [::]:8080 default_server reuseport; - listen 8443 default_server ssl http2 reuseport; - listen [::]:8443 default_server ssl http2 reuseport; - - ssl_certificate /certs/certificate.crt; - ssl_certificate_key /certs/privateKey.key; - - # Replace '_' with your hostname. - server_name _; - - # set long keepalive_timeout because some loadbalancer proxies expect the connection - # to remain open for at least ten minutes. - keepalive_timeout 620s; - - location / { - lua_need_request_body on; - content_by_lua_block { - ngx.header["Server"] = "echoserver" - - local headers = ngx.req.get_headers() - local keys = {} - for key, val in pairs(headers) do - table.insert(keys, key) - end - table.sort(keys) - - ngx.say(tmpl({os=os, ngx=ngx, keys=keys, headers=headers})) - } - } - } -} diff --git a/test/images/echoserver/run.sh b/test/images/echoserver/run.sh deleted file mode 100644 index 1383b711f7b..00000000000 --- a/test/images/echoserver/run.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -# Copyright 2018 The Kubernetes Authors. -# -# 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. - -echo "Generating self-signed cert" -mkdir -p /certs -openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ --keyout /certs/privateKey.key \ --out /certs/certificate.crt \ --subj "/C=UK/ST=Warwickshire/L=Leamington/O=OrgName/OU=IT Department/CN=example.com" - -# If we're running on Windows, skip loading the Linux .so modules. -if [ "$(uname)" = "Windows_NT" ]; then - sed -i -E "s/^(load_module modules\/ndk_http_module.so;)$/#\1/" conf/nginx.conf - sed -i -E "s/^(load_module modules\/ngx_http_lua_module.so;)$/#\1/" conf/nginx.conf - sed -i -E "s/^(load_module modules\/ngx_http_lua_upstream_module.so;)$/#\1/" conf/nginx.conf - - # NOTE(claudiub): on Windows, nginx will take the paths in the nginx.conf file as relative paths. - cmd /S /C "mklink /D C:\\openresty\\certs C:\\certs" -fi - -echo "Starting nginx" -nginx -g "daemon off;" diff --git a/test/images/echoserver/template.lua b/test/images/echoserver/template.lua deleted file mode 100644 index cc80308a759..00000000000 --- a/test/images/echoserver/template.lua +++ /dev/null @@ -1,509 +0,0 @@ --- vendored from https://raw.githubusercontent.com/bungle/lua-resty-template/1f9a5c24fc7572dbf5be0b9f8168cc3984b03d24/lib/resty/template.lua --- only modification: remove / from HTML_ENTITIES to not escape it, and fix the appropriate regex. ---[[ -Copyright (c) 2014 - 2017 Aapo Talvensaari -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---]] - -local setmetatable = setmetatable -local loadstring = loadstring -local loadchunk -local tostring = tostring -local setfenv = setfenv -local require = require -local capture -local concat = table.concat -local assert = assert -local prefix -local write = io.write -local pcall = pcall -local phase -local open = io.open -local load = load -local type = type -local dump = string.dump -local find = string.find -local gsub = string.gsub -local byte = string.byte -local null -local sub = string.sub -local ngx = ngx -local jit = jit -local var - -local _VERSION = _VERSION -local _ENV = _ENV -local _G = _G - -local HTML_ENTITIES = { - ["&"] = "&", - ["<"] = "<", - [">"] = ">", - ['"'] = """, - ["'"] = "'", -} - -local CODE_ENTITIES = { - ["{"] = "{", - ["}"] = "}", - ["&"] = "&", - ["<"] = "<", - [">"] = ">", - ['"'] = """, - ["'"] = "'", - ["/"] = "/" -} - -local VAR_PHASES - -local ok, newtab = pcall(require, "table.new") -if not ok then newtab = function() return {} end end - -local caching = true -local template = newtab(0, 12) - -template._VERSION = "1.9" -template.cache = {} - -local function enabled(val) - if val == nil then return true end - return val == true or (val == "1" or val == "true" or val == "on") -end - -local function trim(s) - return gsub(gsub(s, "^%s+", ""), "%s+$", "") -end - -local function rpos(view, s) - while s > 0 do - local c = sub(view, s, s) - if c == " " or c == "\t" or c == "\0" or c == "\x0B" then - s = s - 1 - else - break - end - end - return s -end - -local function escaped(view, s) - if s > 1 and sub(view, s - 1, s - 1) == "\\" then - if s > 2 and sub(view, s - 2, s - 2) == "\\" then - return false, 1 - else - return true, 1 - end - end - return false, 0 -end - -local function readfile(path) - local file = open(path, "rb") - if not file then return nil end - local content = file:read "*a" - file:close() - return content -end - -local function loadlua(path) - return readfile(path) or path -end - -local function loadngx(path) - local vars = VAR_PHASES[phase()] - local file, location = path, vars and var.template_location - if sub(file, 1) == "/" then file = sub(file, 2) end - if location and location ~= "" then - if sub(location, -1) == "/" then location = sub(location, 1, -2) end - local res = capture(concat{ location, '/', file}) - if res.status == 200 then return res.body end - end - local root = vars and (var.template_root or var.document_root) or prefix - if sub(root, -1) == "/" then root = sub(root, 1, -2) end - return readfile(concat{ root, "/", file }) or path -end - -do - if ngx then - VAR_PHASES = { - set = true, - rewrite = true, - access = true, - content = true, - header_filter = true, - body_filter = true, - log = true - } - template.print = ngx.print or write - template.load = loadngx - prefix, var, capture, null, phase = ngx.config.prefix(), ngx.var, ngx.location.capture, ngx.null, ngx.get_phase - if VAR_PHASES[phase()] then - caching = enabled(var.template_cache) - end - else - template.print = write - template.load = loadlua - end - if _VERSION == "Lua 5.1" then - local context = { __index = function(t, k) - return t.context[k] or t.template[k] or _G[k] - end } - if jit then - loadchunk = function(view) - return assert(load(view, nil, nil, setmetatable({ template = template }, context))) - end - else - loadchunk = function(view) - local func = assert(loadstring(view)) - setfenv(func, setmetatable({ template = template }, context)) - return func - end - end - else - local context = { __index = function(t, k) - return t.context[k] or t.template[k] or _ENV[k] - end } - loadchunk = function(view) - return assert(load(view, nil, nil, setmetatable({ template = template }, context))) - end - end -end - -function template.caching(enable) - if enable ~= nil then caching = enable == true end - return caching -end - -function template.output(s) - if s == nil or s == null then return "" end - if type(s) == "function" then return template.output(s()) end - return tostring(s) -end - -function template.escape(s, c) - if type(s) == "string" then - if c then return gsub(s, "[}{\">/<'&]", CODE_ENTITIES) end - return gsub(s, "[\"><'&]", HTML_ENTITIES) - end - return template.output(s) -end - -function template.new(view, layout) - assert(view, "view was not provided for template.new(view, layout).") - local render, compile = template.render, template.compile - if layout then - if type(layout) == "table" then - return setmetatable({ render = function(self, context) - local context = context or self - context.blocks = context.blocks or {} - context.view = compile(view)(context) - layout.blocks = context.blocks or {} - layout.view = context.view or "" - return layout:render() - end }, { __tostring = function(self) - local context = self - context.blocks = context.blocks or {} - context.view = compile(view)(context) - layout.blocks = context.blocks or {} - layout.view = context.view - return tostring(layout) - end }) - else - return setmetatable({ render = function(self, context) - local context = context or self - context.blocks = context.blocks or {} - context.view = compile(view)(context) - return render(layout, context) - end }, { __tostring = function(self) - local context = self - context.blocks = context.blocks or {} - context.view = compile(view)(context) - return compile(layout)(context) - end }) - end - end - return setmetatable({ render = function(self, context) - return render(view, context or self) - end }, { __tostring = function(self) - return compile(view)(self) - end }) -end - -function template.precompile(view, path, strip) - local chunk = dump(template.compile(view), strip ~= false) - if path then - local file = open(path, "wb") - file:write(chunk) - file:close() - end - return chunk -end - -function template.compile(view, key, plain) - assert(view, "view was not provided for template.compile(view, key, plain).") - if key == "no-cache" then - return loadchunk(template.parse(view, plain)), false - end - key = key or view - local cache = template.cache - if cache[key] then return cache[key], true end - local func = loadchunk(template.parse(view, plain)) - if caching then cache[key] = func end - return func, false -end - -function template.parse(view, plain) - assert(view, "view was not provided for template.parse(view, plain).") - if not plain then - view = template.load(view) - if byte(view, 1, 1) == 27 then return view end - end - local j = 2 - local c = {[[ -context=... or {} -local function include(v, c) return template.compile(v)(c or context) end -local ___,blocks,layout={},blocks or {} -]] } - local i, s = 1, find(view, "{", 1, true) - while s do - local t, p = sub(view, s + 1, s + 1), s + 2 - if t == "{" then - local e = find(view, "}}", p, true) - if e then - local z, w = escaped(view, s) - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - if z then - i = s - else - c[j] = "___[#___+1]=template.escape(" - c[j+1] = trim(sub(view, p, e - 1)) - c[j+2] = ")\n" - j=j+3 - s, i = e + 1, e + 2 - end - end - elseif t == "*" then - local e = find(view, "*}", p, true) - if e then - local z, w = escaped(view, s) - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - if z then - i = s - else - c[j] = "___[#___+1]=template.output(" - c[j+1] = trim(sub(view, p, e - 1)) - c[j+2] = ")\n" - j=j+3 - s, i = e + 1, e + 2 - end - end - elseif t == "%" then - local e = find(view, "%}", p, true) - if e then - local z, w = escaped(view, s) - if z then - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - i = s - else - local n = e + 2 - if sub(view, n, n) == "\n" then - n = n + 1 - end - local r = rpos(view, s - 1) - if i <= r then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, r) - c[j+2] = "]=]\n" - j=j+3 - end - c[j] = trim(sub(view, p, e - 1)) - c[j+1] = "\n" - j=j+2 - s, i = n - 1, n - end - end - elseif t == "(" then - local e = find(view, ")}", p, true) - if e then - local z, w = escaped(view, s) - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - if z then - i = s - else - local f = sub(view, p, e - 1) - local x = find(f, ",", 2, true) - if x then - c[j] = "___[#___+1]=include([=[" - c[j+1] = trim(sub(f, 1, x - 1)) - c[j+2] = "]=]," - c[j+3] = trim(sub(f, x + 1)) - c[j+4] = ")\n" - j=j+5 - else - c[j] = "___[#___+1]=include([=[" - c[j+1] = trim(f) - c[j+2] = "]=])\n" - j=j+3 - end - s, i = e + 1, e + 2 - end - end - elseif t == "[" then - local e = find(view, "]}", p, true) - if e then - local z, w = escaped(view, s) - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - if z then - i = s - else - c[j] = "___[#___+1]=include(" - c[j+1] = trim(sub(view, p, e - 1)) - c[j+2] = ")\n" - j=j+3 - s, i = e + 1, e + 2 - end - end - elseif t == "-" then - local e = find(view, "-}", p, true) - if e then - local x, y = find(view, sub(view, s, e + 1), e + 2, true) - if x then - local z, w = escaped(view, s) - if z then - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - i = s - else - y = y + 1 - x = x - 1 - if sub(view, y, y) == "\n" then - y = y + 1 - end - local b = trim(sub(view, p, e - 1)) - if b == "verbatim" or b == "raw" then - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - c[j] = "___[#___+1]=[=[" - c[j+1] = sub(view, e + 2, x) - c[j+2] = "]=]\n" - j=j+3 - else - if sub(view, x, x) == "\n" then - x = x - 1 - end - local r = rpos(view, s - 1) - if i <= r then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, r) - c[j+2] = "]=]\n" - j=j+3 - end - c[j] = 'blocks["' - c[j+1] = b - c[j+2] = '"]=include[=[' - c[j+3] = sub(view, e + 2, x) - c[j+4] = "]=]\n" - j=j+5 - end - s, i = y - 1, y - end - end - end - elseif t == "#" then - local e = find(view, "#}", p, true) - if e then - local z, w = escaped(view, s) - if i < s - w then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = sub(view, i, s - 1 - w) - c[j+2] = "]=]\n" - j=j+3 - end - if z then - i = s - else - e = e + 2 - if sub(view, e, e) == "\n" then - e = e + 1 - end - s, i = e - 1, e - end - end - end - s = find(view, "{", s + 1, true) - end - s = sub(view, i) - if s and s ~= "" then - c[j] = "___[#___+1]=[=[\n" - c[j+1] = s - c[j+2] = "]=]\n" - j=j+3 - end - c[j] = "return layout and include(layout,setmetatable({view=table.concat(___),blocks=blocks},{__index=context})) or table.concat(___)" - return concat(c) -end - -function template.render(view, context, key, plain) - assert(view, "view was not provided for template.render(view, context, key, plain).") - return template.print(template.compile(view, key, plain)(context)) -end - -return template \ No newline at end of file diff --git a/test/images/image-util.sh b/test/images/image-util.sh index 91d7c7b1b4b..2b211868c10 100755 --- a/test/images/image-util.sh +++ b/test/images/image-util.sh @@ -282,7 +282,7 @@ if [[ "${WHAT}" == "all-conformance" ]]; then # Discussed during Conformance Office Hours Meeting (2019.12.17): # https://docs.google.com/document/d/1W31nXh9RYAb_VaYkwuPLd1hFxuRX3iU0DmaQ4lkCsX8/edit#heading=h.l87lu17xm9bh shift - conformance_images=("busybox" "agnhost" "echoserver" "jessie-dnsutils" "kitten" "nautilus" "nonewprivs" "resource-consumer" "sample-apiserver") + conformance_images=("busybox" "agnhost" "jessie-dnsutils" "kitten" "nautilus" "nonewprivs" "resource-consumer" "sample-apiserver") for image in "${conformance_images[@]}"; do eval "${TASK}" "${image}" "$@" done diff --git a/test/utils/image/manifest.go b/test/utils/image/manifest.go index dd7aa40c243..a00e4e51bca 100644 --- a/test/utils/image/manifest.go +++ b/test/utils/image/manifest.go @@ -166,8 +166,6 @@ const ( CudaVectorAdd2 // DebianIptables Image DebianIptables - // EchoServer image - EchoServer // Etcd image Etcd // GlusterDynamicProvisioner image @@ -243,7 +241,6 @@ func initImageConfigs(list RegistryList) (map[ImageID]Config, map[ImageID]Config configs[CudaVectorAdd] = Config{list.PromoterE2eRegistry, "cuda-vector-add", "1.0"} configs[CudaVectorAdd2] = Config{list.PromoterE2eRegistry, "cuda-vector-add", "2.2"} configs[DebianIptables] = Config{list.BuildImageRegistry, "debian-iptables", "bullseye-v1.4.0"} - configs[EchoServer] = Config{list.PromoterE2eRegistry, "echoserver", "2.4"} configs[Etcd] = Config{list.GcEtcdRegistry, "etcd", "3.5.4-0"} configs[GlusterDynamicProvisioner] = Config{list.PromoterE2eRegistry, "glusterdynamic-provisioner", "v1.3"} configs[Httpd] = Config{list.PromoterE2eRegistry, "httpd", "2.4.38-2"}