kubernetes-sigs / ingress-controller-conformance

Repository for a compliance specification of ingress-controllers.
Apache License 2.0
43 stars 36 forks source link

Add flag to dump yaml definitions #75

Closed aledbf closed 3 years ago

aledbf commented 3 years ago

Running the conformance test suite we could find a particular test is not ok. The yaml definition helps to reproduce the problem without spending time trying to reproduce what is being executed underneath

aledbf commented 3 years ago

Example of the output:

=== RUN   TestSuite
Feature: Host rules
  An Ingress may define routing rules based on the request host.

  If the HTTP request host matches one of the hosts in the
  Ingress objects, the traffic is routed to its backend service.
---
metadata:
  creationTimestamp: null
  generateName: ingress-conformance-
  labels:
    app.kubernetes.io/name: ingress-conformance
spec: {}
status: {}

  Background:
    Given a new random namespace                                                                # feature.go:58 -> sigs.k8s.io/ingress-controller-conformance/test/conformance/hostrules.aNewRandomNamespace
---
data:
  tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJRENDQWdpZ0F3SUJBZ0lSQU52NWNLYXZDSVNwLzJyT1pvMEhlNUF3RFFZSktvWklodmNOQVFFTEJRQXcKSkRFUU1BNEdBMVVFQ2hNSFFXTnRaU0JEYnpFUU1BNEdBMVVFQXhNSFpHVm1ZWFZzZERBZUZ3MHlNREE1TWpreApOREEzTlRWYUZ3MHlNVEE1TWpreE5EQTNOVFZhTUNReEVEQU9CZ05WQkFvVEIwRmpiV1VnUTI4eEVEQU9CZ05WCkJBTVRCMlJsWm1GMWJIUXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDM3hSbTcKMzhLT3o4M0ZoUGlzTDJPUitRUEFvVTg3N0doOHBjSXNhYXFBQW5oMlRJRzdUVXArVTdpeDd0V1ZGZGxjUUxxNwowNVJFVEhZdEg3NUtLcy9RR1c4RmUwUlovZEU4ck52OUlzdGtOc09HczcwVDFTYUJVU3dkODBPZGJZUHFoSWIwCkZ1citEdEhob3UyMzZXalVoYVN3Y3VJSlRPNStEWCtqMmxFU2E4VVFITXBwUWJtZyt6TXZVNnBzVmVuWFFmQzQKMFlZeTM5QzdTNXN1WXhjbkNmb2xZWktHZnd1ZStoVXJWZGttR3U0TTRTeFRKN1NJdHNMYW5SV2dUaHFUd0pHMApuMkVhRFZEeEIzVysvUGEzaGNaMFBNWWl2ZGZCSWNrMVdaV0h6Qk0rcEx2bXl5L083bm5EVnFEMG9MbVNHTmxPCkxjTEIwVUZxbW5la1lYZkhBZ01CQUFHalRUQkxNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUsKQmdnckJnRUZCUWNEQVRBTUJnTlZIUk1CQWY4RUFqQUFNQllHQTFVZEVRUVBNQTJDQzJadmJ5NWlZWEl1WTI5dApNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUNzWjUxK2U3WHBGZVUydjFET2VrUG9MSS8xSlZsYVUvVDN4Q1VUCjdmdEFaODZlenBZVFlwL0pvMnRib1VRZTlYeVhqT1NCNStVbExrYnZNcjdpZWUrM0g3SVVzLzYzYkhWWUQ4SGUKTkZtUnUySitoYlFOdTdNTWJyWlpNT2xQSDIycjhyYm1obGNYYVZackJ1S21mcURqVVpDWVdsc3p2ek5BbnBnYgpvUjk2ODZRR1FTMmVGbmVwQVhNUGpQQU9DbnNWQmQzOTlJQzFZSEJPUTdYR1ZySWp4Wi9leHd6cDFSd0xqV3ZmCk5JOTRKQm9wY0hFL3V5b0hHSHB2VFlZQ0tzSi9hdG9xVmFPQWhMMHdpYXhacGNXLzBWUzVpNFh6RGovU2VYZUcKVTdBTE0vekdkd1gwQ1UxTWlSM2ZmUW9TdFg2S0wxRlh1ZDNKTjg0TFFpOUFOeXJvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
  tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdDhVWnU5L0Nqcy9OeFlUNHJDOWprZmtEd0tGUE8reG9mS1hDTEdtcWdBSjRka3lCCnUwMUtmbE80c2U3VmxSWFpYRUM2dTlPVVJFeDJMUisrU2lyUDBCbHZCWHRFV2YzUlBLemIvU0xMWkRiRGhyTzkKRTlVbWdWRXNIZk5EblcyRDZvU0c5QmJxL2c3UjRhTHR0K2xvMUlXa3NITGlDVXp1ZmcxL285cFJFbXZGRUJ6SwphVUc1b1BzekwxT3FiRlhwMTBId3VOR0dNdC9RdTB1YkxtTVhKd242SldHU2huOExudm9WSzFYWkpocnVET0VzClV5ZTBpTGJDMnAwVm9FNGFrOENSdEo5aEdnMVE4UWQxdnZ6MnQ0WEdkRHpHSXIzWHdTSEpOVm1WaDh3VFBxUzcKNXNzdnp1NTV3MWFnOUtDNWtoalpUaTNDd2RGQmFwcDNwR0YzeHdJREFRQUJBb0lCQUJBZUpXZW85SE42SGw0WQpqNGJxa1IwWWJnL1RGaFAzWkNLcWx5RTJFMUl1NVVuYTQvWDlqVzhQQUwvNlpwa3cxV09WK2NySGY5V05yeis5CjdQNnNTcFhCNVU3aHhOanZ2ZzVJU3ZNa3Zob0lBNVlvNVloN3hXaktLY2htc2FONUczelNLdFAxdnA2UnhpNjQKRDRsMTIwL29lTTFSQmlveXFTZzlIdGpNS1Jnb1hYNjVKYTdqQ2l0YjBQSzhWSmhtclJzbkpLU25XNi9CVTNTcwppZmw0dVZ0Wkl6cHZEM0l2Q0ZBdmhSdUNxMnF4SWozQ2V3SXFaWE9ITVZvNXp3K2Zva1QxQVBYaE5GRUtGSXJVCmRZa3RLa0ZXVCs0b0lVMEZXWU40QWh6UmtRa0xtalVmT0YybjhzMmpnd2FuQmd2Q2xmTk9SMUF0bFJMWXhOY3YKZGZFaDZpRUNnWUVBNWttV3F2M0kyN2s2bzlIa05tbEUyYjJYU1ZBZUxhLzVXbllGSVNTaWMvVkJ1R01TRnFWbApaLzYzUjNpMzVlRUVoN2Z3Y1VTNThZTzFLajR5Y1ozSmVlUGNRbFZnSkZkcDVWOTFyM0ZQUlV1Tkc1Y0ErMTkrCnBRemxDTk93aWI5anA4eFhVc2hGa0hTUXBuVjdNVlJjVFdkSjk3R2JXcHNvclcwa21aVElTZnNDZ1lFQXpFbmgKVVI4eE5ETmdoaXB0aGZqeDBkaEdYWHg1bkQ5V01rNktEaXNmMGpqNXF1TFBUNlNZNTRrYjZOSE5rRllxVDVQNQpFY2sra2NQR2FWYWVtbE4wc0Nqako5OXE5dE4wckxzSWxXcno2TGJ5WURMcnBqRGVXYTZsbkZ2THM5YlBQckxvCkorQ3d0c3hIV1ZxWHRWWWhFcWIzdlNqcDBueWZWQWxpQ3UyVUM2VUNnWUVBcjlEUkFoMGQ0M3JvWlRnUzV1TzUKMkE5aVdHdWRqcjRDUHVsS0EwTEg4SVgzdGdHVlJzcmh2K0w5Sk1qcWhjd2t2RVZYZ2ZLNWo4VkJaRTMyRHo0cgpHeTgyODBIaFUvMlU4TFRQMGJGTmx4Y1dWVkVWUTlWbGlEZHZDUzB0WkExRjFVOHlBQmE4M1l2US8vVkRwNmJECmphamxGUUY1SFZUR1dwbXdUcjBEcVU4Q2dZQXNjQ1hETDdYVVZSaTZGcUNjYy9xbVd4VnpZSkJUbkxOelhnSkoKOHJlSlV6dDhJTHBYNk1ZYUY0a3FxL2k3WFFMM0xJa1JoV1ZHNy85SkNyNlZjM0grbitaSjFoKytjV0QvOGU5OApFVGZkZDI1aDNySEVCUDFaSk5TQm5yWkErSWs4YWs1MTNqcVNpUDA4UXFpZG1ZNjRML25UL0FKZzl4cnhmTmtHCjU0Yzh3UUtCZ0NSUk03Z2hVUFY2RUZCYjY1NDRTZFhnVUZmck9Cbjdpa25TYWpwTmk4ZVNuS0xQUExuelo0MEoKZXo4WFJ1cUozQTRVK2MrMVJxM0YrZHNhSTdJZjZ3bngvL1BoOUczWWNoZENTbHJ6ZzA4ZGRDclcxR28yTUNBRgo2dmR4YjJCRC9IQlY0YjZZbGVVRHFCc0pqc3pDZHNVZ2NMc2RiK056NS9rUjNDTnl5alBjCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
