mirror of
https://github.com/bitnami/charts.git
synced 2026-03-15 06:47:24 +08:00
[bitnami/contour-operator] Adapt ginkgo tests for non-GKE (#15138)
* [bitnami/contour-operator] Adapt ginkgo tests for non-GKE Signed-off-by: FraPazGal <fdepaz@vmware.com> * Update runtime params Signed-off-by: FraPazGal <fdepaz@vmware.com> * Apply suggestions and trigger VIB Signed-off-by: FraPazGal <fdepaz@vmware.com> * Fix tests structure Signed-off-by: FraPazGal <fdepaz@vmware.com> * Remove VIB trigger Signed-off-by: FraPazGal <fdepaz@vmware.com> --------- Signed-off-by: FraPazGal <fdepaz@vmware.com>
This commit is contained in:
committed by
GitHub
parent
329d4172e6
commit
7132efcd82
@@ -1,62 +0,0 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
|
||||
netv1 "k8s.io/api/networking/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
cv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
netcv1 "k8s.io/client-go/kubernetes/typed/networking/v1"
|
||||
|
||||
// For client auth plugins
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
)
|
||||
|
||||
var _ = Describe("Contour Operator:", func() {
|
||||
var netclient netcv1.NetworkingV1Interface
|
||||
var coreclient cv1.CoreV1Interface
|
||||
var ctx context.Context
|
||||
|
||||
BeforeEach(func() {
|
||||
netclient = netcv1.NewForConfigOrDie(clusterConfigOrDie())
|
||||
coreclient = cv1.NewForConfigOrDie(clusterConfigOrDie())
|
||||
ctx = context.Background()
|
||||
})
|
||||
|
||||
Context("When both operator and testing resources are deployed", func() {
|
||||
var testingIngress *netv1.Ingress
|
||||
const contourNs = "projectcontour"
|
||||
var err error
|
||||
|
||||
BeforeEach(func() {
|
||||
testingIngress, err = netclient.Ingresses(*namespace).Get(ctx, *ingressName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error retrieving the %q Ingress resource: %q", *ingressName, err))
|
||||
}
|
||||
})
|
||||
|
||||
It("the operator manages the contour resource", func() {
|
||||
controllerPods := getPodsByLabelOrDie(ctx, coreclient, "app.kubernetes.io/component=contour-operator")
|
||||
containerLogs := getContainerLogsOrDie(ctx, coreclient, controllerPods.Items[0].GetName(), "contour-operator")
|
||||
|
||||
Expect(containsString(containerLogs, *contourName)).To(BeTrue())
|
||||
})
|
||||
It("the ingress' asigned IP is the same as the one used by the envoy service", func() {
|
||||
envoySvc, err := coreclient.Services(contourNs).Get(ctx, "envoy", metav1.GetOptions{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error retrieving the envoy service: %q", err))
|
||||
}
|
||||
|
||||
Expect(testingIngress.Status.LoadBalancer.Ingress[0].IP).To(Equal(envoySvc.Status.LoadBalancer.Ingress[0].IP))
|
||||
})
|
||||
It("the ingress' asigned IP resolves to the testing deployment", func() {
|
||||
responseBody := getResponseBodyOrDie(ctx, "http://"+testingIngress.Status.LoadBalancer.Ingress[0].IP)
|
||||
|
||||
Expect(containsString(responseBody, "kuard")).To(BeTrue())
|
||||
})
|
||||
})
|
||||
})
|
||||
97
.vib/contour-operator/ginkgo/contour_operator_test.go
Normal file
97
.vib/contour-operator/ginkgo/contour_operator_test.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/dynamic"
|
||||
cv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
netcv1 "k8s.io/client-go/kubernetes/typed/networking/v1"
|
||||
|
||||
// For client auth plugins
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
)
|
||||
|
||||
var _ = Describe("Contour Operator:", func() {
|
||||
Context("When both operator and testing resources are deployed", Ordered, func() {
|
||||
var netclient netcv1.NetworkingV1Interface
|
||||
var coreclient cv1.CoreV1Interface
|
||||
var dynamicClient dynamic.Interface
|
||||
var envoySvc *v1.Service
|
||||
var ctx context.Context
|
||||
var err error
|
||||
|
||||
const contourName = "contour-crd-vib"
|
||||
const ingressName = "contour-ing-vib"
|
||||
|
||||
BeforeAll(func() {
|
||||
var ingressHost string
|
||||
var hasIP, isReady bool
|
||||
|
||||
netclient = netcv1.NewForConfigOrDie(clusterConfigOrDie())
|
||||
coreclient = cv1.NewForConfigOrDie(clusterConfigOrDie())
|
||||
dynamicClient = dynamic.NewForConfigOrDie(clusterConfigOrDie())
|
||||
ctx = context.Background()
|
||||
|
||||
// The tests evaluate the Operator by deploying both Contour and Ingress resources.
|
||||
// Their creation takes some time, so they will be deployed once and reused across the different checks.
|
||||
createContourResourceOrDie(ctx, dynamicClient, contourName)
|
||||
|
||||
isReady, err = retry("isContourReady", 10, 30*time.Second, func() (bool, error) {
|
||||
return isContourReady(ctx, dynamicClient, contourName)
|
||||
})
|
||||
Expect(isReady).To(BeTrue())
|
||||
|
||||
hasIP, err = retry("isServiceReady", 10, 30*time.Second, func() (bool, error) {
|
||||
return isServiceReady(ctx, coreclient, "envoy")
|
||||
})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error checking whether the testing Envoy service had an IP assigned: %q", err))
|
||||
}
|
||||
Expect(hasIP).To(BeTrue())
|
||||
|
||||
envoySvc, err = coreclient.Services(*namespace).Get(ctx, "envoy", metav1.GetOptions{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error retrieving the Envoy service created by contour: %q", err))
|
||||
}
|
||||
|
||||
// AWS based clusters will use a host instead of an IP for the svc address
|
||||
ingressHost = returnValidHost(envoySvc.Status.LoadBalancer.Ingress[0])
|
||||
createIngressOrDie(ctx, netclient, ingressName, ingressHost)
|
||||
// Once created, the operator has to assign an IP to the managed ingress
|
||||
hasIP, err = retry("isIngressReady", 10, 30*time.Second, func() (bool, error) {
|
||||
return isIngressReady(ctx, netclient, ingressName)
|
||||
})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error checking whether the testing ingress had a host assigned: %q", err))
|
||||
}
|
||||
Expect(hasIP).To(BeTrue())
|
||||
})
|
||||
|
||||
It("the operator manages the contour resource", func() {
|
||||
controllerPods := getPodsByLabelOrDie(ctx, coreclient, "app.kubernetes.io/component=contour-operator")
|
||||
containerLogs := getContainerLogsOrDie(ctx, coreclient, controllerPods.Items[0].GetName(), "contour-operator")
|
||||
|
||||
Expect(containsString(containerLogs, contourName)).To(BeTrue())
|
||||
})
|
||||
It("the ingress' asigned IP is the same as the one used by the envoy service", func() {
|
||||
testingIngress, err := netclient.Ingresses(*namespace).Get(ctx, ingressName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error retrieving the %q Ingress resource: %q", ingressName, err))
|
||||
}
|
||||
Expect(returnValidHost(testingIngress.Status.LoadBalancer.Ingress[0])).To(Equal(returnValidHost(envoySvc.Status.LoadBalancer.Ingress[0])))
|
||||
})
|
||||
|
||||
AfterAll(func() {
|
||||
// No need to panic here if failed, the cluster is expected to clean up with the undeployment
|
||||
dynamicClient.Resource(contourType).Namespace(*namespace).Delete(ctx, contourName, metav1.DeleteOptions{})
|
||||
netclient.Ingresses(*namespace).Delete(ctx, ingressName, metav1.DeleteOptions{})
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -6,13 +6,18 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
netv1 "k8s.io/api/networking/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/dynamic"
|
||||
cv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
netcv1 "k8s.io/client-go/kubernetes/typed/networking/v1"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
|
||||
@@ -27,8 +32,10 @@ const APP_NAME = "Contour Operator"
|
||||
|
||||
var kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
|
||||
var namespace = flag.String("namespace", "", "namespace where the resources are deployed")
|
||||
var contourName = flag.String("contour-crd-name", "", "name of the contour resource")
|
||||
var ingressName = flag.String("ingress-name", "", "resource name of the testing ingress")
|
||||
var svcName = flag.String("service-name", "", "service name used to serve the apache deployment")
|
||||
var secretName = flag.String("secret-name", "", "secret name with TLS certs")
|
||||
|
||||
var contourType = schema.GroupVersionResource{Group: "operator.projectcontour.io", Version: "v1alpha1", Resource: "contours"}
|
||||
|
||||
func clusterConfigOrDie() *rest.Config {
|
||||
var config *rest.Config
|
||||
@@ -46,6 +53,115 @@ func clusterConfigOrDie() *rest.Config {
|
||||
return config
|
||||
}
|
||||
|
||||
func createIngressOrDie(ctx context.Context, c netcv1.NetworkingV1Interface, name string, ingressRuleHost string) {
|
||||
var pathType netv1.PathType = "Prefix"
|
||||
|
||||
ingressRuleValue := netv1.IngressRuleValue{
|
||||
HTTP: &netv1.HTTPIngressRuleValue{
|
||||
Paths: []netv1.HTTPIngressPath{
|
||||
{
|
||||
Path: "/",
|
||||
PathType: &pathType,
|
||||
Backend: netv1.IngressBackend{
|
||||
Service: &netv1.IngressServiceBackend{
|
||||
Name: *svcName,
|
||||
Port: netv1.ServiceBackendPort{
|
||||
Number: int32(80),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
ingress := &netv1.Ingress{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: *namespace,
|
||||
Name: name,
|
||||
Annotations: map[string]string{
|
||||
"kubernetes.io/ingress.class": "contour",
|
||||
},
|
||||
},
|
||||
Spec: netv1.IngressSpec{
|
||||
TLS: []netv1.IngressTLS{
|
||||
{
|
||||
Hosts: []string{
|
||||
ingressRuleHost,
|
||||
},
|
||||
SecretName: *secretName,
|
||||
},
|
||||
},
|
||||
Rules: []netv1.IngressRule{
|
||||
{
|
||||
Host: ingressRuleHost,
|
||||
IngressRuleValue: ingressRuleValue,
|
||||
},
|
||||
},
|
||||
DefaultBackend: &netv1.IngressBackend{
|
||||
Service: &netv1.IngressServiceBackend{
|
||||
Name: *svcName,
|
||||
Port: netv1.ServiceBackendPort{
|
||||
Number: int32(80),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
result, err := c.Ingresses(*namespace).Create(ctx, ingress, metav1.CreateOptions{})
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
fmt.Printf("Created ingress %q.\n", result.GetObjectMeta().GetName())
|
||||
}
|
||||
|
||||
func createContourResourceOrDie(ctx context.Context, dC dynamic.Interface, name string) *unstructured.Unstructured {
|
||||
payload := &unstructured.Unstructured{
|
||||
Object: map[string]interface{}{
|
||||
"apiVersion": "operator.projectcontour.io/v1alpha1",
|
||||
"kind": "Contour",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": name,
|
||||
},
|
||||
"spec": map[string]interface{}{
|
||||
"namespace": map[string]interface{}{
|
||||
"name": *namespace,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
res, err := dC.Resource(contourType).Namespace(*namespace).Create(ctx, payload, metav1.CreateOptions{})
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error creating the Contour object: %s", err))
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func isContourReady(ctx context.Context, dC dynamic.Interface, name string) (bool, error) {
|
||||
var err error
|
||||
|
||||
contour, err := dC.Resource(contourType).Namespace(*namespace).Get(ctx, name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
fmt.Printf("There was an error obtaining the Contour object %q", name)
|
||||
return false, err
|
||||
}
|
||||
conditions, found, err := unstructured.NestedSlice(contour.Object, "status", "conditions")
|
||||
if !found {
|
||||
fmt.Printf("Status conditions for Contour %q were not found", name)
|
||||
return false, err
|
||||
}
|
||||
|
||||
mostRecentConditionUpdate := conditions[len(conditions)-1]
|
||||
conditionToMap, conversionOk := mostRecentConditionUpdate.(map[string]interface{})
|
||||
if !conversionOk {
|
||||
return false, fmt.Errorf("Error converting last Contour condition to type map[string]interface{}; got %T", conditionToMap)
|
||||
}
|
||||
|
||||
return conditionToMap["type"] == "Available" && conditionToMap["status"] == "True", nil
|
||||
}
|
||||
|
||||
func getPodsByLabelOrDie(ctx context.Context, c cv1.PodsGetter, selector string) v1.PodList {
|
||||
|
||||
output, err := c.Pods(*namespace).List(ctx, metav1.ListOptions{
|
||||
@@ -85,28 +201,6 @@ func getContainerLogsOrDie(ctx context.Context, c cv1.PodsGetter, podName string
|
||||
return output
|
||||
}
|
||||
|
||||
func getResponseBodyOrDie(ctx context.Context, address string) []string {
|
||||
var output []string
|
||||
var client http.Client
|
||||
|
||||
resp, err := client.Get(address)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("There was an error during the GET request: %q", err))
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode == http.StatusOK {
|
||||
scanner := bufio.NewScanner(interruptableReader{ctx, resp.Body})
|
||||
for scanner.Scan() {
|
||||
output = append(output, scanner.Text())
|
||||
}
|
||||
if scanner.Err() != nil {
|
||||
panic(scanner.Err())
|
||||
}
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
type interruptableReader struct {
|
||||
ctx context.Context
|
||||
r io.Reader
|
||||
@@ -123,6 +217,55 @@ func (r interruptableReader) Read(p []byte) (int, error) {
|
||||
return n, r.ctx.Err()
|
||||
}
|
||||
|
||||
func isServiceReady(ctx context.Context, c cv1.CoreV1Interface, resourceName string) (bool, error) {
|
||||
var err error
|
||||
|
||||
netResource, err := c.Services(*namespace).Get(ctx, resourceName, metav1.GetOptions{})
|
||||
|
||||
if netResource != nil && len(netResource.Status.LoadBalancer.Ingress) > 0 {
|
||||
return true, err
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
func isIngressReady(ctx context.Context, c netcv1.NetworkingV1Interface, resourceName string) (bool, error) {
|
||||
var err error
|
||||
|
||||
netResource, err := c.Ingresses(*namespace).Get(ctx, resourceName, metav1.GetOptions{})
|
||||
|
||||
if netResource != nil && len(netResource.Status.LoadBalancer.Ingress) > 0 {
|
||||
return true, err
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
func returnValidHost(ingress v1.LoadBalancerIngress) string {
|
||||
if ingress.IP != "" {
|
||||
return ingress.IP + ".nip.io"
|
||||
} else if ingress.Hostname != "" {
|
||||
return ingress.Hostname
|
||||
} else {
|
||||
panic("No valid host found for the provided ingress")
|
||||
}
|
||||
}
|
||||
|
||||
func retry(name string, attempts int, sleep time.Duration, f func() (bool, error)) (res bool, err error) {
|
||||
for i := 0; i < attempts; i++ {
|
||||
fmt.Printf("[retriable] operation %q executing now [attempt %d/%d]\n", name, (i + 1), attempts)
|
||||
res, err = f()
|
||||
if res {
|
||||
fmt.Printf("[retriable] operation %q succedeed [attempt %d/%d]\n", name, (i + 1), attempts)
|
||||
return res, err
|
||||
}
|
||||
fmt.Printf("[retriable] operation %q failed, sleeping for %q now...\n", name, sleep)
|
||||
time.Sleep(sleep)
|
||||
}
|
||||
fmt.Printf("[retriable] operation %q failed [attempt %d/%d]\n", name, attempts, attempts)
|
||||
return res, err
|
||||
}
|
||||
|
||||
func containsString(haystack []string, needle string) bool {
|
||||
for _, s := range haystack {
|
||||
if strings.Contains(s, needle) {
|
||||
@@ -136,11 +279,11 @@ func CheckRequirements() {
|
||||
if *namespace == "" {
|
||||
panic(fmt.Sprintf("The namespace where %s is deployed must be provided. Use the '--namespace' flag", APP_NAME))
|
||||
}
|
||||
if *contourName == "" {
|
||||
panic("The name of the contour resource must be provided. Use the '--contour-crd-name' flag")
|
||||
if *svcName == "" {
|
||||
panic(fmt.Sprintln("The testing service name used to serve the apache deployment must be provided. Use the '--service-name' flag"))
|
||||
}
|
||||
if *ingressName == "" {
|
||||
panic("The resource name of the testing ingress must be provided. Use the '--ingress-name' flag")
|
||||
if *secretName == "" {
|
||||
panic(fmt.Sprintln("The testing secret name with TLS certs must be provided. Use the '--secret-name' flag"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"url": "{SHA_ARCHIVE}",
|
||||
"path": "/bitnami/contour-operator"
|
||||
},
|
||||
"runtime_parameters": "ZXh0cmFEZXBsb3k6Ci0gYXBpVmVyc2lvbjogb3BlcmF0b3IucHJvamVjdGNvbnRvdXIuaW8vdjFhbHBoYTEKICBraW5kOiBDb250b3VyCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBjb250b3VyLWNyZC12aWIKICBzcGVjOiB7fQotIGFwaVZlcnNpb246IGFwcHMvdjEKICBraW5kOiBEZXBsb3ltZW50CiAgbWV0YWRhdGE6CiAgICBsYWJlbHM6CiAgICAgIGFwcDoga3VhcmQKICAgIG5hbWU6IGt1YXJkCiAgc3BlYzoKICAgIHJlcGxpY2FzOiAxCiAgICBzZWxlY3RvcjoKICAgICAgbWF0Y2hMYWJlbHM6CiAgICAgICAgYXBwOiBrdWFyZAogICAgdGVtcGxhdGU6CiAgICAgIG1ldGFkYXRhOgogICAgICAgIGxhYmVsczoKICAgICAgICAgIGFwcDoga3VhcmQKICAgICAgc3BlYzoKICAgICAgICBjb250YWluZXJzOgogICAgICAgIC0gaW1hZ2U6IGdjci5pby9rdWFyLWRlbW8va3VhcmQtYW1kNjQ6MQogICAgICAgICAgbmFtZToga3VhcmQKLSBhcGlWZXJzaW9uOiB2MQogIGtpbmQ6IFNlcnZpY2UKICBtZXRhZGF0YToKICAgIGxhYmVsczoKICAgICAgYXBwOiBrdWFyZAogICAgbmFtZToga3VhcmQKICBzcGVjOgogICAgcG9ydHM6CiAgICAtIHBvcnQ6IDgwCiAgICAgIHByb3RvY29sOiBUQ1AKICAgICAgdGFyZ2V0UG9ydDogODA4MAogICAgc2VsZWN0b3I6CiAgICAgIGFwcDoga3VhcmQKICAgIHNlc3Npb25BZmZpbml0eTogTm9uZQogICAgdHlwZTogQ2x1c3RlcklQCi0gYXBpVmVyc2lvbjogbmV0d29ya2luZy5rOHMuaW8vdjEKICBraW5kOiBJbmdyZXNzCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBjb250b3VyLW9wLXZpYi10ZXN0CiAgICBsYWJlbHM6CiAgICAgIGFwcDoga3VhcmQKICBzcGVjOgogICAgZGVmYXVsdEJhY2tlbmQ6CiAgICAgIHNlcnZpY2U6CiAgICAgICAgbmFtZToga3VhcmQKICAgICAgICBwb3J0OgogICAgICAgICAgbnVtYmVyOiA4MA==",
|
||||
"runtime_parameters": "ZXh0cmFEZXBsb3k6Ci0gfAogIHt7LSAkY2EgOj0gZ2VuQ0EgImNvbnRvdXItY2EiIDM2NSB9fQogIHt7LSAkY29udG91cl9ob3N0bmFtZSA6PSAiY29udG91ciIgfX0KICB7ey0gJGNvbnRvdXJfY2VydCA6PSBnZW5TaWduZWRDZXJ0ICRjb250b3VyX2hvc3RuYW1lIG5pbCAobGlzdCAkY29udG91cl9ob3N0bmFtZSkgMzY1ICRjYSB9fQogIGFwaVZlcnNpb246IHYxCiAga2luZDogU2VjcmV0CiAgbWV0YWRhdGE6CiAgICAjIE9ubHkgbmVjZXNzYXJ5IGZvciB0aGUgaW5ncmVzcyB0byBlbmFibGUgSFRUUFMgcG9ydHMKICAgIG5hbWU6IGZha2UtdGxzLWNlcnRpZmljYXRlcwogICAgbmFtZXNwYWNlOiB7eyBpbmNsdWRlICJjb21tb24ubmFtZXMubmFtZXNwYWNlIiAkIHwgcXVvdGUgfX0KICB0eXBlOiBrdWJlcm5ldGVzLmlvL3RscwogIGRhdGE6CiAgICB0bHMuY3J0OiB7eyAkY29udG91cl9jZXJ0LkNlcnQgfCBiNjRlbmMgfCBxdW90ZSB9fQogICAgdGxzLmtleToge3sgJGNvbnRvdXJfY2VydC5LZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogICAgY2EuY3J0OiB7eyAkY2EuQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAgLS0tCiAgYXBpVmVyc2lvbjogYXBwcy92MQogIGtpbmQ6IERlcGxveW1lbnQKICBtZXRhZGF0YToKICAgIGxhYmVsczoKICAgICAgYXBwOiBhcGFjaGUKICAgIG5hbWU6IGFwYWNoZQogIHNwZWM6CiAgICByZXBsaWNhczogMQogICAgc2VsZWN0b3I6CiAgICAgIG1hdGNoTGFiZWxzOgogICAgICAgIGFwcDogYXBhY2hlCiAgICB0ZW1wbGF0ZToKICAgICAgbWV0YWRhdGE6CiAgICAgICAgbGFiZWxzOgogICAgICAgICAgYXBwOiBhcGFjaGUKICAgICAgc3BlYzoKICAgICAgICBjb250YWluZXJzOgogICAgICAgIC0gaW1hZ2U6IGRvY2tlci5pby9iaXRuYW1pL2FwYWNoZTpsYXRlc3QKICAgICAgICAgIG5hbWU6IGFwYWNoZQogIC0tLQogIGFwaVZlcnNpb246IHYxCiAga2luZDogU2VydmljZQogIG1ldGFkYXRhOgogICAgbGFiZWxzOgogICAgICBhcHA6IGFwYWNoZQogICAgbmFtZTogYXBhY2hlCiAgc3BlYzoKICAgIHBvcnRzOgogICAgLSBuYW1lOiBodHRwCiAgICAgIHBvcnQ6IDgwCiAgICAgIHByb3RvY29sOiBUQ1AKICAgICAgdGFyZ2V0UG9ydDogODA4MAogICAgLSBuYW1lOiBodHRwcwogICAgICBwb3J0OiA0NDMKICAgICAgcHJvdG9jb2w6IFRDUAogICAgICB0YXJnZXRQb3J0OiA4NDQzCiAgICBzZWxlY3RvcjoKICAgICAgYXBwOiBhcGFjaGUKICAgIHNlc3Npb25BZmZpbml0eTogTm9uZQogICAgdHlwZTogQ2x1c3RlcklQ",
|
||||
"target_platform": {
|
||||
"target_platform_id": "{VIB_ENV_ALTERNATIVE_TARGET_PLATFORM}",
|
||||
"size": {
|
||||
@@ -41,8 +41,8 @@
|
||||
"params": {
|
||||
"kubeconfig": "{{kubeconfig}}",
|
||||
"namespace": "{{namespace}}",
|
||||
"contour-crd-name": "contour-crd-vib",
|
||||
"ingress-name": "contour-op-vib-test"
|
||||
"service-name": "apache",
|
||||
"secret-name": "fake-tls-certificates"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"url": "{SHA_ARCHIVE}",
|
||||
"path": "/bitnami/contour-operator"
|
||||
},
|
||||
"runtime_parameters": "ZXh0cmFEZXBsb3k6Ci0gYXBpVmVyc2lvbjogb3BlcmF0b3IucHJvamVjdGNvbnRvdXIuaW8vdjFhbHBoYTEKICBraW5kOiBDb250b3VyCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBjb250b3VyLWNyZC12aWIKICBzcGVjOiB7fQotIGFwaVZlcnNpb246IGFwcHMvdjEKICBraW5kOiBEZXBsb3ltZW50CiAgbWV0YWRhdGE6CiAgICBsYWJlbHM6CiAgICAgIGFwcDoga3VhcmQKICAgIG5hbWU6IGt1YXJkCiAgc3BlYzoKICAgIHJlcGxpY2FzOiAxCiAgICBzZWxlY3RvcjoKICAgICAgbWF0Y2hMYWJlbHM6CiAgICAgICAgYXBwOiBrdWFyZAogICAgdGVtcGxhdGU6CiAgICAgIG1ldGFkYXRhOgogICAgICAgIGxhYmVsczoKICAgICAgICAgIGFwcDoga3VhcmQKICAgICAgc3BlYzoKICAgICAgICBjb250YWluZXJzOgogICAgICAgIC0gaW1hZ2U6IGdjci5pby9rdWFyLWRlbW8va3VhcmQtYW1kNjQ6MQogICAgICAgICAgbmFtZToga3VhcmQKLSBhcGlWZXJzaW9uOiB2MQogIGtpbmQ6IFNlcnZpY2UKICBtZXRhZGF0YToKICAgIGxhYmVsczoKICAgICAgYXBwOiBrdWFyZAogICAgbmFtZToga3VhcmQKICBzcGVjOgogICAgcG9ydHM6CiAgICAtIHBvcnQ6IDgwCiAgICAgIHByb3RvY29sOiBUQ1AKICAgICAgdGFyZ2V0UG9ydDogODA4MAogICAgc2VsZWN0b3I6CiAgICAgIGFwcDoga3VhcmQKICAgIHNlc3Npb25BZmZpbml0eTogTm9uZQogICAgdHlwZTogQ2x1c3RlcklQCi0gYXBpVmVyc2lvbjogbmV0d29ya2luZy5rOHMuaW8vdjEKICBraW5kOiBJbmdyZXNzCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBjb250b3VyLW9wLXZpYi10ZXN0CiAgICBsYWJlbHM6CiAgICAgIGFwcDoga3VhcmQKICBzcGVjOgogICAgZGVmYXVsdEJhY2tlbmQ6CiAgICAgIHNlcnZpY2U6CiAgICAgICAgbmFtZToga3VhcmQKICAgICAgICBwb3J0OgogICAgICAgICAgbnVtYmVyOiA4MA==",
|
||||
"runtime_parameters": "ZXh0cmFEZXBsb3k6Ci0gfAogIHt7LSAkY2EgOj0gZ2VuQ0EgImNvbnRvdXItY2EiIDM2NSB9fQogIHt7LSAkY29udG91cl9ob3N0bmFtZSA6PSAiY29udG91ciIgfX0KICB7ey0gJGNvbnRvdXJfY2VydCA6PSBnZW5TaWduZWRDZXJ0ICRjb250b3VyX2hvc3RuYW1lIG5pbCAobGlzdCAkY29udG91cl9ob3N0bmFtZSkgMzY1ICRjYSB9fQogIGFwaVZlcnNpb246IHYxCiAga2luZDogU2VjcmV0CiAgbWV0YWRhdGE6CiAgICAjIE9ubHkgbmVjZXNzYXJ5IGZvciB0aGUgaW5ncmVzcyB0byBlbmFibGUgSFRUUFMgcG9ydHMKICAgIG5hbWU6IGZha2UtdGxzLWNlcnRpZmljYXRlcwogICAgbmFtZXNwYWNlOiB7eyBpbmNsdWRlICJjb21tb24ubmFtZXMubmFtZXNwYWNlIiAkIHwgcXVvdGUgfX0KICB0eXBlOiBrdWJlcm5ldGVzLmlvL3RscwogIGRhdGE6CiAgICB0bHMuY3J0OiB7eyAkY29udG91cl9jZXJ0LkNlcnQgfCBiNjRlbmMgfCBxdW90ZSB9fQogICAgdGxzLmtleToge3sgJGNvbnRvdXJfY2VydC5LZXkgfCBiNjRlbmMgfCBxdW90ZSB9fQogICAgY2EuY3J0OiB7eyAkY2EuQ2VydCB8IGI2NGVuYyB8IHF1b3RlIH19CiAgLS0tCiAgYXBpVmVyc2lvbjogYXBwcy92MQogIGtpbmQ6IERlcGxveW1lbnQKICBtZXRhZGF0YToKICAgIGxhYmVsczoKICAgICAgYXBwOiBhcGFjaGUKICAgIG5hbWU6IGFwYWNoZQogIHNwZWM6CiAgICByZXBsaWNhczogMQogICAgc2VsZWN0b3I6CiAgICAgIG1hdGNoTGFiZWxzOgogICAgICAgIGFwcDogYXBhY2hlCiAgICB0ZW1wbGF0ZToKICAgICAgbWV0YWRhdGE6CiAgICAgICAgbGFiZWxzOgogICAgICAgICAgYXBwOiBhcGFjaGUKICAgICAgc3BlYzoKICAgICAgICBjb250YWluZXJzOgogICAgICAgIC0gaW1hZ2U6IGRvY2tlci5pby9iaXRuYW1pL2FwYWNoZTpsYXRlc3QKICAgICAgICAgIG5hbWU6IGFwYWNoZQogIC0tLQogIGFwaVZlcnNpb246IHYxCiAga2luZDogU2VydmljZQogIG1ldGFkYXRhOgogICAgbGFiZWxzOgogICAgICBhcHA6IGFwYWNoZQogICAgbmFtZTogYXBhY2hlCiAgc3BlYzoKICAgIHBvcnRzOgogICAgLSBuYW1lOiBodHRwCiAgICAgIHBvcnQ6IDgwCiAgICAgIHByb3RvY29sOiBUQ1AKICAgICAgdGFyZ2V0UG9ydDogODA4MAogICAgLSBuYW1lOiBodHRwcwogICAgICBwb3J0OiA0NDMKICAgICAgcHJvdG9jb2w6IFRDUAogICAgICB0YXJnZXRQb3J0OiA4NDQzCiAgICBzZWxlY3RvcjoKICAgICAgYXBwOiBhcGFjaGUKICAgIHNlc3Npb25BZmZpbml0eTogTm9uZQogICAgdHlwZTogQ2x1c3RlcklQ",
|
||||
"target_platform": {
|
||||
"target_platform_id": "{VIB_ENV_ALTERNATIVE_TARGET_PLATFORM}",
|
||||
"size": {
|
||||
@@ -41,8 +41,8 @@
|
||||
"params": {
|
||||
"kubeconfig": "{{kubeconfig}}",
|
||||
"namespace": "{{namespace}}",
|
||||
"contour-crd-name": "contour-crd-vib",
|
||||
"ingress-name": "contour-op-vib-test"
|
||||
"service-name": "apache",
|
||||
"secret-name": "fake-tls-certificates"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user