---
apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "",
          "interface": "eth0",
          "ips": [
              "10.129.2.2"
          ],
          "default": true,
          "dns": {}
      }]
    k8s.v1.cni.cncf.io/networks-status: |-
      [{
          "name": "",
          "interface": "eth0",
          "ips": [
              "10.129.2.2"
          ],
          "default": true,
          "dns": {}
      }]
  creationTimestamp: "2022-03-08T10:46:29Z"
  generateName: dns-default-
  labels:
    controller-revision-hash: 66f9bc576c
    dns.operator.openshift.io/daemonset-dns: default
    pod-template-generation: "1"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:generateName: {}
        f:labels:
          .: {}
          f:controller-revision-hash: {}
          f:dns.operator.openshift.io/daemonset-dns: {}
          f:pod-template-generation: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"2fea6b62-0759-4ef8-9dd4-1d3812596a84"}:
            .: {}
            f:apiVersion: {}
            f:blockOwnerDeletion: {}
            f:controller: {}
            f:kind: {}
            f:name: {}
            f:uid: {}
      f:spec:
        f:affinity:
          .: {}
          f:nodeAffinity:
            .: {}
            f:requiredDuringSchedulingIgnoredDuringExecution:
              .: {}
              f:nodeSelectorTerms: {}
        f:containers:
          k:{"name":"dns"}:
            .: {}
            f:args: {}
            f:command: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:livenessProbe:
              .: {}
              f:failureThreshold: {}
              f:httpGet:
                .: {}
                f:path: {}
                f:port: {}
                f:scheme: {}
              f:initialDelaySeconds: {}
              f:periodSeconds: {}
              f:successThreshold: {}
              f:timeoutSeconds: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":5353,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:name: {}
                f:protocol: {}
              k:{"containerPort":5353,"protocol":"UDP"}:
                .: {}
                f:containerPort: {}
                f:name: {}
                f:protocol: {}
            f:readinessProbe:
              .: {}
              f:failureThreshold: {}
              f:httpGet:
                .: {}
                f:path: {}
                f:port: {}
                f:scheme: {}
              f:initialDelaySeconds: {}
              f:periodSeconds: {}
              f:successThreshold: {}
              f:timeoutSeconds: {}
            f:resources:
              .: {}
              f:limits:
                .: {}
                f:memory: {}
              f:requests:
                .: {}
                f:cpu: {}
                f:memory: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
            f:volumeMounts:
              .: {}
              k:{"mountPath":"/etc/coredns"}:
                .: {}
                f:mountPath: {}
                f:name: {}
                f:readOnly: {}
          k:{"name":"dns-node-resolver"}:
            .: {}
            f:command: {}
            f:env:
              .: {}
              k:{"name":"CLUSTER_DOMAIN"}:
                .: {}
                f:name: {}
                f:value: {}
              k:{"name":"NAMESERVER"}:
                .: {}
                f:name: {}
                f:value: {}
              k:{"name":"SERVICES"}:
                .: {}
                f:name: {}
                f:value: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:resources:
              .: {}
              f:requests:
                .: {}
                f:cpu: {}
            f:securityContext:
              .: {}
              f:privileged: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
            f:volumeMounts:
              .: {}
              k:{"mountPath":"/etc/hosts"}:
                .: {}
                f:mountPath: {}
                f:name: {}
          k:{"name":"kube-rbac-proxy"}:
            .: {}
            f:args: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":9154,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:name: {}
                f:protocol: {}
            f:resources:
              .: {}
              f:requests:
                .: {}
                f:cpu: {}
                f:memory: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
            f:volumeMounts:
              .: {}
              k:{"mountPath":"/etc/tls/private"}:
                .: {}
                f:mountPath: {}
                f:name: {}
                f:readOnly: {}
        f:dnsPolicy: {}
        f:enableServiceLinks: {}
        f:nodeSelector:
          .: {}
          f:kubernetes.io/os: {}
        f:priorityClassName: {}
        f:restartPolicy: {}
        f:schedulerName: {}
        f:securityContext: {}
        f:serviceAccount: {}
        f:serviceAccountName: {}
        f:terminationGracePeriodSeconds: {}
        f:tolerations: {}
        f:volumes:
          .: {}
          k:{"name":"config-volume"}:
            .: {}
            f:configMap:
              .: {}
              f:defaultMode: {}
              f:items: {}
              f:name: {}
            f:name: {}
          k:{"name":"hosts-file"}:
            .: {}
            f:hostPath:
              .: {}
              f:path: {}
              f:type: {}
            f:name: {}
          k:{"name":"metrics-tls"}:
            .: {}
            f:name: {}
            f:secret:
              .: {}
              f:defaultMode: {}
              f:secretName: {}
    manager: kube-controller-manager
    operation: Update
    time: "2022-03-08T10:46:29Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:k8s.v1.cni.cncf.io/network-status: {}
          f:k8s.v1.cni.cncf.io/networks-status: {}
    manager: multus
    operation: Update
    time: "2022-03-08T10:47:57Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          k:{"type":"ContainersReady"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Initialized"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Ready"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
        f:containerStatuses: {}
        f:hostIP: {}
        f:phase: {}
        f:podIP: {}
        f:podIPs:
          .: {}
          k:{"ip":"10.129.2.2"}:
            .: {}
            f:ip: {}
        f:startTime: {}
    manager: kubelet
    operation: Update
    time: "2022-03-08T10:48:10Z"
  name: dns-default-fcp4w
  namespace: openshift-dns
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: dns-default
    uid: 2fea6b62-0759-4ef8-9dd4-1d3812596a84
  resourceVersion: "21482"
  selfLink: /api/v1/namespaces/openshift-dns/pods/dns-default-fcp4w
  uid: 4c33e786-f447-4b6e-8996-da88a7a51fe3
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - worker-1.case03116926.lab.upshift.rdu2.redhat.com
  containers:
  - args:
    - -conf
    - /etc/coredns/Corefile
    command:
    - coredns
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:4bfcb018947b57966ce4bc55f9d96768ffc0127195ae207324f3f8cde8ee1ebf
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 5
      httpGet:
        path: /health
        port: 8080
        scheme: HTTP
      initialDelaySeconds: 60
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    name: dns
    ports:
    - containerPort: 5353
      name: dns
      protocol: UDP
    - containerPort: 5353
      name: dns-tcp
      protocol: TCP
    readinessProbe:
      failureThreshold: 3
      httpGet:
        path: /ready
        port: 8181
        scheme: HTTP
      initialDelaySeconds: 10
      periodSeconds: 3
      successThreshold: 1
      timeoutSeconds: 3
    resources:
      limits:
        memory: 512Mi
      requests:
        cpu: 50m
        memory: 70Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: FallbackToLogsOnError
    volumeMounts:
    - mountPath: /etc/coredns
      name: config-volume
      readOnly: true
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: dns-token-rr72j
      readOnly: true
  - args:
    - --logtostderr
    - --secure-listen-address=:9154
    - --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    - --upstream=http://127.0.0.1:9153/
    - --tls-cert-file=/etc/tls/private/tls.crt
    - --tls-private-key-file=/etc/tls/private/tls.key
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:533973e0b3b8e64b0fd672a78ebabc5accc5f9a969c6a610ce14aa73d9685874
    imagePullPolicy: IfNotPresent
    name: kube-rbac-proxy
    ports:
    - containerPort: 9154
      name: metrics
      protocol: TCP
    resources:
      requests:
        cpu: 10m
        memory: 40Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /etc/tls/private
      name: metrics-tls
      readOnly: true
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: dns-token-rr72j
      readOnly: true
  - command:
    - /bin/bash
    - -c
    - |
      #!/bin/bash
      set -uo pipefail

      trap 'jobs -p | xargs kill || true; wait; exit 0' TERM

      OPENSHIFT_MARKER="openshift-generated-node-resolver"
      HOSTS_FILE="/etc/hosts"
      TEMP_FILE="/etc/hosts.tmp"

      IFS=', ' read -r -a services <<< "${SERVICES}"

      # Make a temporary file with the old hosts file's attributes.
      cp -f --attributes-only "${HOSTS_FILE}" "${TEMP_FILE}"

      while true; do
        declare -A svc_ips
        for svc in "${services[@]}"; do
          # Fetch service IP from cluster dns if present. We make several tries
          # to do it: IPv4, IPv6, IPv4 over TCP and IPv6 over TCP. The two last ones
          # are for deployments with Kuryr on older OpenStack (OSP13) - those do not
          # support UDP loadbalancers and require reaching DNS through TCP.
          cmds=('dig -t A @"${NAMESERVER}" +short "${svc}.${CLUSTER_DOMAIN}"|grep -v "^;"'
                'dig -t AAAA @"${NAMESERVER}" +short "${svc}.${CLUSTER_DOMAIN}"|grep -v "^;"'
                'dig -t A +tcp +retry=0 @"${NAMESERVER}" +short "${svc}.${CLUSTER_DOMAIN}"|grep -v "^;"'
                'dig -t AAAA +tcp +retry=0 @"${NAMESERVER}" +short "${svc}.${CLUSTER_DOMAIN}"|grep -v "^;"')
          for i in ${!cmds[*]}
          do
            ips=($(eval "${cmds[i]}"))
            if [[ "$?" -eq 0 && "${#ips[@]}" -ne 0 ]]; then
              svc_ips["${svc}"]="${ips[@]}"
              break
            fi
          done
        done

        # Update /etc/hosts only if we get valid service IPs
        # We will not update /etc/hosts when there is coredns service outage or api unavailability
        # Stale entries could exist in /etc/hosts if the service is deleted
        if [[ -n "${svc_ips[*]-}" ]]; then
          # Build a new hosts file from /etc/hosts with our custom entries filtered out
          grep -v "# ${OPENSHIFT_MARKER}" "${HOSTS_FILE}" > "${TEMP_FILE}"

          # Append resolver entries for services
          for svc in "${!svc_ips[@]}"; do
            for ip in ${svc_ips[${svc}]}; do
              echo "${ip} ${svc} ${svc}.${CLUSTER_DOMAIN} # ${OPENSHIFT_MARKER}" >> "${TEMP_FILE}"
            done
          done

          # TODO: Update /etc/hosts atomically to avoid any inconsistent behavior
          # Replace /etc/hosts with our modified version if needed
          cmp "${TEMP_FILE}" "${HOSTS_FILE}" || cp -f "${TEMP_FILE}" "${HOSTS_FILE}"
          # TEMP_FILE is not removed to avoid file create/delete and attributes copy churn
        fi
        sleep 60 & wait
        unset svc_ips
      done
    env:
    - name: SERVICES
      value: image-registry.openshift-image-registry.svc
    - name: NAMESERVER
      value: 172.30.0.10
    - name: CLUSTER_DOMAIN
      value: cluster.local
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f95ac948edf7e12a3d46e88cbab8c7010ef9c3af6df2ff002af28ba76445247d
    imagePullPolicy: IfNotPresent
    name: dns-node-resolver
    resources:
      requests:
        cpu: 5m
    securityContext:
      privileged: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: FallbackToLogsOnError
    volumeMounts:
    - mountPath: /etc/hosts
      name: hosts-file
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: dns-token-rr72j
      readOnly: true
  dnsPolicy: Default
  enableServiceLinks: true
  imagePullSecrets:
  - name: dns-dockercfg-lgbsx
  nodeName: worker-1.case03116926.lab.upshift.rdu2.redhat.com
  nodeSelector:
    kubernetes.io/os: linux
  preemptionPolicy: PreemptLowerPriority
  priority: 2000001000
  priorityClassName: system-node-critical
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: dns
  serviceAccountName: dns
  terminationGracePeriodSeconds: 30
  tolerations:
  - operator: Exists
  volumes:
  - configMap:
      defaultMode: 420
      items:
      - key: Corefile
        path: Corefile
      name: dns-default
    name: config-volume
  - hostPath:
      path: /etc/hosts
      type: File
    name: hosts-file
  - name: metrics-tls
    secret:
      defaultMode: 420
      secretName: dns-default-metrics-tls
  - name: dns-token-rr72j
    secret:
      defaultMode: 420
      secretName: dns-token-rr72j
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2022-03-08T10:47:23Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2022-03-08T10:48:10Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2022-03-08T10:48:10Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2022-03-08T10:46:29Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: cri-o://b6e10289f29183254550437e2fd8d75ea5af985390bccc87be11fc29e2ee4e45
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:4bfcb018947b57966ce4bc55f9d96768ffc0127195ae207324f3f8cde8ee1ebf
    imageID: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:4bfcb018947b57966ce4bc55f9d96768ffc0127195ae207324f3f8cde8ee1ebf
    lastState: {}
    name: dns
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2022-03-08T10:48:00Z"
  - containerID: cri-o://30e8027c67e54a4ff0a16220c9fb6f0c3b90bde5cf3cb116526028575f8377c1
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f95ac948edf7e12a3d46e88cbab8c7010ef9c3af6df2ff002af28ba76445247d
    imageID: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f95ac948edf7e12a3d46e88cbab8c7010ef9c3af6df2ff002af28ba76445247d
    lastState: {}
    name: dns-node-resolver
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2022-03-08T10:48:02Z"
  - containerID: cri-o://ff64f8b63f6ae567aee7b659442183326b743f2d428345811873144fb920043a
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:533973e0b3b8e64b0fd672a78ebabc5accc5f9a969c6a610ce14aa73d9685874
    imageID: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:533973e0b3b8e64b0fd672a78ebabc5accc5f9a969c6a610ce14aa73d9685874
    lastState: {}
    name: kube-rbac-proxy
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2022-03-08T10:48:00Z"
  hostIP: 10.0.90.58
  phase: Running
  podIP: 10.129.2.2
  podIPs:
  - ip: 10.129.2.2
  qosClass: Burstable
  startTime: "2022-03-08T10:47:23Z"