metadata:
  creationTimestamp: null
  name: conformance-tls

    Given a self-signed TLS secret named "conformance-tls" for the "foo.bar.com" hostname       # feature.go:89 -> sigs.k8s.io/ingress-controller-conformance/test/conformance/hostrules.aSelfsignedTLSSecretNamedForTheHostname
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: host-rules-wildcard-foo-com
spec:
  replicas: 1
  selector:
    matchLabels:
      app: host-rules-wildcard-foo-com
  strategy:
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: host-rules-wildcard-foo-com
    spec:
      containers:
      - env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: INGRESS_NAME
          value: host-rules
        - name: SERVICE_NAME
          value: wildcard-foo-com
        image: gcr.io/k8s-staging-ingressconformance/echoserver@sha256:317f2dfad5e4e937275e79f783e5e7b81a88f0123a3988e8b06f9d7b1eb435c9
        livenessProbe:
          failureThreshold: 10
          httpGet:
            path: /health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 1
          successThreshold: 1
          timeoutSeconds: 1
        name: ingress-conformance-echo
        ports:
        - containerPort: 3000
        readinessProbe:
          failureThreshold: 10
          httpGet:
            path: /health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 1
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
status: {}

---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  name: wildcard-foo-com
spec:
  ports:
  - port: 8080
    targetPort: 3000
  selector:
    app: host-rules-wildcard-foo-com
  type: NodePort
status:
  loadBalancer: {}

---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: host-rules-foo-bar-com
spec:
  replicas: 1
  selector:
    matchLabels:
      app: host-rules-foo-bar-com
  strategy:
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: host-rules-foo-bar-com
    spec:
      containers:
      - env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: INGRESS_NAME
          value: host-rules
        - name: SERVICE_NAME
          value: foo-bar-com
        image: gcr.io/k8s-staging-ingressconformance/echoserver@sha256:317f2dfad5e4e937275e79f783e5e7b81a88f0123a3988e8b06f9d7b1eb435c9
        livenessProbe:
          failureThreshold: 10
          httpGet:
            path: /health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 1
          successThreshold: 1
          timeoutSeconds: 1
        name: ingress-conformance-echo
        ports:
        - containerPort: 3000
          name: http
        readinessProbe:
          failureThreshold: 10
          httpGet:
            path: /health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 1
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
status: {}

---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  name: foo-bar-com
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 3000
  selector:
    app: host-rules-foo-bar-com
  type: NodePort
status:
  loadBalancer: {}

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: host-rules
  namespace: ingress-conformance-468v5
spec:
  rules:
  - host: '*.foo.com'
    http:
      paths:
      - backend:
          service:
            name: wildcard-foo-com
            port:
              number: 8080
        path: /
        pathType: Prefix
  - host: foo.bar.com
    http:
      paths:
      - backend:
          service:
            name: foo-bar-com
            port:
              name: http
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - foo.bar.com
    secretName: conformance-tls
status:
  loadBalancer: {}

    Given an Ingress resource                                                                   # feature.go:68 -> sigs.k8s.io/ingress-controller-conformance/test/conformance/hostrules.anIngressResource
      """
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: host-rules
      spec:
        tls:
          - hosts:
              - foo.bar.com
            secretName: conformance-tls
        rules:
          - host: "*.foo.com"
            http:
              paths:
                - path: /
                  pathType: Prefix
                  backend:
                    service:
                      name: wildcard-foo-com
                      port:
                        number: 8080

          - host: foo.bar.com
            http:
              paths:
                - path: /
                  pathType: Prefix
                  backend:
                    service:
                      name: foo-bar-com
                      port:
                        name: http
      """
bowei commented 3 years ago

/lgtm /approve

k8s-ci-robot commented 3 years ago

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: aledbf, bowei

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files: - ~~[OWNERS](https://github.com/kubernetes-sigs/ingress-controller-conformance/blob/master/OWNERS)~~ [bowei] Approvers can indicate their approval by writing `/approve` in a comment Approvers can cancel approval by writing `/approve cancel` in a comment