apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  annotations:
    machineconfiguration.openshift.io/generated-by-controller-version: 8a0ada1b242e885baed8c7761a22c1e1c15d72ca
    machineconfiguration.openshift.io/release-image-version: 4.11.1
  creationTimestamp: "2022-08-29T09:06:18Z"
  generation: 1
  name: rendered-worker-rt-485e0aca2182afaaac3a28c45c29b725
  ownerReferences:
  - apiVersion: machineconfiguration.openshift.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: MachineConfigPool
    name: worker-rt
    uid: b06dbb50-da0d-4d16-b753-959744af31b8
  resourceVersion: "2601000910"
  uid: 8d3fb142-940d-4257-b1db-b6bc1661d977
spec:
  config:
    ignition:
      version: 3.2.0
    passwd:
      users:
      - name: core
        sshAuthorizedKeys:
        - |
          ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOeHlYMy97S9KKda5QdORi6wujhntAoFXIbfrF+rn9CK acardace@redhat.com
          ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAosCBXwnuPEceY/KQNMuedEkbCfwXGjck0Q0E8gCTuSo9trm9Zs6ogwa9DRXf8t9b0v8iaQiHJt9AoN4y/FVAsbfnvVSUJImwMbKFOKtrZhqUhebue/cn4RBXHNX28cLQ+vHTZxLQiEpi+MVMHz9I6Phmdzv77EYJbYmxmTn/EwhDfRq3ttdebUJfJFYaHqUN77LvfVUN16lftiYPWBHqna+r4tZFP7945HhiHv03hWeeXi+IEZ1mHrsJLb8+TYADQaZy1ZULkc/hnsRQD5dOowWGCPM3TVqd1oKlz26t2lnZs8KKKrVoL6DSzYrwa5lXrSk81SbAE0Dt3NNvolWG/Q== marcelo@dmt
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDupFv+k6sdYtViP4xWpfytN1FLHKvOkyDaH5yZIwcXlQsXOo5rVNxtqx/mbxixgMxvIosfbi8TIEYc7gJD9qZ2NKLZFato+nIH3sEJRdoIrGFfv3guj0QD5jZFXBsa1gQh3A/dVxqNDgOxxTgANLygu/AvHeE/PTxeUFt+rzmUPxnzDOJDPbjIWZOFFt13EzjQR2nQg3EUkfhc6KiVfMcKUrD1ffY6xbxpaLGB2mjSih2eIV9XE4jK11KA2GFYJAKJpEe5ihA9G6Dr295jA7w9QIcpnQ4sP8YV+PvS0GdDD4HlEucXljYqZbyO2fUxzwSdibEbFAOPdsV005Kejw03iafHCfrsBxrTdou0i7Dwvjtq51W/vzfU0PAj9cnt7VJDyfrJPGwJ3+C/gd3ltM18eYmyRo1b+9JFeugtTUfhjSqvE2jxK3GlQvJGuBXYSjeXv+jK4Z8ldMXfaTqJeMq2Jr9c6UFl+3mMItkSTmHt/+/V6eAA4OxhDV5tZ9CUuuc= root@dell-r640-kvm-qe-01.khw1.lab.eng.bos.redhat.com
        - |
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwXexG76NXQ/kaGbVNNwNUKmhlvZF6A4fXrn6N3H6d2iLhYf3MsZuJhgNerqte3tugWjphTaY7svxcjPyTDRoO5o3XWgxipR7pM6miemhlqDAfy1vyDQ51fjiEolB9FCcx9tUOip0ySD4YFI8yvj5nRyWOu/Kx87rOPQHXt58yB3L6jnUIajTHBk5n/HPxCcVwDy1MTOfMfrgnBLFQcujVRn6VmFxRWWchcHuYnVdSiJNk1Mv7qvA4S69Zpeg18ftYbTDU/bkFgk0r/NztPADEdTNYH9R7Jpg2oCzRMGYcnxMS5UDgxK7JNuIin/5Re2OkcX/rkNS2wcfa4WWI7f1PSnzTjv/jm9/s4qRvhV3Hcc903TWoSlq0DB16UF1PQyWE/fG4Y/oDAkQUYah8mSZSZiFPX5Be8dEEcDHtHEh+WPCmMPKkTrq0/lsss/xymZeg09ifTlPW1CyTIGCaHRNDZgh4PyYaZxFv7dqhtfFza+QYBfkfC39SHbo3zBlzEbk= ocohen@ocohen.tlv.csb
          ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA6r9rQkZF3a6AcIh99w7K5ndtexqMM0mCWn6yWJ4EgIOV0i3oUtSiUxCPqDTqTA2SsQU68u0OdH/YvqYPrZjOx5+SEfShQLYmzmTZzCwegSPYT2TZtDg8itHApYthv5IGVlkflH32jfhtviiCuh68Gi7f7j8jS03LChgv3HYWOqs= alitke@redhat.com
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNuXd+wnNXg3oFJvr0WKNnJ/4p3vggXC51UmXqAisLkPJgLLBMnZylVVsulq2nlfbgnf1hxcpDGg7K/9c+hV39N3hLX/zhWvoN9r9Ua0DNUO/WfeWcaTTc2FkDuBXT+p8hBBfw8iytvmpP2IiJqOddOWdkEuhC8nIG8YdKxlM64k/Ncs9v5AZY0ObfuweQWgoFeLqZd+SsBvpKsR/qLawLngTAARKVFk5+GO1l1nh6z9nSDOHIBierxel8XoFUp+BKsdVVtKxnuWlSSkbak9aO6d+HyhgjK5LxKnxxkn4zmm4w613hzbkYiKG4Q60rQxqINTo/7bfvfYVd/iaTsaQN danken@home
          ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFPKG6CYq3hj+MZQGnQ17RODFe8t7xAi7iWglHLAT/jk ryasharz@redhat.com
    storage:
      files:
      - contents:
          source: data:,%5Bmain%5D%0Aplugins%3Dkeyfile%2Cifcfg-rh%0A%5Bkeyfile%5D%0Apath%3D%2Fetc%2FNetworkManager%2Fsystem-connections%0A
        mode: 420
        overwrite: true
        path: /etc/NetworkManager/conf.d/20-keyfiles.conf
      - contents:
          source: data:,%5Bmain%5D%0Arc-manager%3Dunmanaged%0A%5Bconnection%5D%0Aipv6.dhcp-duid%3Dll%0Aipv6.dhcp-iaid%3Dmac%0A
        mode: 420
        overwrite: true
        path: /etc/NetworkManager/conf.d/99-ovirt.conf
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0Aset%20-eo%20pipefail%0AIFACE%3D%241%0ASTATUS%3D%242%0A%0A%23%20If%20%24DHCP6_FQDN_FQDN%20is%20not%20empty%20and%20is%20not%20localhost.localdomain%0A%5B%5B%20-n%20%22%24DHCP6_FQDN_FQDN%22%20%26%26%20%22%24DHCP6_FQDN_FQDN%22%20!%3D%20%22localhost.localdomain%22%20%26%26%20%22%24DHCP6_FQDN_FQDN%22%20%3D~%20%22.%22%20%5D%5D%20%26%26%20hostnamectl%20set-hostname%20--static%20--transient%20%24DHCP6_FQDN_FQDN%0Acase%20%22%24STATUS%22%20in%0A%20%20%20%20up%7Cdhcp4-change%7Cdhcp6-change)%0A%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%20triggered%20by%20%24%7B1%7D%20%24%7B2%7D.%22%0A%0A%20%20%20%20%23%20In%20DHCP%20connections%2C%20the%20resolv.conf%20content%20may%20be%20late%2C%20thus%20we%20wait%20for%20nameservers%0A%20%20%20%20timeout%2045s%20%2Fbin%2Fbash%20%3C%3CEOF%0A%20%20%20%20%20%20%20%20if%20%5B%5B%20%22%24STATUS%22%20%3D%3D%20dhcp*%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%20%22NM%20resolv-prepender%3A%20Checking%20for%20nameservers%20in%20%2Fvar%2Frun%2FNetworkManager%2Fresolv.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20!%20grep%20nameserver%20%2Fvar%2Frun%2FNetworkManager%2Fresolv.conf%3B%20do%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%20%22NM%20resolv-prepender%3A%20NM%20resolv.conf%20still%20empty%20of%20nameserver%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sleep%200.5%0A%20%20%20%20%20%20%20%20%20%20%20%20done%0A%20%20%20%20%20%20%20%20fi%0AEOF%0A%20%20%20%20%23%20Ensure%20resolv.conf%20exists%20and%20contains%20nameservers%20before%20we%20try%20to%20run%20podman%0A%20%20%20%20if%20%5B%5B%20!%20-e%20%2Fetc%2Fresolv.conf%20%5D%5D%20%7C%7C%20!%20grep%20-q%20nameserver%20%2Fetc%2Fresolv.conf%3B%20then%0A%20%20%20%20%20%20%20%20cp%20%2Fvar%2Frun%2FNetworkManager%2Fresolv.conf%20%2Fetc%2Fresolv.conf%0A%20%20%20%20fi%0A%0A%0A%20%20%20%20NAMESERVER_IP%3D%24(%2Fusr%2Fbin%2Fpodman%20run%20--rm%20%5C%0A%20%20%20%20%20%20%20%20--authfile%20%2Fvar%2Flib%2Fkubelet%2Fconfig.json%20%5C%0A%20%20%20%20%20%20%20%20--net%3Dhost%20%5C%0A%20%20%20%20%20%20%20%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489%20%5C%0A%20%20%20%20%20%20%20%20node-ip%20%5C%0A%20%20%20%20%20%20%20%20show%20%5C%0A%20%20%20%20%20%20%20%20%2210.35.16.57%22%20%5C%0A%20%20%20%20%20%20%20%20%2210.35.16.59%22)%0A%20%20%20%20DOMAINS%3D%22%24%7BIP4_DOMAINS%7D%20%24%7BIP6_DOMAINS%7D%20cnv.engineering.redhat.com%22%0A%20%20%20%20if%20%5B%5B%20-n%20%22%24NAMESERVER_IP%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20if%20systemctl%20-q%20is-enabled%20systemd-resolved%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20Setting%20up%20systemd-resolved%20for%20OKD%20domain%20and%20local%20IP%22%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%5B%5B%20!%20-f%20%2Fetc%2Fsystemd%2Fresolved.conf.d%2F60-kni.conf%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20Creating%20%2Fetc%2Fsystemd%2Fresolved.conf.d%2F60-kni.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mkdir%20-p%20%2Fetc%2Fsystemd%2Fresolved.conf.d%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22%5BResolve%5D%22%20%3E%20%2Fetc%2Fsystemd%2Fresolved.conf.d%2F60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22DNS%3D%24NAMESERVER_IP%22%20%3E%3E%20%2Fetc%2Fsystemd%2Fresolved.conf.d%2F60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22Domains%3D%24DOMAINS%22%20%3E%3E%20%2Fetc%2Fsystemd%2Fresolved.conf.d%2F60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20systemctl%20-q%20is-active%20systemd-resolved%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20restarting%20systemd-resolved%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20systemctl%20restart%20systemd-resolved%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20Prepending%20'nameserver%20%24NAMESERVER_IP'%20to%20%2Fetc%2Fresolv.conf%20(other%20nameservers%20from%20%2Fvar%2Frun%2FNetworkManager%2Fresolv.conf)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-e%20%22%2FGenerated%20by%2Fc%23%20Generated%20by%20KNI%20resolv%20prepender%20NM%20dispatcher%20script%22%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Fvar%2Frun%2FNetworkManager%2Fresolv.conf%20%3E%20%2Fetc%2Fresolv.tmp%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-i%20%220%2C%2F%5Enameserver.*%2Fs%2F%2Fnameserver%20%24NAMESERVER_IP%5Cn%5C0%2F%22%20%2Fetc%2Fresolv.tmp%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20Make%20sure%20cluster%20domain%20is%20first%20in%20the%20search%20list%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-i%20%22s%2F%5Esearch%20%5C(.*%5C)%2Fsearch%20cnv.engineering.redhat.com%20%5C1%2F%22%20%2Fetc%2Fresolv.tmp%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20Remove%20duplicate%20cluster%20domain%20entries%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-i%20%22s%2F%5C(search%20cnv.engineering.redhat.com.*%5C)%20cnv.engineering.redhat.com%5C(%20.*%5C%7C%24%5C)%2F%5C1%5C2%2F%22%20%2Fetc%2Fresolv.tmp%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20Only%20leave%20the%20first%203%20nameservers%20in%20%2Fetc%2Fresolv.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-i%20'%3Aa%20%24!%7BN%3B%20ba%7D%3B%20s%2F%5C(%5E%5C%7C%5Cn%5C)nameserver%2F%5Cn%23%20nameserver%2F4g'%20%2Fetc%2Fresolv.tmp%0A%20%20%20%20%20%20%20%20%20%20%20%20mv%20-f%20%2Fetc%2Fresolv.tmp%20%2Fetc%2Fresolv.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20Workaround%20for%20bz%201929160.%20Reload%20NetworkManager%20to%20force%20it%20to%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20re-run%20the%20lookup%20of%20the%20hostname%20now%20that%20we%20know%20we%20have%20DNS%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20servers%20configured%20correctly%20in%20resolv.conf.%0A%20%20%20%20%20%20%20%20%20%20%20%20nmcli%20general%20reload%20dns-rc%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%20%20%20%20%3B%3B%0A%20%20%20%20*)%0A%20%20%20%20%3B%3B%0Aesac%0A
        mode: 493
        overwrite: true
        path: /etc/NetworkManager/dispatcher.d/30-resolv-prepender
      - contents:
          source: data:,-----BEGIN%20CERTIFICATE-----%0AMIIDsjCCApqgAwIBAgIBBjANBgkqhkiG9w0BAQsFADBOMRAwDgYDVQQKDAdSZWQg%0ASGF0MQ0wCwYDVQQLDARwcm9kMSswKQYDVQQDDCJJbnRlcm1lZGlhdGUgQ2VydGlm%0AaWNhdGUgQXV0aG9yaXR5MB4XDTE1MTAxNDE3NDc1NloXDTM1MTAwOTE3NDc1Nlow%0AQTEQMA4GA1UECgwHUmVkIEhhdDENMAsGA1UECwwEcHJvZDEeMBwGA1UEAwwVQ2Vy%0AdGlmaWNhdGUgQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC%0AAQEAzTein1EAuLAZFgvvfDL3okBqn%2Fxg9RVGa7r3Kuw4pVPa9QnkCkFbnaipnyUd%0AR331%2FA4RAHHZmVuddrbvh6C%2BYtDs%2BP8DLRC%2BYDE4VkW9ZRtNbt302z3jY4Y62W1w%0Ahmsl7IV57ISC8kUbtekLXTuVd3InEywAIc3fyiTi7FsldIngunuxuNjjQD04DGnr%0ARmbBAmwfKxaXaT5qciq5kcFaYKQ3P0p6wT0gaDZ7C177W1uorIXCm9J6v8P7GLXD%0AscAvN3pgZRJ6Ocj5Fpnkd0nP6kpWhlO8%2F5B1CUggKaZXdm0kR9J2KOX4wrcjh3xn%0A6Rby%2FhijEwplkgUALIBgRTe3ewIDAQABo4GnMIGkMB8GA1UdIwQYMBaAFDDeBFSh%0AhgKfEfpQ%2BQVwpyjAwE%2F8MBIGA1UdEwEB%2FwQIMAYBAf8CAQAwDgYDVR0PAQH%2FBAQD%0AAgHGMB0GA1UdDgQWBBR72gn1SV3Z11zJNvhV0huXnhEvfjA%2BBggrBgEFBQcBAQQy%0AMDAwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLnJlZGhhdC5jb20vY2EvaW50b2Nz%0AcC8wDQYJKoZIhvcNAQELBQADggEBAJeV5FNFhLYc24NZBDTuMFGDLKuHwJmdF4uF%0A8Tt5g%2FMj4Mi3qSbu2Y%2B3gk4UQ45GD6HQf%2BJpA4hHsxJ2L0F39oVQ39QS3MgRoSk3%0ALfpKYkzQntRFzSr1OHMA06tHNPlhylGRc%2FgdLkaLjeFYj%2FFhz5Htg9vv9dF4h8bl%0AX6KXw%2F3RH9f5YgKqydtEZtZ0isA4%2B55gf0m7I0O5lNK3mgY%2FuBmIk%2FjSI9WqczrD%0AWGf78pvkTQ2PcYg%2FWiCv%2BAVsaSaiEDUf4rDj55wQ30h78Ox5J2izd4I6QylB9Lpu%0AfQEw%2BcWRxwFPJujSOTSKRHZDo1UwOIQbxqkbznSHlLCICEXxuvQ%3D%0A-----END%20CERTIFICATE-----%0A
        mode: 384
        overwrite: true
        path: /etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt
      - contents:
          source: data:,%23%20This%20file%20is%20managed%20by%20machine-config-operator.%0A%23%20Suppress%20audit%20rules%20which%20always%20trigger%20for%20container%0A%23%20workloads%2C%20as%20they%20spam%20the%20audit%20log.%20%20Workloads%20are%20expected%0A%23%20to%20be%20dynamic%2C%20and%20the%20networking%20stack%20uses%20iptables.%0A-a%20exclude%2Calways%20-F%20msgtype%3DNETFILTER_CFG%0A%23%20The%20default%20bridged%20networking%20enables%20promiscuous%20on%20the%20veth%0A%23%20device.%20%20Ideally%2C%20we'd%20teach%20audit%20to%20ignore%20only%20veth%20devices%2C%0A%23%20since%20one%20might%20legitimately%20care%20about%20promiscuous%20on%20real%20physical%0A%23%20devices.%20%20But%20we%20can't%20currently%20differentiate.%0A-a%20exclude%2Calways%20-F%20msgtype%3DANOM_PROMISCUOUS%0A
        mode: 420
        overwrite: true
        path: /etc/audit/rules.d/mco-audit-quiet-containers.rules
      - contents:
          source: data:,mode%3A%20unicast%0A
        mode: 420
        overwrite: true
        path: /etc/keepalived/monitor.conf
      - contents:
          source: data:,r%20%2Fetc%2Fkubernetes%2Fcni%2Fnet.d%2F80-openshift-network.conf%0Ar%20%2Fetc%2Fkubernetes%2Fcni%2Fnet.d%2F10-ovn-kubernetes.conf%0Ad%20%2Frun%2Fmultus%2Fcni%2Fnet.d%2F%200755%20root%20root%20-%20-%0AD%20%2Fvar%2Flib%2Fcni%2Fnetworks%2Fopenshift-sdn%2F%200755%20root%20root%20-%20-%0A
        mode: 420
        overwrite: true
        path: /etc/tmpfiles.d/cleanup-cni.conf
      - contents:
          source: data:,
        mode: 420
        overwrite: true
        path: /etc/kubernetes/static-pod-resources/configmaps/cloud-config/ca-bundle.pem
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0Aset%20-eux%0A%23%20This%20file%20is%20not%20needed%20anymore%20in%204.7%2B%2C%20but%20when%20rolling%20back%20to%204.6%0A%23%20the%20ovs%20pod%20needs%20it%20to%20know%20ovs%20is%20running%20on%20the%20host.%0Atouch%20%2Fvar%2Frun%2Fovs-config-executed%0ANM_CONN_PATH%3D%22%2Fetc%2FNetworkManager%2Fsystem-connections%22%0A%0A%23%20this%20flag%20tracks%20if%20any%20config%20change%20was%20made%0Anm_config_changed%3D0%0A%0AMANAGED_NM_CONN_SUFFIX%3D%22-slave-ovs-clone%22%0A%23%20Workaround%20to%20ensure%20OVS%20is%20installed%20due%20to%20bug%20in%20systemd%20Requires%3A%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1888017%0Acopy_nm_conn_files()%20%7B%0A%20%20local%20dst_path%3D%22%241%22%0A%20%20for%20src%20in%20%22%24%7BMANAGED_NM_CONN_FILES%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20src_path%3D%24(dirname%20%22%24src%22)%0A%20%20%20%20file%3D%24(basename%20%22%24src%22)%0A%20%20%20%20if%20%5B%20-f%20%22%24src_path%2F%24file%22%20%5D%3B%20then%0A%20%20%20%20%20%20if%20%5B%20!%20-f%20%22%24dst_path%2F%24file%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22Copying%20configuration%20%24file%22%0A%20%20%20%20%20%20%20%20cp%20%22%24src_path%2F%24file%22%20%22%24dst_path%2F%24file%22%0A%20%20%20%20%20%20elif%20!%20cmp%20--silent%20%22%24src_path%2F%24file%22%20%22%24dst_path%2F%24file%22%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22Copying%20updated%20configuration%20%24file%22%0A%20%20%20%20%20%20%20%20cp%20-f%20%22%24src_path%2F%24file%22%20%22%24dst_path%2F%24file%22%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20echo%20%22Skipping%20%24file%20since%20it's%20equal%20at%20destination%22%0A%20%20%20%20%20%20fi%0A%20%20%20%20else%0A%20%20%20%20%20%20echo%20%22Skipping%20%24file%20since%20it%20does%20not%20exist%20at%20source%22%0A%20%20%20%20fi%0A%20%20done%0A%7D%0A%0Aupdate_nm_conn_files()%20%7B%0A%20%20bridge_name%3D%24%7B1%7D%0A%20%20port_name%3D%24%7B2%7D%0A%20%20ovs_port%3D%22ovs-port-%24%7Bbridge_name%7D%22%0A%20%20ovs_interface%3D%22ovs-if-%24%7Bbridge_name%7D%22%0A%20%20default_port_name%3D%22ovs-port-%24%7Bport_name%7D%22%20%23%20ovs-port-phys0%0A%20%20bridge_interface_name%3D%22ovs-if-%24%7Bport_name%7D%22%20%23%20ovs-if-phys0%0A%20%20%23%20In%20RHEL7%20files%20in%20%2F%7Betc%2Crun%7D%2FNetworkManager%2Fsystem-connections%20end%20without%20the%20suffix%20'.nmconnection'%2C%20whereas%20in%20RHCOS%20they%20end%20with%20the%20suffix.%0A%20%20MANAGED_NM_CONN_FILES%3D(%24(echo%20%22%24%7BNM_CONN_PATH%7D%22%2F%7B%22%24bridge_name%22%2C%22%24ovs_interface%22%2C%22%24ovs_port%22%2C%22%24bridge_interface_name%22%2C%22%24default_port_name%22%7D%7B%2C.nmconnection%7D))%0A%20%20shopt%20-s%20nullglob%0A%20%20MANAGED_NM_CONN_FILES%2B%3D(%24%7BNM_CONN_PATH%7D%2F*%24%7BMANAGED_NM_CONN_SUFFIX%7D.nmconnection%20%24%7BNM_CONN_PATH%7D%2F*%24%7BMANAGED_NM_CONN_SUFFIX%7D)%0A%20%20shopt%20-u%20nullglob%0A%7D%0A%0A%23%20Used%20to%20remove%20files%20managed%20by%20configure-ovs%0Arm_nm_conn_files()%20%7B%0A%20%20for%20file%20in%20%22%24%7BMANAGED_NM_CONN_FILES%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20if%20%5B%20-f%20%22%24file%22%20%5D%3B%20then%0A%20%20%20%20%20%20rm%20-f%20%22%24file%22%0A%20%20%20%20%20%20echo%20%22Removed%20nmconnection%20file%20%24file%22%0A%20%20%20%20%20%20nm_config_changed%3D1%0A%20%20%20%20fi%0A%20%20done%0A%7D%0A%0A%23%20Used%20to%20clone%20a%20slave%20connection%20by%20uuid%2C%20returns%20new%20uuid%0Aclone_slave_connection()%20%7B%0A%20%20local%20uuid%3D%22%241%22%0A%20%20local%20old_name%0A%20%20old_name%3D%22%24(nmcli%20-g%20connection.id%20connection%20show%20uuid%20%22%24uuid%22)%22%0A%20%20local%20new_name%3D%22%24%7Bold_name%7D%24%7BMANAGED_NM_CONN_SUFFIX%7D%22%0A%20%20if%20nmcli%20connection%20show%20id%20%22%24%7Bnew_name%7D%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20echo%20%22WARN%3A%20existing%20ovs%20slave%20%24%7Bnew_name%7D%20connection%20profile%20file%20found%2C%20overwriting...%22%20%3E%262%0A%20%20%20%20nmcli%20connection%20delete%20id%20%22%24%7Bnew_name%7D%22%20%26%3E%20%2Fdev%2Fnull%0A%20%20fi%0A%20%20nmcli%20connection%20clone%20%24uuid%20%22%24%7Bnew_name%7D%22%20%26%3E%20%2Fdev%2Fnull%0A%20%20nmcli%20-g%20connection.uuid%20connection%20show%20%22%24%7Bnew_name%7D%22%0A%7D%0A%0A%23%20Used%20to%20replace%20an%20old%20master%20connection%20uuid%20with%20a%20new%20one%20on%20all%20connections%0Areplace_connection_master()%20%7B%0A%20%20local%20old%3D%22%241%22%0A%20%20local%20new%3D%22%242%22%0A%20%20for%20conn_uuid%20in%20%24(nmcli%20-g%20UUID%20connection%20show)%20%3B%20do%0A%20%20%20%20if%20%5B%20%22%24(nmcli%20-g%20connection.master%20connection%20show%20uuid%20%22%24conn_uuid%22)%22%20!%3D%20%22%24old%22%20%5D%3B%20then%0A%20%20%20%20%20%20continue%0A%20%20%20%20fi%0A%0A%20%20%20%20local%20active_state%3D%24(nmcli%20-g%20GENERAL.STATE%20connection%20show%20%22%24conn_uuid%22)%0A%20%20%20%20local%20autoconnect%3D%24(nmcli%20-g%20connection.autoconnect%20connection%20show%20%22%24conn_uuid%22)%0A%20%20%20%20if%20%5B%20%22%24active_state%22%20!%3D%20%22activated%22%20%5D%20%26%26%20%5B%20%22%24autoconnect%22%20!%3D%20%22yes%22%20%5D%3B%20then%0A%20%20%20%20%20%20%23%20Assume%20that%20slave%20profiles%20intended%20to%20be%20used%20are%20those%20that%20are%3A%0A%20%20%20%20%20%20%23%20-%20active%0A%20%20%20%20%20%20%23%20-%20or%20inactive%20(which%20might%20be%20due%20to%20link%20being%20down)%20but%20to%20be%20autoconnected.%0A%20%20%20%20%20%20%23%20Otherwise%2C%20ignore%20them.%0A%20%20%20%20%20%20continue%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20make%20changes%20for%20slave%20profiles%20in%20a%20new%20clone%0A%20%20%20%20local%20new_uuid%0A%20%20%20%20new_uuid%3D%24(clone_slave_connection%20%24conn_uuid)%0A%0A%20%20%20%20nmcli%20conn%20mod%20uuid%20%24new_uuid%20connection.master%20%22%24new%22%0A%20%20%20%20nmcli%20conn%20mod%20%24new_uuid%20connection.autoconnect-priority%20100%0A%20%20%20%20nmcli%20conn%20mod%20%24new_uuid%20connection.autoconnect%20no%0A%20%20%20%20echo%20%22Replaced%20master%20%24old%20with%20%24new%20for%20slave%20profile%20%24new_uuid%22%0A%20%20done%0A%7D%0A%0A%23%20when%20creating%20the%20bridge%2C%20we%20use%20a%20value%20lower%20than%20NM's%20ethernet%20device%20default%20route%20metric%0A%23%20(we%20pick%2048%20and%2049%20to%20be%20lower%20than%20anything%20that%20NM%20chooses%20by%20default)%0ABRIDGE_METRIC%3D%2248%22%0ABRIDGE1_METRIC%3D%2249%22%0A%23%20Given%20an%20interface%2C%20generates%20NM%20configuration%20to%20add%20to%20an%20OVS%20bridge%0Aconvert_to_bridge()%20%7B%0A%20%20local%20iface%3D%24%7B1%7D%0A%20%20local%20bridge_name%3D%24%7B2%7D%0A%20%20local%20port_name%3D%24%7B3%7D%0A%20%20local%20bridge_metric%3D%24%7B4%7D%0A%20%20local%20ovs_port%3D%22ovs-port-%24%7Bbridge_name%7D%22%0A%20%20local%20ovs_interface%3D%22ovs-if-%24%7Bbridge_name%7D%22%0A%20%20local%20default_port_name%3D%22ovs-port-%24%7Bport_name%7D%22%20%23%20ovs-port-phys0%0A%20%20local%20bridge_interface_name%3D%22ovs-if-%24%7Bport_name%7D%22%20%23%20ovs-if-phys0%0A%0A%20%20if%20%5B%20%22%24iface%22%20%3D%20%22%24bridge_name%22%20%5D%3B%20then%0A%20%20%20%20%23%20handle%20vlans%20and%20bonds%20etc%20if%20they%20have%20already%20been%0A%20%20%20%20%23%20configured%20via%20nm%20key%20files%20and%20br-ex%20is%20already%20up%0A%20%20%20%20ifaces%3D%24(ovs-vsctl%20list-ifaces%20%24%7Biface%7D)%0A%20%20%20%20for%20intf%20in%20%24ifaces%3B%20do%20configure_driver_options%20%24intf%3B%20done%0A%20%20%20%20echo%20%22Networking%20already%20configured%20and%20up%20for%20%24%7Bbridge-name%7D!%22%0A%20%20%20%20return%0A%20%20fi%0A%0A%20%20%23%20flag%20to%20reload%20NM%20to%20account%20for%20all%20the%20configuration%20changes%0A%20%20%23%20going%20forward%0A%20%20nm_config_changed%3D1%0A%0A%20%20if%20%5B%20-z%20%22%24iface%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22ERROR%3A%20Unable%20to%20find%20default%20gateway%20interface%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%20%20%23%20find%20the%20MAC%20from%20OVS%20config%20or%20the%20default%20interface%20to%20use%20for%20OVS%20internal%20port%0A%20%20%23%20this%20prevents%20us%20from%20getting%20a%20different%20DHCP%20lease%20and%20dropping%20connection%0A%20%20if%20!%20iface_mac%3D%24(%3C%22%2Fsys%2Fclass%2Fnet%2F%24%7Biface%7D%2Faddress%22)%3B%20then%0A%20%20%20%20echo%20%22Unable%20to%20determine%20default%20interface%20MAC%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%0A%20%20echo%20%22MAC%20address%20found%20for%20iface%3A%20%24%7Biface%7D%3A%20%24%7Biface_mac%7D%22%0A%0A%20%20%23%20find%20MTU%20from%20original%20iface%0A%20%20iface_mtu%3D%24(ip%20link%20show%20%22%24iface%22%20%7C%20awk%20'%7Bprint%20%245%3B%20exit%7D')%0A%20%20if%20%5B%5B%20-z%20%22%24iface_mtu%22%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22Unable%20to%20determine%20default%20interface%20MTU%2C%20defaulting%20to%201500%22%0A%20%20%20%20iface_mtu%3D1500%0A%20%20else%0A%20%20%20%20echo%20%22MTU%20found%20for%20iface%3A%20%24%7Biface%7D%3A%20%24%7Biface_mtu%7D%22%0A%20%20fi%0A%0A%20%20%23%20store%20old%20conn%20for%20later%0A%20%20old_conn%3D%24(nmcli%20--fields%20UUID%2CDEVICE%20conn%20show%20--active%20%7C%20awk%20%22%2F%5Cs%24%7Biface%7D%5Cs*%5C%24%2F%20%7Bprint%20%5C%241%7D%22)%0A%0A%20%20%23%20create%20bridge%0A%20%20if%20!%20nmcli%20connection%20show%20%22%24bridge_name%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20%22%24bridge_name%22%0A%20%20%20%20add_nm_conn%20type%20ovs-bridge%20con-name%20%22%24bridge_name%22%20conn.interface%20%22%24bridge_name%22%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%0A%20%20fi%0A%0A%20%20%23%20find%20default%20port%20to%20add%20to%20bridge%0A%20%20if%20!%20nmcli%20connection%20show%20%22%24default_port_name%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-port%20%22%24bridge_name%22%20%24%7Biface%7D%0A%20%20%20%20add_nm_conn%20type%20ovs-port%20conn.interface%20%24%7Biface%7D%20master%20%22%24bridge_name%22%20con-name%20%22%24default_port_name%22%0A%20%20fi%0A%0A%20%20if%20!%20nmcli%20connection%20show%20%22%24ovs_port%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-port%20%22%24bridge_name%22%20%22%24bridge_name%22%0A%20%20%20%20add_nm_conn%20type%20ovs-port%20conn.interface%20%22%24bridge_name%22%20master%20%22%24bridge_name%22%20con-name%20%22%24ovs_port%22%0A%20%20fi%0A%0A%20%20extra_phys_args%3D()%0A%20%20%23%20check%20if%20this%20interface%20is%20a%20vlan%2C%20bond%2C%20team%2C%20or%20ethernet%20type%0A%20%20if%20%5B%20%24(nmcli%20--get-values%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%20%3D%3D%20%22vlan%22%20%5D%3B%20then%0A%20%20%20%20iface_type%3Dvlan%0A%20%20%20%20vlan_id%3D%24(nmcli%20--get-values%20vlan.id%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20if%20%5B%20-z%20%22%24vlan_id%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22ERROR%3A%20unable%20to%20determine%20vlan_id%20for%20vlan%20connection%3A%20%24%7Bold_conn%7D%22%0A%20%20%20%20%20%20exit%201%0A%20%20%20%20fi%0A%20%20%20%20vlan_parent%3D%24(nmcli%20--get-values%20vlan.parent%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20if%20%5B%20-z%20%22%24vlan_parent%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22ERROR%3A%20unable%20to%20determine%20vlan_parent%20for%20vlan%20connection%3A%20%24%7Bold_conn%7D%22%0A%20%20%20%20%20%20exit%201%0A%20%20%20%20fi%0A%20%20%20%20extra_phys_args%3D(%20dev%20%22%24%7Bvlan_parent%7D%22%20id%20%22%24%7Bvlan_id%7D%22%20)%0A%20%20elif%20%5B%20%24(nmcli%20--get-values%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%20%3D%3D%20%22bond%22%20%5D%3B%20then%0A%20%20%20%20iface_type%3Dbond%0A%20%20%20%20%23%20check%20bond%20options%0A%20%20%20%20bond_opts%3D%24(nmcli%20--get-values%20bond.options%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20if%20%5B%20-n%20%22%24bond_opts%22%20%5D%3B%20then%0A%20%20%20%20%20%20extra_phys_args%2B%3D(%20bond.options%20%22%24%7Bbond_opts%7D%22%20)%0A%20%20%20%20%20%20MODE_REGEX%3D%22(%5E%7C%2C)mode%3Dactive-backup(%2C%7C%24)%22%0A%20%20%20%20%20%20MAC_REGEX%3D%22(%5E%7C%2C)fail_over_mac%3D(1%7Cactive%7C2%7Cfollow)(%2C%7C%24)%22%0A%20%20%20%20%20%20if%20%5B%5B%20%24bond_opts%20%3D~%20%24MODE_REGEX%20%5D%5D%20%26%26%20%5B%5B%20%24bond_opts%20%3D~%20%24MAC_REGEX%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20clone_mac%3D0%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%20%20elif%20%5B%20%24(nmcli%20--get-values%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%20%3D%3D%20%22team%22%20%5D%3B%20then%0A%20%20%20%20iface_type%3Dteam%0A%20%20%20%20%23%20check%20team%20config%20options%0A%20%20%20%20team_config_opts%3D%24(nmcli%20--get-values%20team.config%20-e%20no%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20if%20%5B%20-n%20%22%24team_config_opts%22%20%5D%3B%20then%0A%20%20%20%20%20%20%23%20team.config%20is%20json%2C%20remove%20spaces%20to%20avoid%20problems%20later%20on%0A%20%20%20%20%20%20extra_phys_args%2B%3D(%20team.config%20%22%24%7Bteam_config_opts%2F%2F%5B%5B%3Aspace%3A%5D%5D%2F%7D%22%20)%0A%20%20%20%20%20%20team_mode%3D%24(echo%20%22%24%7Bteam_config_opts%7D%22%20%7C%20jq%20-r%20%22.runner.name%20%2F%2F%20empty%22)%0A%20%20%20%20%20%20team_mac_policy%3D%24(echo%20%22%24%7Bteam_config_opts%7D%22%20%7C%20jq%20-r%20%22.runner.hwaddr_policy%20%2F%2F%20empty%22)%0A%20%20%20%20%20%20MAC_REGEX%3D%22(by_active%7Conly_active)%22%0A%20%20%20%20%20%20if%20%5B%20%22%24team_mode%22%20%3D%20%22activebackup%22%20%5D%20%26%26%20%5B%5B%20%22%24team_mac_policy%22%20%3D~%20%24MAC_REGEX%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20clone_mac%3D0%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%20%20else%0A%20%20%20%20iface_type%3D802-3-ethernet%0A%20%20fi%0A%0A%20%20if%20%5B%20!%20%22%24%7Bclone_mac%3A-%7D%22%20%3D%20%220%22%20%5D%3B%20then%0A%20%20%20%20%23%20In%20active-backup%20link%20aggregation%2C%20with%20fail_over_mac%20mode%20enabled%2C%0A%20%20%20%20%23%20cloning%20the%20mac%20address%20is%20not%20supported.%20It%20is%20possible%20then%20that%0A%20%20%20%20%23%20br-ex%20has%20a%20different%20mac%20address%20than%20the%20bond%20which%20might%20be%0A%20%20%20%20%23%20troublesome%20on%20some%20platforms%20where%20the%20nic%20won't%20accept%20packets%20with%0A%20%20%20%20%23%20a%20different%20destination%20mac.%20But%20nobody%20has%20complained%20so%20far%20so%20go%20on%0A%20%20%20%20%23%20with%20what%20we%20got.%20%0A%20%20%20%20%0A%20%20%20%20%23%20Do%20set%20it%20though%20for%20other%20link%20aggregation%20configurations%20where%20the%0A%20%20%20%20%23%20mac%20address%20would%20otherwise%20depend%20on%20enslave%20order%20for%20which%20we%20have%0A%20%20%20%20%23%20no%20control%20going%20forward.%0A%20%20%20%20extra_phys_args%2B%3D(%20802-3-ethernet.cloned-mac-address%20%22%24%7Biface_mac%7D%22%20)%0A%20%20fi%0A%0A%20%20%23%20use%20%24%7Bextra_phys_args%5B%40%5D%2B%22%24%7Bextra_phys_args%5B%40%5D%7D%22%7D%20instead%20of%20%24%7Bextra_phys_args%5B%40%5D%7D%20to%20be%20compatible%20with%20bash%204.2%20in%20RHEL7.9%0A%20%20if%20!%20nmcli%20connection%20show%20%22%24bridge_interface_name%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20destroy%20interface%20%24%7Biface%7D%0A%20%20%20%20add_nm_conn%20type%20%24%7Biface_type%7D%20conn.interface%20%24%7Biface%7D%20master%20%22%24default_port_name%22%20con-name%20%22%24bridge_interface_name%22%20%5C%0A%20%20%20%20connection.autoconnect-priority%20100%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%20%24%7Bextra_phys_args%5B%40%5D%2B%22%24%7Bextra_phys_args%5B%40%5D%7D%22%7D%0A%20%20fi%0A%0A%20%20%23%20Get%20the%20new%20connection%20uuids%0A%20%20new_conn%3D%24(nmcli%20-g%20connection.uuid%20conn%20show%20%22%24bridge_interface_name%22)%0A%20%20ovs_port_conn%3D%24(nmcli%20-g%20connection.uuid%20conn%20show%20%22%24ovs_port%22)%0A%0A%20%20%23%20Update%20connections%20with%20master%20property%20set%20to%20use%20the%20new%20connection%0A%20%20replace_connection_master%20%24old_conn%20%24new_conn%0A%20%20replace_connection_master%20%24iface%20%24new_conn%0A%0A%20%20if%20!%20nmcli%20connection%20show%20%22%24ovs_interface%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20destroy%20interface%20%22%24bridge_name%22%0A%20%20%20%20if%20nmcli%20--fields%20ipv4.method%2Cipv6.method%20conn%20show%20%24old_conn%20%7C%20grep%20manual%3B%20then%0A%20%20%20%20%20%20echo%20%22Static%20IP%20addressing%20detected%20on%20default%20gateway%20connection%3A%20%24%7Bold_conn%7D%22%0A%20%20%20%20%20%20%23%20clone%20the%20old%20connection%20to%20get%20the%20address%20settings%0A%20%20%20%20%20%20%23%20prefer%20cloning%20vs%20copying%20the%20connection%20file%20to%20avoid%20problems%20with%20selinux%0A%20%20%20%20%20%20nmcli%20conn%20clone%20%22%24%7Bold_conn%7D%22%20%22%24%7Bovs_interface%7D%22%0A%20%20%20%20%20%20shopt%20-s%20nullglob%0A%20%20%20%20%20%20new_conn_files%3D(%24%7BNM_CONN_PATH%7D%2F%22%24%7Bovs_interface%7D%22*)%0A%20%20%20%20%20%20shopt%20-u%20nullglob%0A%20%20%20%20%20%20if%20%5B%20%24%7B%23new_conn_files%5B%40%5D%7D%20-ne%201%20%5D%20%7C%7C%20%5B%20!%20-f%20%22%24%7Bnew_conn_files%5B0%5D%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22ERROR%3A%20could%20not%20find%20%24%7Bovs_interface%7D%20conn%20file%20after%20cloning%20from%20%24%7Bold_conn%7D%22%0A%20%20%20%20%20%20%20%20exit%201%0A%20%20%20%20%20%20fi%0A%20%20%20%20%20%20new_conn_file%3D%22%24%7Bnew_conn_files%5B0%5D%7D%22%0A%0A%20%20%20%20%20%20%23%20modify%20basic%20connection%20settings%2C%20some%20of%20which%20can't%20be%20modified%20through%20nmcli%0A%20%20%20%20%20%20sed%20-i%20'%2F%5Emulti-connect%3D.*%24%2Fd'%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20sed%20-i%20'%2F%5Eautoconnect%3D.*%24%2Fd'%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20sed%20-i%20'%2F%5E%5C%5Bconnection%5C%5D%24%2Fa%20autoconnect%3Dfalse'%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20sed%20-i%20'%2F%5E%5C%5Bconnection%5C%5D%24%2F%2C%2F%5E%5C%5B%2F%20s%2F%5Etype%3D.*%24%2Ftype%3Dovs-interface%2F'%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20sed%20-i%20'%2F%5E%5C%5Bconnection%5C%5D%24%2Fa%20slave-type%3Dovs-port'%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20sed%20-i%20'%2F%5E%5C%5Bconnection%5C%5D%24%2Fa%20master%3D'%22%24ovs_port_conn%22%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20cat%20%3C%3CEOF%20%3E%3E%20%24%7Bnew_conn_file%7D%0A%5Bovs-interface%5D%0Atype%3Dinternal%0AEOF%0A%0A%20%20%20%20%20%20%23%20reload%20the%20connection%20and%20modify%20some%20more%20settings%20through%20nmcli%0A%20%20%20%20%20%20nmcli%20c%20load%20%24%7Bnew_conn_file%7D%0A%20%20%20%20%20%20nmcli%20c%20mod%20%22%24%7Bovs_interface%7D%22%20conn.interface%20%22%24bridge_name%22%20%5C%0A%20%20%20%20%20%20%20%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%20802-3-ethernet.cloned-mac-address%20%24%7Biface_mac%7D%20%5C%0A%20%20%20%20%20%20%20%20ipv4.route-metric%20%22%24%7Bbridge_metric%7D%22%20ipv6.route-metric%20%22%24%7Bbridge_metric%7D%22%0A%20%20%20%20%20%20echo%20%22Loaded%20new%20%24ovs_interface%20connection%20file%3A%20%24%7Bnew_conn_file%7D%22%0A%20%20%20%20else%0A%20%20%20%20%20%20extra_if_brex_args%3D%22%22%0A%20%20%20%20%20%20%23%20check%20if%20interface%20had%20ipv4%2Fipv6%20addresses%20assigned%0A%20%20%20%20%20%20num_ipv4_addrs%3D%24(ip%20-j%20a%20show%20dev%20%24%7Biface%7D%20%7C%20jq%20%22.%5B0%5D.addr_info%20%7C%20map(.%20%7C%20select(.family%20%3D%3D%20%5C%22inet%5C%22))%20%7C%20length%22)%0A%20%20%20%20%20%20if%20%5B%20%22%24num_ipv4_addrs%22%20-gt%200%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv4.may-fail%20no%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20%23%20IPV6%20should%20have%20at%20least%20a%20link%20local%20address.%20Check%20for%20more%20than%201%20to%20see%20if%20there%20is%20an%0A%20%20%20%20%20%20%23%20assigned%20address.%0A%20%20%20%20%20%20num_ip6_addrs%3D%24(ip%20-j%20a%20show%20dev%20%24%7Biface%7D%20%7C%20jq%20%22.%5B0%5D.addr_info%20%7C%20map(.%20%7C%20select(.family%20%3D%3D%20%5C%22inet6%5C%22%20and%20.scope%20!%3D%20%5C%22link%5C%22))%20%7C%20length%22)%0A%20%20%20%20%20%20if%20%5B%20%22%24num_ip6_addrs%22%20-gt%200%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv6.may-fail%20no%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20%23%20check%20for%20dhcp%20client%20ids%0A%20%20%20%20%20%20dhcp_client_id%3D%24(nmcli%20--get-values%20ipv4.dhcp-client-id%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24dhcp_client_id%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv4.dhcp-client-id%20%24%7Bdhcp_client_id%7D%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20dhcp6_client_id%3D%24(nmcli%20--get-values%20ipv6.dhcp-duid%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24dhcp6_client_id%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv6.dhcp-duid%20%24%7Bdhcp6_client_id%7D%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20ipv6_addr_gen_mode%3D%24(nmcli%20--get-values%20ipv6.addr-gen-mode%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24ipv6_addr_gen_mode%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv6.addr-gen-mode%20%24%7Bipv6_addr_gen_mode%7D%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20add_nm_conn%20type%20ovs-interface%20slave-type%20ovs-port%20conn.interface%20%22%24bridge_name%22%20master%20%22%24ovs_port_conn%22%20con-name%20%5C%0A%20%20%20%20%20%20%20%20%22%24ovs_interface%22%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%20802-3-ethernet.cloned-mac-address%20%24%7Biface_mac%7D%20%5C%0A%20%20%20%20%20%20%20%20ipv4.route-metric%20%22%24%7Bbridge_metric%7D%22%20ipv6.route-metric%20%22%24%7Bbridge_metric%7D%22%20%24%7Bextra_if_brex_args%7D%0A%20%20%20%20fi%0A%20%20fi%0A%0A%20%20configure_driver_options%20%22%24%7Biface%7D%22%0A%20%20update_nm_conn_files%20%22%24bridge_name%22%20%22%24port_name%22%0A%7D%0A%0A%23%20Used%20to%20remove%20a%20bridge%0Aremove_ovn_bridges()%20%7B%0A%20%20bridge_name%3D%24%7B1%7D%0A%20%20port_name%3D%24%7B2%7D%0A%0A%20%20%23%20Reload%20configuration%2C%20after%20reload%20the%20preferred%20connection%20profile%0A%20%20%23%20should%20be%20auto-activated%0A%20%20update_nm_conn_files%20%24%7Bbridge_name%7D%20%24%7Bport_name%7D%0A%20%20rm_nm_conn_files%0A%0A%20%20%23%20NetworkManager%20will%20not%20remove%20%24%7Bbridge_name%7D%20if%20it%20has%20the%20patch%20port%20created%20by%20ovn-kubernetes%0A%20%20%23%20so%20remove%20explicitly%0A%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20%24%7Bbridge_name%7D%0A%7D%0A%0A%23%20Removes%20any%20previous%20ovs%20configuration%0Aremove_all_ovn_bridges()%20%7B%0A%20%20echo%20%22Reverting%20any%20previous%20OVS%20configuration%22%0A%20%20%0A%20%20remove_ovn_bridges%20br-ex%20phys0%0A%20%20if%20%5B%20-d%20%22%2Fsys%2Fclass%2Fnet%2Fbr-ex1%22%20%5D%3B%20then%0A%20%20%20%20remove_ovn_bridges%20br-ex1%20phys1%0A%20%20fi%0A%20%20%0A%20%20echo%20%22OVS%20configuration%20successfully%20reverted%22%0A%7D%0A%0A%23%20Reloads%20NM%20NetworkManager%20profiles%20if%20any%20configuration%20change%20was%20done.%0A%23%20Accepts%20a%20list%20of%20devices%20that%20should%20be%20re-connect%20after%20reload.%0Areload_profiles_nm()%20%7B%0A%20%20if%20%5B%20%24nm_config_changed%20-eq%200%20%5D%3B%20then%0A%20%20%20%20%23%20no%20config%20was%20changed%2C%20no%20need%20to%20reload%0A%20%20%20%20return%0A%20%20fi%0A%0A%20%20%23%20reload%20profiles%0A%20%20nmcli%20connection%20reload%0A%0A%20%20%23%20precautionary%20sleep%20of%2010s%20(default%20timeout%20of%20NM%20to%20bring%20down%20devices)%0A%20%20sleep%2010%0A%0A%20%20%23%20After%20reload%2C%20devices%20that%20were%20already%20connected%20should%20connect%20again%0A%20%20%23%20if%20any%20profile%20is%20available.%20If%20no%20profile%20is%20available%2C%20a%20device%20can%0A%20%20%23%20remain%20disconnected%20and%20we%20have%20to%20explicitly%20connect%20it%20so%20that%20a%0A%20%20%23%20profile%20is%20generated.%20This%20can%20happen%20for%20physical%20devices%20but%20should%0A%20%20%23%20not%20happen%20for%20software%20devices%20as%20those%20always%20require%20a%20profile.%0A%20%20for%20dev%20in%20%24%40%3B%20do%0A%20%20%20%20%23%20Only%20attempt%20to%20connect%20a%20disconnected%20device%0A%20%20%20%20local%20connected_state%3D%24(nmcli%20-g%20GENERAL.STATE%20device%20show%20%22%24dev%22%20%7C%7C%20echo%20%22%22)%0A%20%20%20%20if%20%5B%5B%20%22%24connected_state%22%20%3D~%20%22disconnected%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%23%20keep%20track%20if%20a%20profile%20by%20the%20same%20name%20as%20the%20device%20existed%20%0A%20%20%20%20%20%20%23%20before%20we%20attempt%20activation%0A%20%20%20%20%20%20local%20named_profile_existed%3D%24(%5B%20-f%20%22%24%7BNM_CONN_PATH%7D%2F%24%7Bdev%7D%22%20%5D%20%7C%7C%20%5B%20-f%20%22%24%7BNM_CONN_PATH%7D%2F%24%7Bdev%7D.nmconnection%22%20%5D%20%26%26%20echo%20%22yes%22)%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20for%20i%20in%20%7B1..10%7D%3B%20do%0A%20%20%20%20%20%20%20%20%20%20echo%20%22Attempt%20%24i%20to%20connect%20device%20%24dev%22%0A%20%20%20%20%20%20%20%20%20%20nmcli%20device%20connect%20%22%24dev%22%20%26%26%20break%0A%20%20%20%20%20%20%20%20%20%20sleep%205%0A%20%20%20%20%20%20done%0A%0A%20%20%20%20%20%20%23%20if%20a%20profile%20did%20not%20exist%20before%20but%20does%20now%2C%20it%20was%20generated%0A%20%20%20%20%20%20%23%20but%20we%20want%20it%20to%20be%20ephemeral%2C%20so%20move%20it%20back%20to%20%2Frun%0A%20%20%20%20%20%20if%20%5B%20!%20%22%24named_profile_existed%22%20%3D%20%22yes%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20local%20dst%3D%22%2Frun%2FNetworkManager%2Fsystem-connections%2F%22%0A%20%20%20%20%20%20%20%20MANAGED_NM_CONN_FILES%3D(%22%24%7BNM_CONN_PATH%7D%2F%24%7Bdev%7D%22%20%22%24%7BNM_CONN_PATH%7D%2F%24%7Bdev%7D.nmconnection%22)%0A%20%20%20%20%20%20%20%20copy_nm_conn_files%20%22%24%7Bdst%7D%22%0A%20%20%20%20%20%20%20%20rm_nm_conn_files%0A%20%20%20%20%20%20%20%20%23%20reload%20profiles%20so%20that%20NM%20notices%20that%20some%20might%20have%20been%20moved%0A%20%20%20%20%20%20%20%20nmcli%20connection%20reload%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20echo%20%22Waiting%20for%20interface%20%24dev%20to%20activate...%22%0A%20%20%20%20if%20!%20timeout%2060%20bash%20-c%20%22while%20!%20nmcli%20-g%20DEVICE%2CSTATE%20c%20%7C%20grep%20%22'%22'%22%24dev%22%3Aactivated'%22'%22%3B%20do%20sleep%205%3B%20done%22%3B%20then%0A%20%20%20%20%20%20echo%20%22Warning%3A%20%24dev%20did%20not%20activate%22%0A%20%20%20%20fi%0A%20%20done%0A%0A%20%20nm_config_changed%3D0%0A%7D%0A%0A%23%20Removes%20all%20configuration%20and%20reloads%20NM%20if%20necessary%0Arollback_nm()%20%7B%0A%20%20phys0%3D%24(get_bridge_physical_interface%20ovs-if-phys0)%0A%20%20phys1%3D%24(get_bridge_physical_interface%20ovs-if-phys1)%0A%20%20%0A%20%20%23%20Revert%20changes%20made%20by%20%2Fusr%2Flocal%2Fbin%2Fconfigure-ovs.sh%20during%20SDN%20migration.%0A%20%20remove_all_ovn_bridges%0A%20%20%0A%20%20%23%20reload%20profiles%20so%20that%20NM%20notices%20that%20some%20were%20removed%0A%20%20reload_profiles_nm%20%22%24phys0%22%20%22%24phys1%22%0A%7D%0A%0A%23%20Add%20a%20deactivated%20connection%20profile%0Aadd_nm_conn()%20%7B%0A%20%20nmcli%20c%20add%20%22%24%40%22%20connection.autoconnect%20no%0A%7D%0A%0A%23%20Activates%20an%20ordered%20set%20of%20NM%20connection%20profiles%0Aactivate_nm_connections()%20%7B%0A%20%20local%20connections%3D(%22%24%40%22)%0A%20%20%0A%20%20%23%20make%20sure%20to%20set%20bond%20or%20team%20slaves%20autoconnect%2C%20otherwise%20as%20we%0A%20%20%23%20activate%20one%20slave%2C%20the%20other%20slave%20might%20get%20implicitly%20re-activated%0A%20%20%23%20with%20the%20old%20profile%2C%20activating%20the%20old%20master%2C%20interfering%20and%0A%20%20%23%20causing%20the%20former%20activation%20to%20fail.%0A%20%20%23%20we%20don't%20want%20to%20set%20autoconnect%20on%20all%20the%20other%20profiles%20just%20yet%0A%20%20%23%20though%20as%20that%20would%20activate%20them%20which%20is%20what%20we%20want%20to%20do%20next.%0A%20%20%23%20note%20that%20these%20slaves%20should%20already%20be%20activated%20with%20their%20original%0A%20%20%23%20profiles%20and%20setting%20autoconnect%20won't%20implicitly%20activate%20them%20again.%0A%20%20for%20conn%20in%20%22%24%7Bconnections%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20local%20slave_type%3D%24(nmcli%20-g%20connection.slave-type%20connection%20show%20%22%24conn%22)%0A%20%20%20%20if%20%5B%20%22%24slave_type%22%20%3D%20%22team%22%20%5D%20%7C%7C%20%5B%20%22%24slave_type%22%20%3D%20%22bond%22%20%5D%3B%20then%0A%20%20%20%20%20%20nmcli%20c%20mod%20%22%24conn%22%20connection.autoconnect%20yes%0A%20%20%20%20fi%0A%20%20done%0A%0A%20%20%23%20Then%20activate%20all%20the%20connections%0A%20%20for%20conn%20in%20%22%24%7Bconnections%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20local%20active_state%3D%24(nmcli%20-g%20GENERAL.STATE%20conn%20show%20%22%24conn%22)%0A%20%20%20%20if%20%5B%20%22%24active_state%22%20!%3D%20%22activated%22%20%5D%3B%20then%0A%20%20%20%20%20%20for%20i%20in%20%7B1..10%7D%3B%20do%0A%20%20%20%20%20%20%20%20echo%20%22Attempt%20%24i%20to%20bring%20up%20connection%20%24conn%22%0A%20%20%20%20%20%20%20%20nmcli%20conn%20up%20%22%24conn%22%20%26%26%20s%3D0%20%26%26%20break%20%7C%7C%20s%3D%24%3F%0A%20%20%20%20%20%20%20%20sleep%205%0A%20%20%20%20%20%20done%0A%20%20%20%20%20%20if%20%5B%20%24s%20-eq%200%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22Brought%20up%20connection%20%24conn%20successfully%22%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20echo%20%22ERROR%3A%20Cannot%20bring%20up%20connection%20%24conn%20after%20%24i%20attempts%22%0A%20%20%20%20%20%20%20%20return%20%24s%0A%20%20%20%20%20%20fi%0A%20%20%20%20else%0A%20%20%20%20%20%20echo%20%22Connection%20%24conn%20already%20activated%22%0A%20%20%20%20fi%0A%20%20%20%20nmcli%20c%20mod%20%22%24conn%22%20connection.autoconnect%20yes%0A%20%20done%0A%7D%0A%0A%23%20Accepts%20parameters%20%24iface_default_hint_file%2C%20%24iface%0A%23%20Writes%20content%20of%20%24iface%20into%20%24iface_default_hint_file%0Awrite_iface_default_hint()%20%7B%0A%20%20local%20iface_default_hint_file%3D%22%241%22%0A%20%20local%20iface%3D%22%242%22%0A%0A%20%20echo%20%22%24%7Biface%7D%22%20%3E%7C%20%22%24%7Biface_default_hint_file%7D%22%0A%7D%0A%0A%23%20Accepts%20parameters%20%24iface_default_hint_file%0A%23%20Returns%20the%20stored%20interface%20default%20hint%20if%20the%20hint%20is%20non-empty%2C%0A%23%20not%20br-ex%2C%20not%20br-ex1%20and%20if%20the%20interface%20can%20be%20found%20in%20%2Fsys%2Fclass%2Fnet%0Aget_iface_default_hint()%20%7B%0A%20%20local%20iface_default_hint_file%3D%241%0A%20%20if%20%5B%20-f%20%22%24%7Biface_default_hint_file%7D%22%20%5D%3B%20then%0A%20%20%20%20local%20iface_default_hint%3D%24(cat%20%22%24%7Biface_default_hint_file%7D%22)%0A%20%20%20%20if%20%5B%20%22%24%7Biface_default_hint%7D%22%20!%3D%20%22%22%20%5D%20%26%26%0A%20%20%20%20%20%20%20%5B%20%22%24%7Biface_default_hint%7D%22%20!%3D%20%22br-ex%22%20%5D%20%26%26%0A%20%20%20%20%20%20%20%5B%20%22%24%7Biface_default_hint%7D%22%20!%3D%20%22br-ex1%22%20%5D%20%26%26%0A%20%20%20%20%20%20%20%5B%20-d%20%22%2Fsys%2Fclass%2Fnet%2F%24%7Biface_default_hint%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20echo%20%22%24%7Biface_default_hint%7D%22%0A%20%20%20%20%20%20%20return%0A%20%20%20%20fi%0A%20%20fi%0A%20%20echo%20%22%22%0A%7D%0A%0A%23%20Accepts%20parameters%20%24bridge_interface%20(e.g.%20ovs-port-phys0)%0A%23%20Returns%20the%20physical%20interface%20name%20if%20%24bridge_interface%20exists%2C%20%22%22%20otherwise%0Aget_bridge_physical_interface()%20%7B%0A%20%20local%20bridge_interface%3D%22%241%22%0A%20%20local%20physical_interface%3D%22%22%0A%20%20physical_interface%3D%24(nmcli%20-g%20connection.interface-name%20conn%20show%20%22%24%7Bbridge_interface%7D%22%202%3E%2Fdev%2Fnull%20%7C%7C%20echo%20%22%22)%0A%20%20echo%20%22%24%7Bphysical_interface%7D%22%0A%7D%0A%0A%23%20Accepts%20parameters%20%24iface%2C%20%24iface_default_hint_file%0A%23%20Finds%20the%20default%20interface.%20If%20the%20default%20interface%20is%20br-ex%2C%20use%20that%20and%20return.%0A%23%20Never%20use%20the%20interface%20that%20is%20provided%20inside%20extra_bridge_file%20for%20br-ex1.%0A%23%20Never%20use%20br-ex1.%0A%23%20If%20the%20default%20interface%20is%20not%20br-ex%3A%0A%23%20Check%20if%20there%20is%20a%20valid%20hint%20inside%20iface_default_hint_file.%20If%20so%2C%20use%20that%20hint.%0A%23%20If%20there%20is%20no%20valid%20hint%2C%20use%20the%20default%20interface%20that%20we%20found%20during%20the%20step%0A%23%20earlier.%20Write%20the%20default%20interface%20to%20the%20hint%20file.%0Aget_default_interface()%20%7B%0A%20%20local%20iface%3D%22%22%0A%20%20local%20counter%3D0%0A%20%20local%20iface_default_hint_file%3D%22%241%22%0A%20%20local%20extra_bridge_file%3D%22%242%22%0A%20%20local%20extra_bridge%3D%22%22%0A%0A%20%20if%20%5B%20-f%20%22%24%7Bextra_bridge_file%7D%22%20%5D%3B%20then%0A%20%20%20%20extra_bridge%3D%24(cat%20%24%7Bextra_bridge_file%7D)%0A%20%20fi%0A%0A%20%20%23%20find%20default%20interface%0A%20%20%23%20the%20default%20interface%20might%20be%20br-ex%2C%20so%20check%20this%20before%20looking%20at%20the%20hint%0A%20%20while%20%5B%20%24%7Bcounter%7D%20-lt%2012%20%5D%3B%20do%0A%20%20%20%20%23%20check%20ipv4%0A%20%20%20%20%23%20never%20use%20the%20interface%20that's%20specified%20in%20extra_bridge_file%0A%20%20%20%20%23%20never%20use%20br-ex1%0A%20%20%20%20if%20%5B%20%22%24%7Bextra_bridge%7D%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20iface%3D%24(ip%20route%20show%20default%20%7C%20grep%20-v%20%22br-ex1%22%20%7C%20grep%20-v%20%22%24%7Bextra_bridge%7D%22%20%7C%20awk%20'%7B%20if%20(%244%20%3D%3D%20%22dev%22)%20%7B%20print%20%245%3B%20exit%20%7D%20%7D')%0A%20%20%20%20else%0A%20%20%20%20%20%20iface%3D%24(ip%20route%20show%20default%20%7C%20grep%20-v%20%22br-ex1%22%20%7C%20awk%20'%7B%20if%20(%244%20%3D%3D%20%22dev%22)%20%7B%20print%20%245%3B%20exit%20%7D%20%7D')%0A%20%20%20%20fi%0A%20%20%20%20if%20%5B%5B%20-n%20%22%24%7Biface%7D%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20%20%20%23%20check%20ipv6%0A%20%20%20%20%23%20never%20use%20the%20interface%20that's%20specified%20in%20extra_bridge_file%0A%20%20%20%20%23%20never%20use%20br-ex1%0A%20%20%20%20if%20%5B%20%22%24%7Bextra_bridge%7D%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20iface%3D%24(ip%20-6%20route%20show%20default%20%7C%20grep%20-v%20%22br-ex1%22%20%7C%20grep%20-v%20%22%24%7Bextra_bridge%7D%22%20%7C%20awk%20'%7B%20if%20(%244%20%3D%3D%20%22dev%22)%20%7B%20print%20%245%3B%20exit%20%7D%20%7D')%0A%20%20%20%20else%0A%20%20%20%20%20%20iface%3D%24(ip%20-6%20route%20show%20default%20%7C%20grep%20-v%20%22br-ex1%22%20%7C%20awk%20'%7B%20if%20(%244%20%3D%3D%20%22dev%22)%20%7B%20print%20%245%3B%20exit%20%7D%20%7D')%0A%20%20%20%20fi%0A%20%20%20%20if%20%5B%5B%20-n%20%22%24%7Biface%7D%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20%20%20counter%3D%24((counter%2B1))%0A%20%20%20%20sleep%205%0A%20%20done%0A%0A%20%20%23%20if%20the%20default%20interface%20does%20not%20point%20out%20of%20br-ex%20or%20br-ex1%0A%20%20if%20%5B%20%22%24%7Biface%7D%22%20!%3D%20%22br-ex%22%20%5D%20%26%26%20%5B%20%22%24%7Biface%7D%22%20!%3D%20%22br-ex1%22%20%5D%3B%20then%0A%20%20%20%20%23%20determine%20if%20an%20interface%20default%20hint%20exists%20from%20a%20previous%20run%0A%20%20%20%20%23%20and%20if%20the%20interface%20has%20a%20valid%20default%20route%0A%20%20%20%20iface_default_hint%3D%24(get_iface_default_hint%20%22%24%7Biface_default_hint_file%7D%22)%0A%20%20%20%20if%20%5B%20%22%24%7Biface_default_hint%7D%22%20!%3D%20%22%22%20%5D%20%26%26%0A%20%20%20%20%20%20%20%5B%20%22%24%7Biface_default_hint%7D%22%20!%3D%20%22%24%7Biface%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%23%20start%20wherever%20count%20left%20off%20in%20the%20previous%20loop%0A%20%20%20%20%20%20%23%20allow%20this%20for%20one%20more%20iteration%20than%20the%20previous%20loop%0A%20%20%20%20%20%20while%20%5B%20%24%7Bcounter%7D%20-le%2012%20%5D%3B%20do%0A%20%20%20%20%20%20%20%20%23%20check%20ipv4%0A%20%20%20%20%20%20%20%20if%20%5B%20%22%24(ip%20route%20show%20default%20dev%20%22%24%7Biface_default_hint%7D%22)%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20iface%3D%22%24%7Biface_default_hint%7D%22%0A%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20%23%20check%20ipv6%0A%20%20%20%20%20%20%20%20if%20%5B%20%22%24(ip%20-6%20route%20show%20default%20dev%20%22%24%7Biface_default_hint%7D%22)%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20iface%3D%22%24%7Biface_default_hint%7D%22%0A%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20counter%3D%24((counter%2B1))%0A%20%20%20%20%20%20%20%20sleep%205%0A%20%20%20%20%20%20done%0A%20%20%20%20fi%0A%20%20%20%20%23%20store%20what%20was%20determined%20was%20the%20(new)%20default%20interface%20inside%0A%20%20%20%20%23%20the%20default%20hint%20file%20for%20future%20reference%0A%20%20%20%20if%20%5B%20%22%24%7Biface%7D%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20write_iface_default_hint%20%22%24%7Biface_default_hint_file%7D%22%20%22%24%7Biface%7D%22%0A%20%20%20%20fi%0A%20%20fi%0A%20%20echo%20%22%24%7Biface%7D%22%0A%7D%0A%0A%23%20Used%20to%20print%20network%20state%0Aprint_state()%20%7B%0A%20%20echo%20%22Current%20device%2C%20connection%2C%20interface%20and%20routing%20state%3A%22%0A%20%20nmcli%20-g%20all%20device%20%7C%20grep%20-v%20unmanaged%0A%20%20nmcli%20-g%20all%20connection%0A%20%20ip%20-d%20address%20show%0A%20%20ip%20route%20show%0A%20%20ip%20-6%20route%20show%0A%7D%0A%0A%23%20Setup%20an%20exit%20trap%20to%20rollback%20on%20error%0Ahandle_exit()%20%7B%0A%20%20e%3D%24%3F%0A%20%20%5B%20%24e%20-eq%200%20%5D%20%26%26%20print_state%20%26%26%20exit%200%0A%0A%20%20echo%20%22ERROR%3A%20configure-ovs%20exited%20with%20error%3A%20%24e%22%0A%20%20print_state%0A%0A%20%20%23%20copy%20configuration%20to%20tmp%0A%20%20dir%3D%24(mktemp%20-d%20-t%20%22configure-ovs-%24(date%20%2B%25Y-%25m-%25d-%25H-%25M-%25S)-XXXXXXXXXX%22)%0A%20%20update_nm_conn_files%20br-ex%20phys0%0A%20%20copy_nm_conn_files%20%22%24dir%22%0A%20%20update_nm_conn_files%20br-ex1%20phys1%0A%20%20copy_nm_conn_files%20%22%24dir%22%0A%20%20echo%20%22Copied%20OVS%20configuration%20to%20%24dir%20for%20troubleshooting%22%0A%0A%20%20%23%20attempt%20to%20restore%20the%20previous%20network%20state%0A%20%20echo%20%22Attempting%20to%20restore%20previous%20configuration...%22%0A%20%20rollback_nm%0A%20%20print_state%0A%0A%20%20exit%20%24e%0A%7D%0Atrap%20%22handle_exit%22%20EXIT%0A%0A%23%20Clean%20up%20old%20config%20on%20behalf%20of%20mtu-migration%0Aif%20%5B%20!%20-f%20%2Fetc%2Fcno%2Fmtu-migration%2Fconfig%20%5D%3B%20then%0A%20%20echo%20%22Cleaning%20up%20left%20over%20mtu%20migration%20configuration%22%0A%20%20rm%20-rf%20%2Fetc%2Fcno%2Fmtu-migration%0Afi%0A%0Aif%20!%20rpm%20-qa%20%7C%20grep%20-q%20openvswitch%3B%20then%0A%20%20echo%20%22Warning%3A%20Openvswitch%20package%20is%20not%20installed!%22%0A%20%20exit%201%0Afi%0A%0A%23%20print%20initial%20state%0Aprint_state%0A%0Aif%20%5B%20%22%241%22%20%3D%3D%20%22OVNKubernetes%22%20%5D%3B%20then%0A%20%20%23%20Configures%20NICs%20onto%20OVS%20bridge%20%22br-ex%22%0A%20%20%23%20Configuration%20is%20either%20auto-detected%20or%20provided%20through%20a%20config%20file%20written%20already%20in%20Network%20Manager%0A%20%20%23%20key%20files%20under%20%2Fetc%2FNetworkManager%2Fsystem-connections%2F%0A%20%20%23%20Managing%20key%20files%20is%20outside%20of%20the%20scope%20of%20this%20script%0A%0A%20%20%23%20if%20the%20interface%20is%20of%20type%20vmxnet3%20add%20multicast%20capability%20for%20that%20driver%0A%20%20%23%20REMOVEME%3A%20Once%20BZ%3A1854355%20is%20fixed%2C%20this%20needs%20to%20get%20removed.%0A%20%20function%20configure_driver_options%20%7B%0A%20%20%20%20intf%3D%241%0A%20%20%20%20if%20%5B%20!%20-f%20%22%2Fsys%2Fclass%2Fnet%2F%24%7Bintf%7D%2Fdevice%2Fuevent%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Device%20file%20doesn't%20exist%2C%20skipping%20setting%20multicast%20mode%22%0A%20%20%20%20else%0A%20%20%20%20%20%20driver%3D%24(cat%20%22%2Fsys%2Fclass%2Fnet%2F%24%7Bintf%7D%2Fdevice%2Fuevent%22%20%7C%20grep%20DRIVER%20%7C%20awk%20-F%20%22%3D%22%20'%7Bprint%20%242%7D')%0A%20%20%20%20%20%20echo%20%22Driver%20name%20is%22%20%24driver%0A%20%20%20%20%20%20if%20%5B%20%22%24driver%22%20%3D%20%22vmxnet3%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20ifconfig%20%22%24intf%22%20allmulti%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%20%20%7D%0A%0A%20%20ovnk_config_dir%3D'%2Fetc%2Fovnk'%0A%20%20ovnk_var_dir%3D'%2Fvar%2Flib%2Fovnk'%0A%20%20extra_bridge_file%3D%22%24%7Bovnk_config_dir%7D%2Fextra_bridge%22%0A%20%20iface_default_hint_file%3D%22%24%7Bovnk_var_dir%7D%2Fiface_default_hint%22%0A%0A%20%20%23%20make%20sure%20to%20create%20ovnk_config_dir%20if%20it%20does%20not%20exist%2C%20yet%0A%20%20mkdir%20-p%20%22%24%7Bovnk_config_dir%7D%22%0A%20%20%23%20make%20sure%20to%20create%20ovnk_var_dir%20if%20it%20does%20not%20exist%2C%20yet%0A%20%20mkdir%20-p%20%22%24%7Bovnk_var_dir%7D%22%0A%0A%20%20%23%20For%20upgrade%20scenarios%2C%20make%20sure%20that%20we%20stabilize%20what%20we%20already%20configured%0A%20%20%23%20before.%20If%20we%20do%20not%20have%20a%20valid%20interface%20hint%2C%20find%20the%20physical%20interface%0A%20%20%23%20that's%20attached%20to%20ovs-if-phys0.%0A%20%20%23%20If%20we%20find%20such%20an%20interface%2C%20write%20it%20to%20the%20hint%20file.%0A%20%20iface_default_hint%3D%24(get_iface_default_hint%20%22%24%7Biface_default_hint_file%7D%22)%0A%20%20if%20%5B%20%22%24%7Biface_default_hint%7D%22%20%3D%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20current_interface%3D%24(get_bridge_physical_interface%20ovs-if-phys0)%0A%20%20%20%20if%20%5B%20%22%24%7Bcurrent_interface%7D%22%20!%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20write_iface_default_hint%20%22%24%7Biface_default_hint_file%7D%22%20%22%24%7Bcurrent_interface%7D%22%0A%20%20%20%20fi%0A%20%20fi%0A%0A%20%20%23%20delete%20iface_default_hint_file%20if%20it%20has%20the%20same%20content%20as%20extra_bridge_file%0A%20%20%23%20in%20that%20case%2C%20we%20must%20also%20force%20a%20reconfiguration%20of%20our%20network%20interfaces%0A%20%20%23%20to%20make%20sure%20that%20we%20reconcile%20this%20conflict%0A%20%20if%20%5B%20-f%20%22%24%7Biface_default_hint_file%7D%22%20%5D%20%26%26%0A%20%20%20%20%20%5B%20-f%20%22%24%7Bextra_bridge_file%7D%22%20%5D%20%26%26%0A%20%20%20%20%20%5B%20%22%24(cat%20%22%24%7Biface_default_hint_file%7D%22)%22%20%3D%3D%20%22%24(cat%20%22%24%7Bextra_bridge_file%7D%22)%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22%24%7Biface_default_hint_file%7D%20and%20%24%7Bextra_bridge_file%7D%20share%20the%20same%20content%22%0A%20%20%20%20echo%20%22Deleting%20file%20%24%7Biface_default_hint_file%7D%20to%20choose%20a%20different%20interface%22%0A%20%20%20%20rm%20-f%20%22%24%7Biface_default_hint_file%7D%22%0A%20%20%20%20rm%20-f%20%2Frun%2Fconfigure-ovs-boot-done%0A%20%20fi%0A%0A%20%20%23%20on%20every%20boot%20we%20rollback%20and%20generate%20the%20configuration%20again%2C%20to%20take%0A%20%20%23%20in%20any%20changes%20that%20have%20possibly%20been%20applied%20in%20the%20standard%0A%20%20%23%20configuration%20sources%0A%20%20if%20%5B%20!%20-f%20%2Frun%2Fconfigure-ovs-boot-done%20%5D%3B%20then%0A%20%20%20%20echo%20%22Running%20on%20boot%2C%20restoring%20previous%20configuration%20before%20proceeding...%22%0A%20%20%20%20rollback_nm%0A%20%20%20%20print_state%0A%20%20fi%0A%20%20touch%20%2Frun%2Fconfigure-ovs-boot-done%0A%0A%20%20iface%3D%24(get_default_interface%20%22%24%7Biface_default_hint_file%7D%22%20%22%24extra_bridge_file%22)%0A%0A%20%20if%20%5B%20%22%24iface%22%20!%3D%20%22br-ex%22%20%5D%3B%20then%0A%20%20%20%20%23%20Default%20gateway%20is%20not%20br-ex.%0A%20%20%20%20%23%20Some%20deployments%20use%20a%20temporary%20solution%20where%20br-ex%20is%20moved%20out%20from%20the%20default%20gateway%20interface%0A%20%20%20%20%23%20and%20bound%20to%20a%20different%20nic%20(https%3A%2F%2Fgithub.com%2Ftrozet%2Fopenshift-ovn-migration).%0A%20%20%20%20%23%20This%20is%20now%20supported%20through%20an%20extra%20bridge%20if%20requested.%20If%20that%20is%20the%20case%2C%20we%20rollback.%0A%20%20%20%20%23%20We%20also%20rollback%20if%20it%20looks%20like%20we%20need%20to%20configure%20things%2C%20just%20in%20case%20there%20are%20any%20leftovers%0A%20%20%20%20%23%20from%20previous%20attempts.%0A%20%20%20%20if%20%5B%20-f%20%22%24extra_bridge_file%22%20%5D%20%7C%7C%20%5B%20-z%20%22%24(nmcli%20connection%20show%20--active%20br-ex%202%3E%20%2Fdev%2Fnull)%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Bridge%20br-ex%20is%20not%20active%2C%20restoring%20previous%20configuration%20before%20proceeding...%22%0A%20%20%20%20%20%20rollback_nm%0A%20%20%20%20%20%20print_state%0A%20%20%20%20fi%0A%20%20fi%0A%0A%20%20convert_to_bridge%20%22%24iface%22%20%22br-ex%22%20%22phys0%22%20%22%24%7BBRIDGE_METRIC%7D%22%0A%0A%20%20%23%20Check%20if%20we%20need%20to%20configure%20the%20second%20bridge%0A%20%20if%20%5B%20-f%20%22%24extra_bridge_file%22%20%5D%20%26%26%20(!%20nmcli%20connection%20show%20br-ex1%20%26%3E%20%2Fdev%2Fnull%20%7C%7C%20!%20nmcli%20connection%20show%20ovs-if-phys1%20%26%3E%20%2Fdev%2Fnull)%3B%20then%0A%20%20%20%20interface%3D%24(head%20-n%201%20%24extra_bridge_file)%0A%20%20%20%20convert_to_bridge%20%22%24interface%22%20%22br-ex1%22%20%22phys1%22%20%22%24%7BBRIDGE1_METRIC%7D%22%0A%20%20fi%0A%0A%20%20%23%20Check%20if%20we%20need%20to%20remove%20the%20second%20bridge%0A%20%20if%20%5B%20!%20-f%20%22%24extra_bridge_file%22%20%5D%20%26%26%20(nmcli%20connection%20show%20br-ex1%20%26%3E%20%2Fdev%2Fnull%20%7C%7C%20nmcli%20connection%20show%20ovs-if-phys1%20%26%3E%20%2Fdev%2Fnull)%3B%20then%0A%20%20%20%20update_nm_conn_files%20br-ex1%20phys1%0A%20%20%20%20rm_nm_conn_files%0A%20%20fi%0A%0A%20%20%23%20Remove%20bridges%20created%20by%20openshift-sdn%0A%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br0%0A%0A%20%20%23%20Make%20sure%20everything%20is%20activated%0A%20%20connections%3D()%0A%20%20while%20IFS%3D%20read%20-r%20connection%3B%20do%0A%20%20%20%20if%20%5B%5B%20%24connection%20%3D%3D%20*%22%24MANAGED_NM_CONN_SUFFIX%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20connections%2B%3D(%22%24connection%22)%0A%20%20%20%20fi%0A%20%20done%20%3C%20%3C(nmcli%20-g%20NAME%20c)%0A%20%20connections%2B%3D(ovs-if-phys0%20ovs-if-br-ex)%0A%20%20if%20%5B%20-f%20%22%24extra_bridge_file%22%20%5D%3B%20then%0A%20%20%20%20connections%2B%3D(ovs-if-phys1%20ovs-if-br-ex1)%0A%20%20fi%0A%20%20activate_nm_connections%20%22%24%7Bconnections%5B%40%5D%7D%22%0Aelif%20%5B%20%22%241%22%20%3D%3D%20%22OpenShiftSDN%22%20%5D%3B%20then%0A%20%20%23%20Revert%20changes%20made%20by%20%2Fusr%2Flocal%2Fbin%2Fconfigure-ovs.sh%20during%20SDN%20migration.%0A%20%20rollback_nm%0A%20%20%0A%20%20%23%20Remove%20bridges%20created%20by%20ovn-kubernetes%0A%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br-int%20--%20--if-exists%20del-br%20br-local%0Afi%0A
        mode: 493
        overwrite: true
        path: /usr/local/bin/configure-ovs.sh
      - contents:
          source: data:,%23%20This%20file%20is%20generated%20by%20the%20Machine%20Config%20Operator's%20containerruntimeconfig%20controller.%0A%23%0A%23%20storage.conf%20is%20the%20configuration%20file%20for%20all%20tools%0A%23%20that%20share%20the%20containers%2Fstorage%20libraries%0A%23%20See%20man%205%20containers-storage.conf%20for%20more%20information%0A%23%20The%20%22container%20storage%22%20table%20contains%20all%20of%20the%20server%20options.%0A%5Bstorage%5D%0A%0A%23%20Default%20Storage%20Driver%0Adriver%20%3D%20%22overlay%22%0A%0A%23%20Temporary%20storage%20location%0Arunroot%20%3D%20%22%2Fvar%2Frun%2Fcontainers%2Fstorage%22%0A%0A%23%20Primary%20Read%2FWrite%20location%20of%20container%20storage%0Agraphroot%20%3D%20%22%2Fvar%2Flib%2Fcontainers%2Fstorage%22%0A%0A%5Bstorage.options%5D%0A%23%20Storage%20options%20to%20be%20passed%20to%20underlying%20storage%20drivers%0A%0A%23%20AdditionalImageStores%20is%20used%20to%20pass%20paths%20to%20additional%20Read%2FOnly%20image%20stores%0A%23%20Must%20be%20comma%20separated%20list.%0Aadditionalimagestores%20%3D%20%5B%0A%5D%0A%0A%23%20Size%20is%20used%20to%20set%20a%20maximum%20size%20of%20the%20container%20image.%20%20Only%20supported%20by%0A%23%20certain%20container%20storage%20drivers.%0Asize%20%3D%20%22%22%0A%0A%23%20Remap-UIDs%2FGIDs%20is%20the%20mapping%20from%20UIDs%2FGIDs%20as%20they%20should%20appear%20inside%20of%0A%23%20a%20container%2C%20to%20UIDs%2FGIDs%20as%20they%20should%20appear%20outside%20of%20the%20container%2C%20and%0A%23%20the%20length%20of%20the%20range%20of%20UIDs%2FGIDs.%20%20Additional%20mapped%20sets%20can%20be%20listed%0A%23%20and%20will%20be%20heeded%20by%20libraries%2C%20but%20there%20are%20limits%20to%20the%20number%20of%0A%23%20mappings%20which%20the%20kernel%20will%20allow%20when%20you%20later%20attempt%20to%20run%20a%0A%23%20container.%0A%23%0A%23%20remap-uids%20%3D%200%3A1668442479%3A65536%0A%23%20remap-gids%20%3D%200%3A1668442479%3A65536%0A%0A%23%20Remap-User%2FGroup%20is%20a%20name%20which%20can%20be%20used%20to%20look%20up%20one%20or%20more%20UID%2FGID%0A%23%20ranges%20in%20the%20%2Fetc%2Fsubuid%20or%20%2Fetc%2Fsubgid%20file.%20%20Mappings%20are%20set%20up%20starting%0A%23%20with%20an%20in-container%20ID%20of%200%20and%20the%20a%20host-level%20ID%20taken%20from%20the%20lowest%0A%23%20range%20that%20matches%20the%20specified%20name%2C%20and%20using%20the%20length%20of%20that%20range.%0A%23%20Additional%20ranges%20are%20then%20assigned%2C%20using%20the%20ranges%20which%20specify%20the%0A%23%20lowest%20host-level%20IDs%20first%2C%20to%20the%20lowest%20not-yet-mapped%20container-level%20ID%2C%0A%23%20until%20all%20of%20the%20entries%20have%20been%20used%20for%20maps.%0A%23%0A%23%20remap-user%20%3D%20%22storage%22%0A%23%20remap-group%20%3D%20%22storage%22%0A%0A%5Bstorage.options.thinpool%5D%0A%23%20Storage%20Options%20for%20thinpool%0A%0A%23%20autoextend_percent%20determines%20the%20amount%20by%20which%20pool%20needs%20to%20be%0A%23%20grown.%20This%20is%20specified%20in%20terms%20of%20%25%20of%20pool%20size.%20So%20a%20value%20of%2020%20means%0A%23%20that%20when%20threshold%20is%20hit%2C%20pool%20will%20be%20grown%20by%2020%25%20of%20existing%0A%23%20pool%20size.%0A%23%20autoextend_percent%20%3D%20%2220%22%0A%0A%23%20autoextend_threshold%20determines%20the%20pool%20extension%20threshold%20in%20terms%0A%23%20of%20percentage%20of%20pool%20size.%20For%20example%2C%20if%20threshold%20is%2060%2C%20that%20means%20when%0A%23%20pool%20is%2060%25%20full%2C%20threshold%20has%20been%20hit.%0A%23%20autoextend_threshold%20%3D%20%2280%22%0A%0A%23%20basesize%20specifies%20the%20size%20to%20use%20when%20creating%20the%20base%20device%2C%20which%0A%23%20limits%20the%20size%20of%20images%20and%20containers.%0A%23%20basesize%20%3D%20%2210G%22%0A%0A%23%20blocksize%20specifies%20a%20custom%20blocksize%20to%20use%20for%20the%20thin%20pool.%0A%23%20blocksize%3D%2264k%22%0A%0A%23%20directlvm_device%20specifies%20a%20custom%20block%20storage%20device%20to%20use%20for%20the%0A%23%20thin%20pool.%20Required%20if%20you%20setup%20devicemapper%0A%23%20directlvm_device%20%3D%20%22%22%0A%0A%23%20directlvm_device_force%20wipes%20device%20even%20if%20device%20already%20has%20a%20filesystem%0A%23%20directlvm_device_force%20%3D%20%22True%22%0A%0A%23%20fs%20specifies%20the%20filesystem%20type%20to%20use%20for%20the%20base%20device.%0A%23%20fs%3D%22xfs%22%0A%0A%23%20log_level%20sets%20the%20log%20level%20of%20devicemapper.%0A%23%200%3A%20LogLevelSuppress%200%20(Default)%0A%23%202%3A%20LogLevelFatal%0A%23%203%3A%20LogLevelErr%0A%23%204%3A%20LogLevelWarn%0A%23%205%3A%20LogLevelNotice%0A%23%206%3A%20LogLevelInfo%0A%23%207%3A%20LogLevelDebug%0A%23%20log_level%20%3D%20%227%22%0A%0A%23%20min_free_space%20specifies%20the%20min%20free%20space%20percent%20in%20a%20thin%20pool%20require%20for%0A%23%20new%20device%20creation%20to%20succeed.%20Valid%20values%20are%20from%200%25%20-%2099%25.%0A%23%20Value%200%25%20disables%0A%23%20min_free_space%20%3D%20%2210%25%22%0A%0A%23%20mkfsarg%20specifies%20extra%20mkfs%20arguments%20to%20be%20used%20when%20creating%20the%20base%0A%23%20device.%0A%23%20mkfsarg%20%3D%20%22%22%0A%0A%23%20mountopt%20specifies%20extra%20mount%20options%20used%20when%20mounting%20the%20thin%20devices.%0A%23%20mountopt%20%3D%20%22%22%0A%0A%23%20use_deferred_removal%20Marking%20device%20for%20deferred%20removal%0A%23%20use_deferred_removal%20%3D%20%22True%22%0A%0A%23%20use_deferred_deletion%20Marking%20device%20for%20deferred%20deletion%0A%23%20use_deferred_deletion%20%3D%20%22True%22%0A%0A%23%20xfs_nospace_max_retries%20specifies%20the%20maximum%20number%20of%20retries%20XFS%20should%0A%23%20attempt%20to%20complete%20IO%20when%20ENOSPC%20(no%20space)%20error%20is%20returned%20by%0A%23%20underlying%20storage%20device.%0A%23%20xfs_nospace_max_retries%20%3D%20%220%22%0A
        mode: 420
        overwrite: true
        path: /etc/containers/storage.conf
      - contents:
          source: data:,.%20%7B%0A%20%20%20%20errors%0A%20%20%20%20bufsize%20512%0A%20%20%20%20health%20%3A18080%0A%20%20%20%20forward%20.%20%7B%7B-%20range%20%24upstream%20%3A%3D%20.DNSUpstreams%7D%7D%20%7B%7B%24upstream%7D%7D%7B%7B-%20end%7D%7D%20%7B%0A%20%20%20%20%20%20%20%20policy%20sequential%0A%20%20%20%20%7D%0A%20%20%20%20cache%2030%0A%20%20%20%20reload%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.IngressVIPRecordType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20.*.apps.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20answer%20%22%7B%7B%22%7B%7B%20.Name%20%7D%7D%22%7D%7D%2060%20in%20%7B%7B%22%7B%7B%20.Type%20%7D%7D%22%7D%7D%2010.35.16.59%22%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.IngressVIPEmptyType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20.*.apps.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.APIVIPRecordType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20%5Eapi.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20answer%20%22%7B%7B%22%7B%7B%20.Name%20%7D%7D%22%7D%7D%2060%20in%20%7B%7B%22%7B%7B%20.Type%20%7D%7D%22%7D%7D%2010.35.16.57%22%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.APIVIPEmptyType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20%5Eapi.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.APIVIPRecordType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20%5Eapi-int.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20answer%20%22%7B%7B%22%7B%7B%20.Name%20%7D%7D%22%7D%7D%2060%20in%20%7B%7B%22%7B%7B%20.Type%20%7D%7D%22%7D%7D%2010.35.16.57%22%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20template%20IN%20%7B%7B%20.Cluster.APIVIPEmptyType%20%7D%7D%20cnv.engineering.redhat.com%20%7B%0A%20%20%20%20%20%20%20%20match%20%5Eapi-int.cnv.engineering.redhat.com%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%20%20%20%20hosts%20%7B%0A%20%20%20%20%20%20%20%20%7B%7B-%20range%20.Cluster.NodeAddresses%20%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B%20.Address%20%7D%7D%20%7B%7B%20.Name%20%7D%7D%20%7B%7B%20.Name%20%7D%7D.%7B%7B%20%24.Cluster.Name%20%7D%7D.%7B%7B%20%24.Cluster.Domain%20%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B-%20end%20%7D%7D%0A%20%20%20%20%20%20%20%20fallthrough%0A%20%20%20%20%7D%0A%7D%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/static-pod-resources/coredns/Corefile.tmpl
      - contents:
          source: data:,kind%3A%20Pod%0AapiVersion%3A%20v1%0Ametadata%3A%0A%20%20name%3A%20coredns%0A%20%20namespace%3A%20openshift-ovirt-infra%0A%20%20creationTimestamp%3A%0A%20%20deletionGracePeriodSeconds%3A%2065%0A%20%20labels%3A%0A%20%20%20%20app%3A%20ovirt-infra-coredns%0Aspec%3A%0A%20%20volumes%3A%0A%20%20-%20name%3A%20resource-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkubernetes%2Fstatic-pod-resources%2Fcoredns%22%0A%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20-%20name%3A%20conf-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fcoredns%22%0A%20%20-%20name%3A%20nm-resolv%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fvar%2Frun%2FNetworkManager%22%0A%20%20initContainers%3A%0A%20%20-%20name%3A%20render-config-coredns%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489%0A%20%20%20%20command%3A%0A%20%20%20%20-%20runtimecfg%0A%20%20%20%20-%20render%0A%20%20%20%20-%20%22%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%22%0A%20%20%20%20-%20%22--api-vip%22%0A%20%20%20%20-%20%2210.35.16.57%22%0A%20%20%20%20-%20%22--ingress-vip%22%0A%20%20%20%20-%20%2210.35.16.59%22%0A%20%20%20%20-%20%22%2Fconfig%22%0A%20%20%20%20-%20%22--out-dir%22%0A%20%20%20%20-%20%22%2Fetc%2Fcoredns%22%0A%20%20%20%20resources%3A%20%7B%7D%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20%20%20-%20name%3A%20resource-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fconfig%22%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fcoredns%22%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20containers%3A%0A%20%20-%20name%3A%20coredns%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A2f52299822c5fdc045c703c43a99ab9db893d530d618176ae52376143a354d3c%0A%20%20%20%20args%3A%0A%20%20%20%20-%20%22--conf%22%0A%20%20%20%20-%20%22%2Fetc%2Fcoredns%2FCorefile%22%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20cpu%3A%20100m%0A%20%20%20%20%20%20%20%20memory%3A%20200Mi%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fcoredns%22%0A%20%20%20%20livenessProbe%3A%0A%20%20%20%20%20%20httpGet%3A%0A%20%20%20%20%20%20%20%20path%3A%20%2Fhealth%0A%20%20%20%20%20%20%20%20port%3A%2018080%0A%20%20%20%20%20%20%20%20scheme%3A%20HTTP%0A%20%20%20%20%20%20initialDelaySeconds%3A%2060%0A%20%20%20%20%20%20timeoutSeconds%3A%205%0A%20%20%20%20%20%20successThreshold%3A%201%0A%20%20%20%20%20%20failureThreshold%3A%205%0A%20%20%20%20terminationMessagePolicy%3A%20FallbackToLogsOnError%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20-%20name%3A%20coredns-monitor%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489%0A%20%20%20%20command%3A%0A%20%20%20%20-%20corednsmonitor%0A%20%20%20%20-%20%22%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%22%0A%20%20%20%20-%20%22%2Fconfig%2FCorefile.tmpl%22%0A%20%20%20%20-%20%22%2Fetc%2Fcoredns%2FCorefile%22%0A%20%20%20%20-%20%22--api-vip%22%0A%20%20%20%20-%20%2210.35.16.57%22%0A%20%20%20%20-%20%22--ingress-vip%22%0A%20%20%20%20-%20%2210.35.16.59%22%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20cpu%3A%20100m%0A%20%20%20%20%20%20%20%20memory%3A%20200Mi%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20%20%20-%20name%3A%20resource-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fconfig%22%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fcoredns%22%0A%20%20%20%20-%20name%3A%20nm-resolv%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Frun%2FNetworkManager%22%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%20%20%20%20%20%20%20%20%0A%20%20hostNetwork%3A%20true%0A%20%20tolerations%3A%0A%20%20-%20operator%3A%20Exists%0A%20%20priorityClassName%3A%20system-node-critical%0Astatus%3A%20%7B%7D%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/manifests/coredns.yaml
      - contents:
          source: data:,%23%20Proxy%20environment%20variables%20will%20be%20populated%20in%20this%20file.%20Properly%0A%23%20url%20encoded%20passwords%20with%20special%20characters%20will%20use%20'%25%3CHEX%3E%3CHEX%3E'.%0A%23%20Systemd%20requires%20that%20any%20%25%20used%20in%20a%20password%20be%20represented%20as%0A%23%20%25%25%20in%20a%20unit%20file%20since%20%25%20is%20a%20prefix%20for%20macros%3B%20this%20restriction%20does%20not%0A%23%20apply%20for%20environment%20files.%20Templates%20that%20need%20the%20proxy%20set%20should%20use%0A%23%20'EnvironmentFile%3D%2Fetc%2Fmco%2Fproxy.env'.%0A
        mode: 420
        overwrite: true
        path: /etc/mco/proxy.env
      - contents:
          source: data:,%5BManager%5D%0ADefaultEnvironment%3DGODEBUG%3Dx509ignoreCN%3D0%0A
        mode: 420
        overwrite: true
        path: /etc/systemd/system.conf.d/10-default-env-godebug.conf
      - contents:
          source: data:,%23%20Force-load%20legacy%20iptables%20so%20it%20is%20usable%20from%20pod%20network%20namespaces%0Aip_tables%0A
        mode: 420
        overwrite: true
        path: /etc/modules-load.d/iptables.conf
      - contents:
          source: data:,global_defs%20%7B%0A%20%20%20%20enable_script_security%0A%20%20%20%20script_user%20root%0A%20%20%20%20max_auto_priority%20-1%0A%20%20%20%20vrrp_garp_master_refresh%2060%0A%7D%0A%0A%23%20TODO%3A%20Improve%20this%20check.%20The%20port%20is%20assumed%20to%20be%20alive.%0A%23%20Need%20to%20assess%20what%20is%20the%20ramification%20if%20the%20port%20is%20not%20there.%0Avrrp_script%20chk_ingress%20%7B%0A%20%20%20%20script%20%22%2Fusr%2Fbin%2Ftimeout%200.9%20%2Fusr%2Fbin%2Fcurl%20-o%20%2Fdev%2Fnull%20-Lfs%20http%3A%2F%2Flocalhost%3A1936%2Fhealthz%2Fready%22%0A%20%20%20%20interval%201%0A%20%20%20%20weight%2020%0A%20%20%20%20rise%203%0A%20%20%20%20fall%202%0A%7D%0A%0Avrrp_script%20chk_default_ingress%20%7B%0A%20%20%20%20script%20%22%2Fusr%2Fbin%2Ftimeout%204.9%20%2Fetc%2Fkeepalived%2Fchk_default_ingress.sh%22%0A%20%20%20%20interval%205%0A%20%20%20%20weight%2050%0A%20%20%20%20rise%203%0A%20%20%20%20fall%202%0A%7D%0A%0A%7B%7B%24nonVirtualIP%20%3A%3D%20.NonVirtualIP%7D%7D%0A%0Avrrp_instance%20%7B%7B%20.Cluster.Name%20%7D%7D_INGRESS%20%7B%0A%20%20%20%20state%20BACKUP%0A%20%20%20%20interface%20%7B%7B%20.VRRPInterface%20%7D%7D%0A%20%20%20%20virtual_router_id%20%7B%7B%20.Cluster.IngressVirtualRouterID%20%7D%7D%0A%20%20%20%20priority%2020%0A%20%20%20%20advert_int%201%0A%20%20%20%20%7B%7Bif%20.EnableUnicast%7D%7D%0A%20%20%20%20unicast_src_ip%20%7B%7B.NonVirtualIP%7D%7D%0A%20%20%20%20unicast_peer%20%7B%0A%20%20%20%20%20%20%20%20%7B%7B-%20range%20.IngressConfig.Peers%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B-%20if%20ne%20%24nonVirtualIP%20.%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B.%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B-%20end%7D%7D%0A%20%20%20%20%20%20%20%20%7B%7B-%20end%7D%7D%0A%20%20%20%20%7D%0A%20%20%20%20%7B%7Bend%7D%7D%0A%20%20%20%20authentication%20%7B%0A%20%20%20%20%20%20%20%20auth_type%20PASS%0A%20%20%20%20%20%20%20%20auth_pass%20%7B%7B%20.Cluster.Name%20%7D%7D_ingress_vip%0A%20%20%20%20%7D%0A%20%20%20%20virtual_ipaddress%20%7B%0A%20%20%20%20%20%20%20%20%7B%7B%20.Cluster.IngressVIP%20%7D%7D%2F%7B%7B%20.Cluster.VIPNetmask%20%7D%7D%0A%20%20%20%20%7D%0A%20%20%20%20track_script%20%7B%0A%20%20%20%20%20%20%20%20chk_ingress%0A%20%20%20%20%20%20%20%20chk_default_ingress%0A%20%20%20%20%7D%0A%7D%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/static-pod-resources/keepalived/keepalived.conf.tmpl
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0A%2Fhost%2Fbin%2Foc%20--kubeconfig%20%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%20get%20ep%20-n%20openshift-ingress%20router-internal-default%20-o%20yaml%20%7C%20grep%20-q%20'ip%3A%20%7B%7B.NonVirtualIP%7D%7D%24'%0A
        mode: 493
        overwrite: true
        path: /etc/kubernetes/static-pod-resources/keepalived/scripts/chk_default_ingress.sh.tmpl
      - contents:
          source: data:,kind%3A%20Pod%0AapiVersion%3A%20v1%0Ametadata%3A%0A%20%20name%3A%20keepalived%0A%20%20namespace%3A%20openshift-ovirt-infra%0A%20%20creationTimestamp%3A%0A%20%20deletionGracePeriodSeconds%3A%2065%0A%20%20labels%3A%0A%20%20%20%20app%3A%20ovirt-infra-vrrp%0Aspec%3A%0A%20%20volumes%3A%0A%20%20-%20name%3A%20resource-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkubernetes%2Fstatic-pod-resources%2Fkeepalived%22%0A%20%20-%20name%3A%20script-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkubernetes%2Fstatic-pod-resources%2Fkeepalived%2Fscripts%22%0A%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkubernetes%22%0A%20%20-%20name%3A%20kubeconfigvarlib%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20-%20name%3A%20conf-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkeepalived%22%0A%20%20-%20name%3A%20run-dir%0A%20%20%20%20empty-dir%3A%20%7B%7D%0A%20%20-%20name%3A%20chroot-host%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2F%22%0A%20%20initContainers%3A%0A%20%20-%20name%3A%20render-config-keepalived%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489%0A%20%20%20%20command%3A%0A%20%20%20%20-%20runtimecfg%0A%20%20%20%20-%20render%0A%20%20%20%20-%20%22%2Fetc%2Fkubernetes%2Fkubeconfig%22%0A%20%20%20%20-%20%22--api-vip%22%0A%20%20%20%20-%20%2210.35.16.57%22%0A%20%20%20%20-%20%22--ingress-vip%22%0A%20%20%20%20-%20%2210.35.16.59%22%0A%20%20%20%20-%20%22%2Fconfig%22%0A%20%20%20%20-%20%22--out-dir%22%0A%20%20%20%20-%20%22%2Fetc%2Fkeepalived%22%0A%20%20%20%20resources%3A%20%7B%7D%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fkubernetes%22%0A%20%20%20%20-%20name%3A%20script-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fconfig%22%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fkeepalived%22%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20containers%3A%0A%20%20-%20name%3A%20keepalived%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3Ad4e6b23834146f9ee49aab9ed1d9acfa8fea85670797af2ccf912eabd9aa824c%0A%20%20%20%20env%3A%0A%20%20%20%20%20%20-%20name%3A%20NSS_SDB_USE_CACHE%0A%20%20%20%20%20%20%20%20value%3A%20%22no%22%0A%20%20%20%20command%3A%0A%20%20%20%20-%20%2Fbin%2Fbash%0A%20%20%20%20-%20-c%0A%20%20%20%20-%20%7C%0A%20%20%20%20%20%20%23%2Fbin%2Fbash%0A%20%20%20%20%20%20sigterm_handler()%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20pid%3D%24(pgrep%20-o%20keepalived)%3B%20then%0A%20%20%20%20%20%20%20%20%20%20kill%20-s%20SIGTERM%20%22%24pid%22%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20reload_keepalived()%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20pid%3D%24(pgrep%20-o%20keepalived)%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20kill%20-s%20SIGHUP%20%22%24pid%22%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Fusr%2Fsbin%2Fkeepalived%20-f%20%2Fetc%2Fkeepalived%2Fkeepalived.conf%20--dont-fork%20--vrrp%20--log-detail%20--log-console%20%26%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20msg_handler()%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20while%20read%20-r%20line%3B%20do%0A%20%20%20%20%20%20%20%20%20%20echo%20%22The%20client%20sent%3A%20%24line%22%20%3E%262%0A%20%20%20%20%20%20%20%20%20%20%23%20currently%20only%20'reload'%20msg%20is%20supported%0A%20%20%20%20%20%20%20%20%20%20if%20%5B%20%22%24line%22%20%3D%20reload%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20reload_keepalived%0A%20%20%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20done%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20remove_vip()%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20address%3D%241%0A%20%20%20%20%20%20%20%20interface%3D%24(ip%20-o%20a%20%7C%20awk%20%22%2F%5Cs%24%7Baddress%7D%5C%2F%2F%20%7Bprint%20%5C%242%7D%22)%0A%20%20%20%20%20%20%20%20cidr%3D%24(ip%20-o%20a%20%7C%20awk%20%22%2F%5Cs%24%7Baddress%7D%5C%2F%2F%20%7Bprint%20%5C%244%7D%22)%0A%20%20%20%20%20%20%20%20if%20%5B%20-n%20%22%24interface%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20ip%20a%20del%20%24cidr%20dev%20%24interface%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20set%20-ex%0A%20%20%20%20%20%20%23%20Ensure%20that%20we%20don't%20have%20stale%20VIPs%20configured%0A%20%20%20%20%20%20%23%20See%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1931505%0A%20%20%20%20%20%20remove_vip%20%2210.35.16.57%22%0A%20%20%20%20%20%20remove_vip%20%2210.35.16.59%22%0A%20%20%20%20%20%20declare%20-r%20keepalived_sock%3D%22%2Fvar%2Frun%2Fkeepalived%2Fkeepalived.sock%22%0A%20%20%20%20%20%20export%20-f%20msg_handler%0A%20%20%20%20%20%20export%20-f%20reload_keepalived%0A%20%20%20%20%20%20export%20-f%20sigterm_handler%0A%0A%20%20%20%20%20%20trap%20sigterm_handler%20SIGTERM%0A%20%20%20%20%20%20if%20%5B%20-s%20%22%2Fetc%2Fkeepalived%2Fkeepalived.conf%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%2Fusr%2Fsbin%2Fkeepalived%20-f%20%2Fetc%2Fkeepalived%2Fkeepalived.conf%20--dont-fork%20--vrrp%20--log-detail%20--log-console%20%26%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20rm%20-f%20%22%24keepalived_sock%22%0A%20%20%20%20%20%20socat%20UNIX-LISTEN%3A%24%7Bkeepalived_sock%7D%2Cfork%20system%3A'bash%20-c%20msg_handler'%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20cpu%3A%20100m%0A%20%20%20%20%20%20%20%20memory%3A%20200Mi%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fkeepalived%22%0A%20%20%20%20-%20name%3A%20run-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Frun%2Fkeepalived%22%0A%20%20%20%20-%20name%3A%20chroot-host%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fhost%22%0A%20%20%20%20-%20name%3A%20kubeconfigvarlib%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20%20%20livenessProbe%3A%0A%20%20%20%20%20%20exec%3A%0A%20%20%20%20%20%20%20%20command%3A%0A%20%20%20%20%20%20%20%20-%20%2Fbin%2Fbash%0A%20%20%20%20%20%20%20%20-%20-c%0A%20%20%20%20%20%20%20%20-%20%7C%0A%20%20%20%20%20%20%20%20%20%20%5B%20!%20-s%20%22%2Fetc%2Fkeepalived%2Fkeepalived.conf%22%20%5D%20%7C%7C%20(echo%20%22State%20%3D%20FAULT%22%20%3E%20%2Ftmp%2Fkeepalived.data%20%26%26%20kill%20-s%20SIGUSR1%20%22%24(pgrep%20-o%20keepalived)%22%20%26%26%20for%20i%20in%20%24(seq%205)%3B%20do%20grep%20-q%20%22State%20%3D%20FAULT%22%20%2Ftmp%2Fkeepalived.data%20%26%26%20sleep%201%20%7C%7C%20exit%200%3B%20done%20%26%26%20exit%201)%0A%20%20%20%20%20%20initialDelaySeconds%3A%2020%0A%20%20%20%20%20%20timeoutSeconds%3A%205%0A%20%20%20%20terminationMessagePolicy%3A%20FallbackToLogsOnError%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20-%20name%3A%20keepalived-monitor%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20image%3A%20quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489%0A%20%20%20%20env%3A%0A%20%20%20%20%20%20-%20name%3A%20ENABLE_UNICAST%0A%20%20%20%20%20%20%20%20value%3A%20%22yes%22%0A%20%20%20%20%20%20-%20name%3A%20IS_BOOTSTRAP%0A%20%20%20%20%20%20%20%20value%3A%20%22no%22%0A%20%20%20%20command%3A%0A%20%20%20%20-%20dynkeepalived%0A%20%20%20%20-%20%22%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%22%0A%20%20%20%20-%20%22%2Fconfig%2Fkeepalived.conf.tmpl%22%0A%20%20%20%20-%20%22%2Fetc%2Fkeepalived%2Fkeepalived.conf%22%0A%20%20%20%20-%20%22--api-vip%22%0A%20%20%20%20-%20%2210.35.16.57%22%0A%20%20%20%20-%20%22--ingress-vip%22%0A%20%20%20%20-%20%2210.35.16.59%22%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20cpu%3A%20100m%0A%20%20%20%20%20%20%20%20memory%3A%20200Mi%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20resource-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fconfig%22%0A%20%20%20%20-%20name%3A%20kubeconfigvarlib%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20%20%20-%20name%3A%20conf-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fkeepalived%22%0A%20%20%20%20-%20name%3A%20run-dir%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Frun%2Fkeepalived%22%0A%20%20%20%20-%20name%3A%20chroot-host%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fhost%22%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20hostNetwork%3A%20true%0A%20%20tolerations%3A%0A%20%20-%20operator%3A%20Exists%0A%20%20priorityClassName%3A%20system-node-critical%0Astatus%3A%20%7B%7D%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/manifests/keepalived.yaml
      - contents:
          compression: ""
          source: data:text/plain;charset=utf-8;base64,Tk9ERV9TSVpJTkdfRU5BQkxFRD1mYWxzZQpTWVNURU1fUkVTRVJWRURfTUVNT1JZPTUwME1pClNZU1RFTV9SRVNFUlZFRF9DUFU9NTAwbQo=
        mode: 420
        overwrite: true
        path: /etc/node-sizing-enabled.env
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0Aset%20-e%0ANODE_SIZES_ENV%3D%24%7BNODE_SIZES_ENV%3A-%2Fetc%2Fnode-sizing.env%7D%0Afunction%20dynamic_memory_sizing%20%7B%0A%20%20%20%20total_memory%3D%24(free%20-g%7Cawk%20'%2F%5EMem%3A%2F%7Bprint%20%242%7D')%0A%20%20%20%20%23%20total_memory%3D8%20test%20the%20recommended%20values%20by%20modifying%20this%20value%0A%20%20%20%20recommended_systemreserved_memory%3D0%0A%20%20%20%20if%20((%24total_memory%20%3C%3D%204))%3B%20then%20%23%2025%25%20of%20the%20first%204GB%20of%20memory%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24total_memory%200.25%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D1%0A%20%20%20%20%20%20%20%20total_memory%3D%24((total_memory-4))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_memory%20%3C%3D%204))%3B%20then%20%23%2020%25%20of%20the%20next%204GB%20of%20memory%20(up%20to%208GB)%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%20%24(echo%20%24total_memory%200.20%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%200.80%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D%24((total_memory-4))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_memory%20%3C%3D%208))%3B%20then%20%23%2010%25%20of%20the%20next%208GB%20of%20memory%20(up%20to%2016GB)%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%20%24(echo%20%24total_memory%200.10%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%200.80%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D%24((total_memory-8))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_memory%20%3C%3D%20112))%3B%20then%20%23%206%25%20of%20the%20next%20112GB%20of%20memory%20(up%20to%20128GB)%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%20%24(echo%20%24total_memory%200.06%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%206.72%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_memory%3D%24((total_memory-112))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_memory%20%3E%3D%200))%3B%20then%20%23%202%25%20of%20any%20memory%20above%20128GB%0A%20%20%20%20%20%20%20%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%20%24(echo%20%24total_memory%200.02%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_MEMORY%3D%24%7Brecommended_systemreserved_memory%7DGi%22%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%7D%0Afunction%20dynamic_cpu_sizing%20%7B%0A%20%20%20%20total_cpu%3D%24(getconf%20_NPROCESSORS_ONLN)%0A%20%20%20%20recommended_systemreserved_cpu%3D0%0A%20%20%20%20if%20((%24total_cpu%20%3C%3D%201))%3B%20then%20%23%206%25%20of%20the%20first%20core%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24total_cpu%200.06%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%0A%20%20%20%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D0.06%0A%20%20%20%20%20%20%20%20total_cpu%3D%24((total_cpu-1))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_cpu%20%3C%3D%201))%3B%20then%20%23%201%25%20of%20the%20next%20core%20(up%20to%202%20cores)%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24recommended_systemreserved_cpu%20%24(echo%20%24total_cpu%200.01%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24recommended_systemreserved_cpu%200.01%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_cpu%3D%24((total_cpu-1))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_cpu%20%3C%3D%202))%3B%20then%20%23%200.5%25%20of%20the%20next%202%20cores%20(up%20to%204%20cores)%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24recommended_systemreserved_cpu%20%24(echo%20%24total_cpu%200.005%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24recommended_systemreserved_cpu%200.01%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20%20%20%20%20total_cpu%3D%24((total_cpu-2))%0A%20%20%20%20fi%0A%20%20%20%20if%20((%24total_cpu%20%3E%3D%200))%3B%20then%20%23%200.25%25%20of%20any%20cores%20above%204%20cores%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(echo%20%24recommended_systemreserved_cpu%20%24(echo%20%24total_cpu%200.0025%20%7C%20awk%20'%7Bprint%20%241%20*%20%242%7D')%20%7C%20awk%20'%7Bprint%20%241%20%2B%20%242%7D')%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_CPU%3D%24%7Brecommended_systemreserved_cpu%7D%22%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%7D%0Afunction%20dynamic_ephemeral_sizing%20%7B%0A%20%20%20%20echo%20%22Not%20implemented%20yet%22%0A%7D%0Afunction%20dynamic_pid_sizing%20%7B%0A%20%20%20%20echo%20%22Not%20implemented%20yet%22%0A%7D%0Afunction%20dynamic_node_sizing%20%7B%0A%20%20%20%20rm%20-f%20%24%7BNODE_SIZES_ENV%7D%0A%20%20%20%20dynamic_memory_sizing%0A%20%20%20%20dynamic_cpu_sizing%0A%20%20%20%20%23dynamic_ephemeral_sizing%0A%20%20%20%20%23dynamic_pid_sizing%0A%7D%0Afunction%20static_node_sizing%20%7B%0A%20%20%20%20rm%20-f%20%24%7BNODE_SIZES_ENV%7D%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_MEMORY%3D%241%22%20%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_CPU%3D%242%22%20%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%7D%0A%0Aif%20%5B%20%241%20%3D%3D%20%22true%22%20%5D%3B%20then%0A%20%20%20%20dynamic_node_sizing%0Aelif%20%5B%20%241%20%3D%3D%20%22false%22%20%5D%3B%20then%0A%20%20%20%20static_node_sizing%20%242%20%243%0Aelse%0A%20%20%20%20echo%20%22Unrecongnized%20command%20line%20option.%20Valid%20options%20are%20%5C%22true%5C%22%20or%20%5C%22false%5C%22%22%0Afi%0A
        mode: 493
        overwrite: true
        path: /usr/local/sbin/dynamic-system-reserved-calc.sh
      - contents:
          source: data:,-----BEGIN%20CERTIFICATE-----%0AMIIDMDCCAhigAwIBAgIId3kDQlQxrbEwDQYJKoZIhvcNAQELBQAwNjESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSAwHgYDVQQDExdhZG1pbi1rdWJlY29uZmlnLXNpZ25lcjAe%0AFw0yMDA0MTUxMjIwNDlaFw0zMDA0MTMxMjIwNDlaMDYxEjAQBgNVBAsTCW9wZW5z%0AaGlmdDEgMB4GA1UEAxMXYWRtaW4ta3ViZWNvbmZpZy1zaWduZXIwggEiMA0GCSqG%0ASIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCvcOupAj5wPt40A1koRJjj2cNJGDUFNXe%0AP55uMmOboETCKlBp0w97eFRc3KN2M4QkxZAJX2CZRsM8AB%2B%2B7%2FqMZfgvMkxZMaWX%0ATt0sxjqcgfoWbOKFqGkP3U2yyfwrR91hzLHTKP0gBTaENEhv8281%2Fr1HGcsvXAqE%0A0c2laER0aFXLTm8NXMEOWrcmc2CZ%2FelIAu7Ug%2Bpr9rijU4szC0j4w5H8EbrPqmoz%0AbqwNValEIjLRqs9E58yK5%2B4jo%2BNDYt%2FHrHIZU9H2ySyXK%2B2iShQZkURnBQwZHFTZ%0AYz1lUKmhlQSbmQhQJEEiYTX24AgK2aM9nfwYDcy5cVsePQJTdDR9AgMBAAGjQjBA%0AMA4GA1UdDwEB%2FwQEAwICpDAPBgNVHRMBAf8EBTADAQH%2FMB0GA1UdDgQWBBQFQl4O%0A7PP9MTUPds919C0KrlPyNTANBgkqhkiG9w0BAQsFAAOCAQEAI1x%2FWrEB9dpuxLwP%0AfIgIYVy0%2BsxcrHk3%2B9lczyzBh9Uie1VFfW1LApjjjFiU3CJ595WI6TtdfQCsx4F%2B%0Auvaox5nu7u7SHvIIP2HxZRG%2Bc2BrKH%2BfcgfmbIaSh5xa9OZPFhKRTm08EjDOWT6%2B%0A9EvWU%2BQy%2FMPqJNChxqIakHowopSyQ7OM15ThMq81ehbsAHVAX5pXCIxt8sM%2F6EBA%0AF8fRlJh9iATlvsjZz0Z1Z3anjfZNKVzS6JCCVLfRTKed%2BArnvSmnKgZdCQsC8Jqa%0A8Z4ugyJ2bjsCT8LmEY53Dodmscc9fzPgfWY2j2C9NKHoTYTb29Ag1FlSGQIYfGyk%0ArrTLMQ%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDHjCCAgagAwIBAgIIDJoGDIwFhY4wDQYJKoZIhvcNAQELBQAwLTESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MRcwFQYDVQQDEw5rdWJlbGV0LXNpZ25lcjAeFw0yMDA0MTUx%0AMjIxMDVaFw0yMDA0MTYxMjIxMDVaMC0xEjAQBgNVBAsTCW9wZW5zaGlmdDEXMBUG%0AA1UEAxMOa3ViZWxldC1zaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK%0AAoIBAQDHwNN4ol2h2m%2FgMq0gEZAn0wojJf%2BVPn3rDpgLy9FeK4RqkDE4vo1H0fx4%0ACb%2Fsbi5OTanOArh2eka%2Fq8ulRoNl9KYwcKWnuMPGZ5qjmcWnC2SSf53W4l636wIT%0AD03JSJmtDTFKMD%2FWZThnq0ADya5vhDTzWA75ryRCuuyntIHk%2BYb4ePwmdFH%2Fi%2FZg%0AyrsQG8ZEB716KwiEDtGcjdpVwcUjEA4m9MK%2BKW%2BwLMYi81QyZftOqW27BdqExQ9j%0Al42D1ToG22rZ%2BCtEEGiKRczeu%2BQttRwojyhEP0tyERlFCGiKnf%2Fx09nRsV%2B4q%2Bp0%0A6PsB3V8hkaKS36GrOjHE5QVP64AbAgMBAAGjQjBAMA4GA1UdDwEB%2FwQEAwICpDAP%0ABgNVHRMBAf8EBTADAQH%2FMB0GA1UdDgQWBBQ47%2FOmuY%2BsPwdOb60uettcsSTfdzAN%0ABgkqhkiG9w0BAQsFAAOCAQEAim%2BAD6drUpWoGuu%2FbF%2BUhObkKqDce5CCE7HdBfL6%0A01kX4puIBCY6EqS80owZ7rlQN0EZyRafc5YEeozkThiom9wOEtDe6bH2bqevp2hE%0AvtEEH5LS0foTVis9KU88sHCxjVFTW8Kq3mVgP1xrp8Ijfgd8l224U2p9PAiQF0IW%0ATIvAgVJ9nMcgYYaKuDltsBxi78mpektHSIkftqxIpRBSHyqmnpEUS4iGuTmFhTKj%0AkscSPSszCB3xWymdV9vWvYVSYB8bltCW%2FAO99AHn4r3yzJ%2FOPBbk1mNBBJ7e2JaJ%0AZhQXH94ayl8liwdw4fSyLZ%2BkqapACvWppR6nyXw0c9o%2BKw%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDNDCCAhygAwIBAgIIREt6dT3JKkMwDQYJKoZIhvcNAQELBQAwODESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSIwIAYDVQQDExlrdWJlLWNvbnRyb2wtcGxhbmUtc2lnbmVy%0AMB4XDTIwMDQxNTEyMjEwNVoXDTIxMDQxNTEyMjEwNVowODESMBAGA1UECxMJb3Bl%0AbnNoaWZ0MSIwIAYDVQQDExlrdWJlLWNvbnRyb2wtcGxhbmUtc2lnbmVyMIIBIjAN%0ABgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA%2Bm5jTa%2BPrMpTrxTgTO2AT%2FJxP9tK%0Auo641T30VajBUl9ru0s%2BeH9omZasJA4WtW9av8z9ZlSukBl5tOB%2BF3DP8iVTDwe%2F%0A5ZmOE8RPs5D8hHAbqBYxyFGvocKw%2FoZ0e2ZL1iuVLWlTQaj4FU48KGF%2FOURQQ4zO%0APuny88QpS47kGpqf7wLuDt6jJ27wAK%2By5bi3kmzuFZwyxpEc6odw93ON%2BcYW4cX2%0Aywsa2kVqZECvqlxF%2FA2AcbWNRjGtkuNzSSSovfx4a3ncqoZ9zSKYBkLzcuHTTDOI%0AhMZ%2F9IFf9NMzYcsZTpvvNnqOTXq%2Fmy4rwfOlInt3hrY8cFWlThb5Fb76OwIDAQAB%0Ao0IwQDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH%2FBAUwAwEB%2FzAdBgNVHQ4EFgQU%0A0G%2F%2B9kKChelWDIZcDhvLaTrKPh8wDQYJKoZIhvcNAQELBQADggEBANWJcverXQDk%0AZKHWFzMptZznXzuH9iqHDevlvC7oaSPbyaMapmmreOMUY%2BzJDOxvYXy58lerf8g4%0AXQgqufJa2zk2n0U7b09LYXFL371wAl78tqkuzehep2OdAGatboI9L9FYKKb%2BOtdS%0AKlIbdZlJtm9xbW8Eaq9bQ0o8QZpBJ7Yh12aGyjltJ2UD8oQyzdKrTyYbHexM22tX%0A7FvU7EeP3ouyjywozqwEDFZABivDwfwupvsvOYshdM3vwLGYg%2FFBmPCheskSQoXc%0AE8uyTPMJFmLZWVglWjCoYGG3MA%2FhHj95h2jXwY4CqT3zKMKg3RqkKqF5Q83rcqvS%0AjdTn0nV5IGI%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDlTCCAn2gAwIBAgIIKPAYnAMJYgcwDQYJKoZIhvcNAQELBQAwWDFWMFQGA1UE%0AAwxNb3BlbnNoaWZ0LWt1YmUtYXBpc2VydmVyLW9wZXJhdG9yX2t1YmUtYXBpc2Vy%0AdmVyLXRvLWt1YmVsZXQtc2lnbmVyQDE2Mzc0MTA4NzcwHhcNMjExMTIwMTIyMTE3%0AWhcNMjIxMTIwMTIyMTE4WjBYMVYwVAYDVQQDDE1vcGVuc2hpZnQta3ViZS1hcGlz%0AZXJ2ZXItb3BlcmF0b3Jfa3ViZS1hcGlzZXJ2ZXItdG8ta3ViZWxldC1zaWduZXJA%0AMTYzNzQxMDg3NzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK389H90%0AV3fzzxD2Dqfk2J2Q4KhSfbAwKC9cZzjbedKELBERN6p9lfuSGszX%2F78NQ8km99GW%0AnL9bmpydfdLeNuLcrRdLFzSdiPNrB58Z9TNxOVhso7e52fGK5HGlrdekKHQLCffU%0ApLc7CgapA%2BuqslO4g3RJKVk29Ybgi1ZFPk4e9IcR1DASL9dE1cWYwzQ65PpKwtNe%0AAmUdPp%2Btwyjj1e%2FciZ6ExmUvQwdxVg331QSWgRFFksupwdVt6ysFyiZcIWlEJT2O%0AAjhQnOaJD38ftatDQGohtB05g1o96wwKCN7RH1kkIhHIVI8Xh865izycKzo%2F2138%0A0WC2bm5WD8JZIzkCAwEAAaNjMGEwDgYDVR0PAQH%2FBAQDAgKkMA8GA1UdEwEB%2FwQF%0AMAMBAf8wHQYDVR0OBBYEFGxUf4jDBZPPbS%2FvbobU%2FaY4cO9JMB8GA1UdIwQYMBaA%0AFGxUf4jDBZPPbS%2FvbobU%2FaY4cO9JMA0GCSqGSIb3DQEBCwUAA4IBAQBytdzv4Qag%0ARH35yzdfN3ms8k755nNhG3n6KAkpOcAT0ZAtgdG0W%2F%2FxwdlC%2B3QYrjjDd3oQeuYI%0AWYwwuEx9l5qyyGvGYtUKD0Rgoq6Y5U5%2F9wBIMIOOEMSB4NZExw5oRgWnj7yBVNyF%0AOKABAgm%2FRw%2Bq7Dav%2Fn5N8aOmGiB1k4g5mSx9gRGwgAueqUB4%2F7sTM6NLP0nvgzLW%0A6wbjxEmjoOBgvlTCWnSKb%2FvHqsjDdnz8OVHVSUwZuHeRMRKrG%2FEneewXIinP8fle%0Alh0Iqekw8%2F8FqD8RdiJt6n1%2FUqeBoTatCCKwvt2wj3ee17R%2FQfQFMqVGsB1qpOfX%0AoLXoxpR%2FrSgq%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDSDCCAjCgAwIBAgIIOf78TI3x4AMwDQYJKoZIhvcNAQELBQAwQjESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSwwKgYDVQQDEyNrdWJlbGV0LWJvb3RzdHJhcC1rdWJlY29u%0AZmlnLXNpZ25lcjAeFw0yMDA0MTUxMjIwNTJaFw0zMDA0MTMxMjIwNTJaMEIxEjAQ%0ABgNVBAsTCW9wZW5zaGlmdDEsMCoGA1UEAxMja3ViZWxldC1ib290c3RyYXAta3Vi%0AZWNvbmZpZy1zaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCy%0AINm4gEIsdDiBuQcWuUbd30HTK2eVwdPugyNf31NcTaN7w6C%2Fjg6j3SJYs9ySk36w%0ARTh5b9iBN7FxozHRZwTP3qH4ANa2qjyed2Ke8vTDCkILckymje6F%2B2pV0scscrRQ%0Avah1amMrMooNdiZJAa9DbCbVsP9KTq9d%2FAlb2i3DRowYumdobPKpwO990%2FRrt8YA%0AAFfIs2DFCF0iJgsjXHkuB971I%2F2JkibmOPcw35XygvE3mrmHn1FOYkGAPiB7AI5C%0AHOby6Edyhxj4poKo%2F0iS9HJkvkAbIEUhMJPt1OHU5io2v%2FJ34cqSb6wGU7Wn09va%0ApNRbNUQ7nLDE8bpBZvgdAgMBAAGjQjBAMA4GA1UdDwEB%2FwQEAwICpDAPBgNVHRMB%0AAf8EBTADAQH%2FMB0GA1UdDgQWBBTHJXzaAZu2U8yXen8Pb9%2Fx0PXrtjANBgkqhkiG%0A9w0BAQsFAAOCAQEAJtD4ifubAoNMjSliPtc2%2BvhRlR5G8TbPMBkQQQK2MwEO1OCq%0A%2FDyQtIsdRFDx2m6oQOUK2j%2F41elUeMPZsW8h6k51%2B5jBZBPwlqnZPAYFLJA93IHd%0ATr4ahlRsrqffiZX2YaXVjnR9gyutnsF01ZCCsy25yr1bz8NgnXTzs%2BisxN1Gny%2By%0Al%2FGUzA%2B7%2B9GgieR0p0NfxHoNK8b6T7g8kxsG7esLeYGOxYBRzxKlKG2tADRF72%2FW%0A%2BfxHyEZUdE1YeRwt%2BT2JjMXmvN8xsvSVJx0E3Kz1MYILxjQ7fkVGQX336TwbvDkq%0AGsydmjCAjw3s0LzFQm3tSo1lwEPPdWJaofXSTQ%3D%3D%0A-----END%20CERTIFICATE-----%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/kubelet-ca.crt
      - contents:
          source: data:,%23%20Turning%20on%20Accounting%20helps%20track%20down%20performance%20issues.%0A%5BManager%5D%0ADefaultCPUAccounting%3Dyes%0ADefaultMemoryAccounting%3Dyes%0ADefaultBlockIOAccounting%3Dyes%0A
        mode: 420
        overwrite: true
        path: /etc/systemd/system.conf.d/kubelet-cgroups.conf
      - contents:
          source: data:,%5BService%5D%0AEnvironment%3D%22KUBELET_LOG_LEVEL%3D2%22%0A
        mode: 420
        overwrite: true
        path: /etc/systemd/system/kubelet.service.d/20-logging.conf
      - contents:
          source: data:,%23%20ignore%20known%20SDN-managed%20devices%0A%5Bdevice%5D%0Amatch-device%3Dinterface-name%3Abr-int%3Binterface-name%3Abr-local%3Binterface-name%3Abr-nexthop%3Binterface-name%3Aovn-k8s-*%3Binterface-name%3Ak8s-*%3Binterface-name%3Atun0%3Binterface-name%3Abr0%3Binterface-name%3Apatch-br-*%3Binterface-name%3Abr-ext%3Binterface-name%3Aext-vxlan%3Binterface-name%3Aext%3Binterface-name%3Aint%3Binterface-name%3Avxlan_sys_*%3Binterface-name%3Agenev_sys_*%3Bdriver%3Aveth%0Amanaged%3D0%0A
        mode: 420
        overwrite: true
        path: /etc/NetworkManager/conf.d/sdn.conf
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0A%23%20Set%20interface%20ofport_request%20to%20guarantee%20stable%20ofport%20numbers.%20This%20is%20important%20for%20flow%20matches.%0A%23%20Otherwise%2C%20another%20ofport%20number%20is%20assigned%20to%20the%20interface%20on%20every%20restart%20of%20NetworkManager.%0A%23%20This%20script%20will%20build%20an%20associative%20array%20INTERFACE_NAME-%3Eofport_request%20and%20will%20save%20it%20to%20file%20CONFIGURATION_FILE.%0A%23%20When%20an%20interface%20is%20brought%20up%2C%20this%20will%20reuse%20the%20value%20from%20the%20associative%20array%20if%20such%20a%20value%20exists.%0A%23%20Otherwise%2C%20this%20will%20try%20to%20use%20the%20current%20ofport%20value.%20If%20the%20ofport%20value%20is%20already%20reserved%2C%20then%0A%23%20this%20uses%20the%20lowest%20available%20numerical%20value%2C%20instead.%0Aset%20-eux%20-o%20pipefail%0Aif%20%5B%5B%20%22OpenShiftSDN%22%20!%3D%20%22OVNKubernetes%22%20%5D%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0AINTERFACE_NAME%3D%241%0AOPERATION%3D%242%0A%0A%23%20Only%20execute%20this%20on%20pre-up%0Aif%20%5B%20%22%24%7BOPERATION%7D%22%20!%3D%20%22pre-up%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20interface's%20NM%20uuid%0AINTERFACE_CONNECTION_UUID%3D%24(nmcli%20-t%20-f%20device%2Ctype%2Cuuid%20conn%20%7C%20awk%20-F%20'%3A'%20'%7Bif(%241%3D%3D%22'%24%7BINTERFACE_NAME%7D'%22%20%26%26%20%242!~%2F%5Eovs*%2F)%20print%20%24NF%7D')%0Aif%20%5B%20%22%24%7BINTERFACE_CONNECTION_UUID%7D%22%20%3D%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20interface's%20slave-type.%20If%20this%20is%20not%20an%20ovs-port%2C%20then%20exit%0AINTERFACE_OVS_SLAVE_TYPE%3D%24(nmcli%20-t%20-f%20connection.slave-type%20conn%20show%20%22%24%7BINTERFACE_CONNECTION_UUID%7D%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%0Aif%20%5B%20%22%24%7BINTERFACE_OVS_SLAVE_TYPE%7D%22%20!%3D%20%22ovs-port%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20This%20is%20not%20necessarily%20a%20UUID%20(can%20be%20a%20name%20in%20case%20of%20bonds)%20but%20this%20should%20be%20unique%0APORT%3D%24(nmcli%20-t%20-f%20connection.master%20conn%20show%20%22%24%7BINTERFACE_CONNECTION_UUID%7D%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%0Aif%20%5B%20%22%24%7BPORT%7D%22%20%3D%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20interface's%20NM%20uuid%0APORT_CONNECTION_UUID%3D%24(nmcli%20-t%20-f%20device%2Ctype%2Cuuid%20conn%20%7C%20awk%20-F%20'%3A'%20'%7Bif(%20(%241%3D%3D%22'%24%7BPORT%7D'%22%20%7C%7C%20%243%3D%3D%22'%24%7BPORT%7D'%22)%20%26%26%20%242~%2F%5Eovs*%2F)%20print%20%24NF%7D')%0Aif%20%5B%20%22%24%7BPORT_CONNECTION_UUID%7D%22%20%3D%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20port's%20slave-type.%20If%20this%20is%20not%20an%20ovs-bridge%2C%20then%20exit%0APORT_OVS_SLAVE_TYPE%3D%24(nmcli%20-t%20-f%20connection.slave-type%20conn%20show%20%22%24%7BPORT_CONNECTION_UUID%7D%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%0Aif%20%5B%20%22%24%7BPORT_OVS_SLAVE_TYPE%7D%22%20!%3D%20%22ovs-bridge%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20port's%20master%20%3D%20bridge%20name%0ABRIDGE_NAME%3D%24(nmcli%20-t%20-f%20connection.master%20conn%20show%20%22%24%7BPORT_CONNECTION_UUID%7D%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%0A%23%20Limit%20this%20to%20br-ex%20and%20br-ex1%20only.%20If%20one%20wanted%20to%20enable%20this%20for%20all%20OVS%20bridges%2C%0A%23%20the%20condition%20would%20be%3A%20if%20%5B%20%22%24BRIDGE_NAME%22%20%3D%3D%20%22%22%20%5D%3B%20then%0Aif%20%5B%20%22%24%7BBRIDGE_NAME%7D%22%20!%3D%20%22br-ex%22%20%5D%20%26%26%20%5B%20%22%24%7BBRIDGE_NAME%7D%22%20!%3D%20%22br-ex1%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Make%20sure%20that%20the%20interface%20is%20plugged%20into%20OVS%0A%23%20This%20should%20always%20be%20the%20case%20given%20that%20we%20are%20in%20pre-up%2C%20but%20exit%20gracefully%20in%20the%20odd%20case%20that%20it's%20not%0Aif%20!%20ovs-vsctl%20list%20interface%20%22%24%7BINTERFACE_NAME%7D%22%20%3E%2Fdev%2Fnull%202%3E%261%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0ACONFIGURATION_FILE%3D%22%2Frun%2Fofport_requests.%24%7BBRIDGE_NAME%7D%22%0A%0A%23%20Declare%20a%20new%20associative%20array.%20If%20CONFIGURATION_FILE%20exists%2C%20source%20entries%20from%20there%0Adeclare%20-A%20INTERFACES%0Aif%20%5B%20-f%20%22%24%7BCONFIGURATION_FILE%7D%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22Sourcing%20configuration%20file%20'%24%7BCONFIGURATION_FILE%7D'%20with%20contents%3A%22%0A%20%20%20%20cat%20%22%24%7BCONFIGURATION_FILE%7D%22%0A%20%20%20%20source%20%22%24%7BCONFIGURATION_FILE%7D%22%0Afi%0A%0A%23%20get_interface_ofport_request%20will%20return%0A%23%20*%20either%3A%20the%20current%20ofport%20assignment%20for%20the%20port%20if%20no%20interface%20has%20claimed%20this%20ofport%20number%2C%20yet%0A%23%20*%20or%3A%20%20%20%20%20the%20lowest%20available%20free%20ofport%20number%0Afunction%20get_interface_ofport_request()%20%7B%0A%20%20%20%20%23%20Build%20an%20array%20that%20only%20contains%20the%20currently%20reserved%20ofport_requests%0A%20%20%20%20declare%20-A%20ofport_requests%0A%20%20%20%20for%20interface_name%20in%20%22%24%7B!INTERFACES%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20%20%20%20%20ofport_requests%5B%24%7BINTERFACES%5B%24interface_name%5D%7D%5D%3D%24%7BINTERFACES%5B%24interface_name%5D%7D%0A%20%20%20%20done%0A%0A%20%20%20%20%23%20Get%20the%20current%20ofport%20number%20assignment%0A%20%20%20%20local%20current_ofport%3D%24(ovs-vsctl%20get%20Interface%20%22%24%7BINTERFACE_NAME%7D%22%20ofport)%0A%0A%20%20%20%20%23%20If%20the%20current%20ofport%20number%20is%20still%20free%2C%20use%20it%0A%20%20%20%20if%20!%20%5B%20%22%24%7Bofport_requests%5B%24current_ofport%5D%2Ba%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%24current_ofport%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20If%20the%20current%20ofport%20number%20is%20not%20free%2C%20return%20the%20lowest%20free%20entry%0A%20%20%20%20i%3D0%0A%20%20%20%20for%20i%20in%20%7B1..65000%7D%3B%20do%0A%20%20%20%20%20%20%20%20if%20!%20%5B%20%22%24%7Bofport_requests%5B%24i%5D%2Ba%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20%24i%0A%20%20%20%20%20%20%20%20%20%20%20%20return%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20done%0A%0A%20%20%20%20%23%20if%20we%20still%20cannot%20find%20an%20ID%2C%20exit%20with%20an%20error%0A%20%20%20%20echo%20%22Impossible%20to%20find%20an%20ofport%20ID%20for%20interface%20%24%7BINTERFACE_NAME%7D%22%20%3E%262%0A%20%20%20%20exit%201%0A%7D%0A%0A%23%20If%20INTERFACES%5BINTERFACE_NAME%5D%20exists%2C%20use%20that%20value%0A%23%20If%20INTERFACES%5BINTERFACE_NAME%5D%20does%20not%20exists%2C%20use%20the%20value%20from%20get_interface_ofport_request%0Aif%20!%20%5B%20%22%24%7BINTERFACES%5B%24INTERFACE_NAME%5D%2Ba%7D%22%20%5D%3B%20then%0A%20%20%20%20INTERFACES%5B%24INTERFACE_NAME%5D%3D%24(get_interface_ofport_request)%0Afi%0A%23%20Set%20ofport_request%20according%20to%20INTERFACES%5BINTERFACE_NAME%5D%0Aovs-vsctl%20set%20Interface%20%22%24%7BINTERFACE_NAME%7D%22%20ofport_request%3D%24%7BINTERFACES%5B%24INTERFACE_NAME%5D%7D%0A%0A%23%20Save%20current%20state%20of%20INTERFACES%20to%20CONFIGURATION_FILE%0Adeclare%20-p%20INTERFACES%20%3E%7C%20%22%24%7BCONFIGURATION_FILE%7D%22%0A
        mode: 493
        overwrite: true
        path: /etc/NetworkManager/dispatcher.d/pre-up.d/10-ofport-request.sh
      - contents:
          source: data:,%7B%22auths%22%3A%7B%22cloud.openshift.com%22%3A%7B%22username%22%3A%22openshift-release-dev%2Borencohen1vkzihahiehsbx9jbqgrf42rpjp%22%2C%22password%22%3A%22INYIVWD5629UB0C46IK0D57ZLGS50U75W0CW0FK0NGMG9FBRRGZG1CML4OOWRESY%22%2C%22auth%22%3A%22b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29yZW5jb2hlbjF2a3ppaGFoaWVoc2J4OWpicWdyZjQycnBqcDpJTllJVldENTYyOVVCMEM0NklLMEQ1N1pMR1M1MFU3NVcwQ1cwRkswTkdNRzlGQlJSR1pHMUNNTDRPT1dSRVNZ%22%2C%22email%22%3A%22ocohen%40redhat.com%22%7D%2C%22quay.io%22%3A%7B%22username%22%3A%22openshift-release-dev%2Borencohen1vkzihahiehsbx9jbqgrf42rpjp%22%2C%22password%22%3A%22INYIVWD5629UB0C46IK0D57ZLGS50U75W0CW0FK0NGMG9FBRRGZG1CML4OOWRESY%22%2C%22auth%22%3A%22b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29yZW5jb2hlbjF2a3ppaGFoaWVoc2J4OWpicWdyZjQycnBqcDpJTllJVldENTYyOVVCMEM0NklLMEQ1N1pMR1M1MFU3NVcwQ1cwRkswTkdNRzlGQlJSR1pHMUNNTDRPT1dSRVNZ%22%2C%22email%22%3A%22ocohen%40redhat.com%22%7D%2C%22registry.connect.redhat.com%22%3A%7B%22username%22%3A%2253061217%7Cuhc-1VkZIHAhiEHsbX9jBQGRF42rpjp%22%2C%22password%22%3A%22eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJkNmRiOWMyMmU3OWQ0YTk3OWFmYTk5OTE0Y2Y5ZDI1YyJ9.ngNLwUvHQY2Jjb9AJqSPUyzaaa-b0M3ZH1ZnzZ-w03OoEPTYtkxk4TvjqTNjSFO7IJ6tqWQ-RHH_UFouIe2W47ZRssBxI25i0nsbFaOG-JWbj_UwwCwfzW1xqWfxyqoVzlFX7717xjPKe_DWmP7IeO6cRYTAjc6sw3nYDCFi86k0SelNXQjlnkoq_dYpmtYUEZzVE0W42lWrEeHsqqYIs3Nilm20lkGoURKkY6HX07epJrpEhk7YNhxjFm2_8InMP7L7gT7XaJSdOx8y4xfm_2xumviQzSJm1uPQWDsiLDR2RLpZCDkvCZred5y2A6GsWnGF0SpEMVe6x4YJkJ7lnS1aJ_f3c-T5JhRGKNQ0upF-OraFvYBDMRJYoC1MWqQOzA2AH3Fx57OCfTlVeF9gc6TjEd_SjD6bEQ8FO1V_pHlVcvv5q8xpT560Mr_ATVy6OdvKKPOwPncA0G8yRxIKVP0ugdJoYWlonEfI_velxGs2OLnTGxAODfgbmBFIBj_k5C2uahBQ5Yr4wGmhSZRJg6DfH6WXfZ_z2cLVnEkJXBMViHEP8ihG6KSC9QzRyznuCZHY22uv8foIJH8SZ8k8Z32lTbVRKl4irNelv_xPuWrO6Wo_duDQ1-x17phPPumXTBcMr3Eee6b6RdobRYK6sORDEfUj1LouPhuPmCmHIg8%22%2C%22auth%22%3A%22NTMwNjEyMTd8dWhjLTFWa1pJSEFoaUVIc2JYOWpCUUdSRjQycnBqcDpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSmtObVJpT1dNeU1tVTNPV1EwWVRrM09XRm1ZVGs1T1RFMFkyWTVaREkxWXlKOS5uZ05Md1V2SFFZMkpqYjlBSnFTUFV5emFhYS1iME0zWkgxWm56Wi13MDNPb0VQVFl0a3hrNFR2anFUTmpTRk83SUo2dHFXUS1SSEhfVUZvdUllMlc0N1pSc3NCeEkyNWkwbnNiRmFPRy1KV2JqX1V3d0N3ZnpXMXhxV2Z4eXFvVnpsRlg3NzE3eGpQS2VfRFdtUDdJZU82Y1JZVEFqYzZzdzNuWURDRmk4NmswU2VsTlhRamxua29xX2RZcG10WVVFWnpWRTBXNDJsV3JFZUhzcXFZSXMzTmlsbTIwbGtHb1VSS2tZNkhYMDdlcEpycEVoazdZTmh4akZtMl84SW5NUDdMN2dUN1hhSlNkT3g4eTR4Zm1fMnh1bXZpUXpTSm0xdVBRV0RzaUxEUjJSTHBaQ0RrdkNacmVkNXkyQTZHc1duR0YwU3BFTVZlNng0WUprSjdsblMxYUpfZjNjLVQ1SmhSR0tOUTB1cEYtT3JhRnZZQkRNUkpZb0MxTVdxUU96QTJBSDNGeDU3T0NmVGxWZUY5Z2M2VGpFZF9TakQ2YkVROEZPMVZfcEhsVmN2djVxOHhwVDU2ME1yX0FUVnk2T2R2S0tQT3dQbmNBMEc4eVJ4SUtWUDB1Z2RKb1lXbG9uRWZJX3ZlbHhHczJPTG5UR3hBT0RmZ2JtQkZJQmpfazVDMnVhaEJRNVlyNHdHbWhTWlJKZzZEZkg2V1hmWl96MmNMVm5Fa0pYQk1WaUhFUDhpaEc2S1NDOVF6Unl6bnVDWkhZMjJ1djhmb0lKSDhTWjhrOFozMmxUYlZSS2w0aXJOZWx2X3hQdVdyTzZXb19kdURRMS14MTdwaFBQdW1YVEJjTXIzRWVlNmI2UmRvYlJZSzZzT1JERWZVajFMb3VQaHVQbUNtSElnOA%3D%3D%22%2C%22email%22%3A%22ocohen%40redhat.com%22%7D%2C%22registry.redhat.io%22%3A%7B%22username%22%3A%2253061217%7Cuhc-1VkZIHAhiEHsbX9jBQGRF42rpjp%22%2C%22password%22%3A%22eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJkNmRiOWMyMmU3OWQ0YTk3OWFmYTk5OTE0Y2Y5ZDI1YyJ9.ngNLwUvHQY2Jjb9AJqSPUyzaaa-b0M3ZH1ZnzZ-w03OoEPTYtkxk4TvjqTNjSFO7IJ6tqWQ-RHH_UFouIe2W47ZRssBxI25i0nsbFaOG-JWbj_UwwCwfzW1xqWfxyqoVzlFX7717xjPKe_DWmP7IeO6cRYTAjc6sw3nYDCFi86k0SelNXQjlnkoq_dYpmtYUEZzVE0W42lWrEeHsqqYIs3Nilm20lkGoURKkY6HX07epJrpEhk7YNhxjFm2_8InMP7L7gT7XaJSdOx8y4xfm_2xumviQzSJm1uPQWDsiLDR2RLpZCDkvCZred5y2A6GsWnGF0SpEMVe6x4YJkJ7lnS1aJ_f3c-T5JhRGKNQ0upF-OraFvYBDMRJYoC1MWqQOzA2AH3Fx57OCfTlVeF9gc6TjEd_SjD6bEQ8FO1V_pHlVcvv5q8xpT560Mr_ATVy6OdvKKPOwPncA0G8yRxIKVP0ugdJoYWlonEfI_velxGs2OLnTGxAODfgbmBFIBj_k5C2uahBQ5Yr4wGmhSZRJg6DfH6WXfZ_z2cLVnEkJXBMViHEP8ihG6KSC9QzRyznuCZHY22uv8foIJH8SZ8k8Z32lTbVRKl4irNelv_xPuWrO6Wo_duDQ1-x17phPPumXTBcMr3Eee6b6RdobRYK6sORDEfUj1LouPhuPmCmHIg8%22%2C%22auth%22%3A%22NTMwNjEyMTd8dWhjLTFWa1pJSEFoaUVIc2JYOWpCUUdSRjQycnBqcDpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSmtObVJpT1dNeU1tVTNPV1EwWVRrM09XRm1ZVGs1T1RFMFkyWTVaREkxWXlKOS5uZ05Md1V2SFFZMkpqYjlBSnFTUFV5emFhYS1iME0zWkgxWm56Wi13MDNPb0VQVFl0a3hrNFR2anFUTmpTRk83SUo2dHFXUS1SSEhfVUZvdUllMlc0N1pSc3NCeEkyNWkwbnNiRmFPRy1KV2JqX1V3d0N3ZnpXMXhxV2Z4eXFvVnpsRlg3NzE3eGpQS2VfRFdtUDdJZU82Y1JZVEFqYzZzdzNuWURDRmk4NmswU2VsTlhRamxua29xX2RZcG10WVVFWnpWRTBXNDJsV3JFZUhzcXFZSXMzTmlsbTIwbGtHb1VSS2tZNkhYMDdlcEpycEVoazdZTmh4akZtMl84SW5NUDdMN2dUN1hhSlNkT3g4eTR4Zm1fMnh1bXZpUXpTSm0xdVBRV0RzaUxEUjJSTHBaQ0RrdkNacmVkNXkyQTZHc1duR0YwU3BFTVZlNng0WUprSjdsblMxYUpfZjNjLVQ1SmhSR0tOUTB1cEYtT3JhRnZZQkRNUkpZb0MxTVdxUU96QTJBSDNGeDU3T0NmVGxWZUY5Z2M2VGpFZF9TakQ2YkVROEZPMVZfcEhsVmN2djVxOHhwVDU2ME1yX0FUVnk2T2R2S0tQT3dQbmNBMEc4eVJ4SUtWUDB1Z2RKb1lXbG9uRWZJX3ZlbHhHczJPTG5UR3hBT0RmZ2JtQkZJQmpfazVDMnVhaEJRNVlyNHdHbWhTWlJKZzZEZkg2V1hmWl96MmNMVm5Fa0pYQk1WaUhFUDhpaEc2S1NDOVF6Unl6bnVDWkhZMjJ1djhmb0lKSDhTWjhrOFozMmxUYlZSS2w0aXJOZWx2X3hQdVdyTzZXb19kdURRMS14MTdwaFBQdW1YVEJjTXIzRWVlNmI2UmRvYlJZSzZzT1JERWZVajFMb3VQaHVQbUNtSElnOA%3D%3D%22%2C%22email%22%3A%22ocohen%40redhat.com%22%7D%2C%22registry.stage.redhat.io%22%3A%7B%22username%22%3A%22711497%7Cjialiu-stage%22%2C%22password%22%3A%22eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiIyYzk3ZWFlOTc3ODU0ODI2OWE4ZDcyZjIwNjVjZDBhMiJ9.Wb9vo79gdc-uk_UQt5SbzZIVqgfv7BlFcJSoAjSg-04-EgGJ9LzLiPmayI4_SE8z7Etyq16XlJxiBCuX9AG7jCaFf86PvkZUxVeNLmWceJbYOdJPniBX1LpedmdRdALZ9OPU30HhPYSPP4SWnfOoRmjkErb9aOMjLgFDAHJ-DUWH8JZJ-Jhu2Sq6j7pkx0JaHZN0TAjfRYXx-k2mB2c_YcFQUXspX5knwsi-ClkKYuQnbRJutSISKMPu0eUUbdNBbK_SE-AV1-6foI8D8iOdm0qauIQn1rbiVZNmmTaPmNCii0TLTrK9x08srM529wj1hbL1rD7Y8jEZ9w2WCfEod5c-mpgSx4wcANds93o9WqZUJE2_HfNyiC2lQ6L9YowmZPEFe8_iA4SBI9BKX0N9zZofK2zVMgKlIPeADUqtBQVfveFhhsXH3xSrWNwal08zcIuUtUE_PI2cVRgJE_k5qBVuuvRSDbe4D7yu9fdTIpby_dxYin-2tsgJ7Ti3lQiNNQKWVNF_SrgGAhPrIAmjfd1VtKJ0slPMbjLsdHc_6qmAwja0YLnOoVi6jqXMNyTNlN0KCngU5btEi2JiGnPg2oSVd9A7HbBC_whvrX4GUIgwt3fsnxIn9RsxVKPH2tcMUjlyhWSMzp0RXkJnzf8uqfDCc4dJ8ZI2G6PbdhR_qEc%22%2C%22auth%22%3A%22NzExNDk3fGppYWxpdS1zdGFnZTpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSXlZemszWldGbE9UYzNPRFUwT0RJMk9XRTRaRGN5WmpJd05qVmpaREJoTWlKOS5XYjl2bzc5Z2RjLXVrX1VRdDVTYnpaSVZxZ2Z2N0JsRmNKU29BalNnLTA0LUVnR0o5THpMaVBtYXlJNF9TRTh6N0V0eXExNlhsSnhpQkN1WDlBRzdqQ2FGZjg2UHZrWlV4VmVOTG1XY2VKYllPZEpQbmlCWDFMcGVkbWRSZEFMWjlPUFUzMEhoUFlTUFA0U1duZk9vUm1qa0VyYjlhT01qTGdGREFISi1EVVdIOEpaSi1KaHUyU3E2ajdwa3gwSmFIWk4wVEFqZlJZWHgtazJtQjJjX1ljRlFVWHNwWDVrbndzaS1DbGtLWXVRbmJSSnV0U0lTS01QdTBlVVViZE5CYktfU0UtQVYxLTZmb0k4RDhpT2RtMHFhdUlRbjFyYmlWWk5tbVRhUG1OQ2lpMFRMVHJLOXgwOHNyTTUyOXdqMWhiTDFyRDdZOGpFWjl3MldDZkVvZDVjLW1wZ1N4NHdjQU5kczkzbzlXcVpVSkUyX0hmTnlpQzJsUTZMOVlvd21aUEVGZThfaUE0U0JJOUJLWDBOOXpab2ZLMnpWTWdLbElQZUFEVXF0QlFWZnZlRmhoc1hIM3hTcldOd2FsMDh6Y0l1VXRVRV9QSTJjVlJnSkVfazVxQlZ1dXZSU0RiZTREN3l1OWZkVElwYnlfZHhZaW4tMnRzZ0o3VGkzbFFpTk5RS1dWTkZfU3JnR0FoUHJJQW1qZmQxVnRLSjBzbFBNYmpMc2RIY182cW1Bd2phMFlMbk9vVmk2anFYTU55VE5sTjBLQ25nVTVidEVpMkppR25QZzJvU1ZkOUE3SGJCQ193aHZyWDRHVUlnd3QzZnNueEluOVJzeFZLUEgydGNNVWpseWhXU016cDBSWGtKbnpmOHVxZkRDYzRkSjhaSTJHNlBiZGhSX3FFYw%3D%3D%22%2C%22email%22%3A%22%22%7D%2C%22quay.io%2Fopenshift-cnv%22%3A%7B%22username%22%3A%22openshift-cnv%2Bhackfest%22%2C%22password%22%3A%221Y2VQ3JV4AY9ODH4FE2TT87OYTJLGK05KJ9S4SM8OHMZPTD1G5KMIW3O5BMJCYUU%22%2C%22auth%22%3A%22b3BlbnNoaWZ0LWNuditoYWNrZmVzdDoxWTJWUTNKVjRBWTlPREg0RkUyVFQ4N09ZVEpMR0swNUtKOVM0U004T0hNWlBURDFHNUtNSVczTzVCTUpDWVVV%22%2C%22email%22%3A%22%22%7D%2C%22docker.io%22%3A%7B%22username%22%3A%22orenc4%22%2C%22password%22%3A%222efa3bea-df1c-4d70-bff6-4e3a7a16b3a1%22%2C%22auth%22%3A%22b3JlbmM0OjJlZmEzYmVhLWRmMWMtNGQ3MC1iZmY2LTRlM2E3YTE2YjNhMQ%3D%3D%22%2C%22email%22%3A%22%22%7D%7D%7D%0A
        mode: 384
        overwrite: true
        path: /var/lib/kubelet/config.json
      - contents:
          source: data:,-----BEGIN%20CERTIFICATE-----%0AMIIDEDCCAfigAwIBAgIIT%2BGF%2BSG3JE0wDQYJKoZIhvcNAQELBQAwJjESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdyb290LWNhMB4XDTIwMDQxNTEyMjA1NFoX%0ADTMwMDQxMzEyMjA1NFowJjESMBAGA1UECxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdy%0Ab290LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmgNUA5zamIVO%0AajSoBDIs%2B3RtW2WuZ8FhiDX0wVZcATxfMBnu3t7Y3xQM7P96nST7fG26U7Q3xeoX%0AJC942VFd5YfynD4W2sM%2B2I46eO%2BYU0i07lZq1jGBd6vcSNFnezgFYXRfZfJqgkDB%0AKlR94iKxwxVmByeGbLJdU%2FTAE0VYboXi8fZtuaPBljnk6U%2BfiFjVHfb1BK48Umwn%0A2T9Q1%2F78zw7%2B4zw0WmQMNnftRgKpzJwdNckAqiCgU6YeYhpyYP0XPlensrWqUtqg%0AH4Uu7gMz4pa3fHSkzbbei22h4VPtLvGhGhtsxLAa67gJj1bRa4JT5IA85awMKeOU%0AkMgpbMw2MQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH%2FBAUwAwEB%0A%2FzAdBgNVHQ4EFgQU1FlUs7R5O5Bs9X42bpuU6%2BfCCWQwDQYJKoZIhvcNAQELBQAD%0AggEBAE%2BaZnPtJSsugRcm9yFQRqODH1YZIIv41ZDnRB%2BF087dOfVw%2FEGZRa19h8f7%0A1L2R4%2BYNo3ZW40nyzUoO6TR4S7bk3QqUiCIELg7QJcD1OIv2UqJR164J2YpEoGbh%0AYgsZycJ1ejxojb5ABT2iOGEkku5ochnCv2PtEkiZwk%2FZfeGwJqYHoQSCFc%2BZNst8%0A0l2Q38TtrSTMyKdFUfZMBqaNy8br1tW4lP%2B8ORGRCU7suh0hQ%2FVHDOqlXi5heiJL%0ADEhfLpKurdorhlN8kwbxQMmJQVNf1GHXk6E6huO0n4%2B6GqJzk%2FUFLZLqdqorey4N%0A4JGKgSsz%2FBEum8c7uaymvnnFJXQ%3D%0A-----END%20CERTIFICATE-----%0A
        mode: 420
        overwrite: true
        path: /etc/kubernetes/ca.crt
      - contents:
          source: data:,net.ipv4.ip_forward%20%3D%201%0Anet.ipv6.conf.all.forwarding%20%3D%201%0A
        mode: 420
        overwrite: true
        path: /etc/sysctl.d/forward.conf
      - contents:
          source: data:,%0Afs.inotify.max_user_watches%20%3D%2065536%0Afs.inotify.max_user_instances%20%3D%208192%0A
        mode: 420
        overwrite: true
        path: /etc/sysctl.d/inotify.conf
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0A%23%20First%2C%20we%20need%20to%20wait%20until%20DHCP%20finishes%20and%20the%20node%20has%20a%20non-%60localhost%60%0A%23%20hostname%20before%20%60kubelet.service%60%20starts.%0A%23%20That's%20the%20%60--wait%60%20argument%20as%20used%20by%20%60node-valid-hostname.service%60.%0A%23%0A%23%20Second%2C%20on%20GCP%20specifically%20we%20truncate%20the%20hostname%20if%20it's%20%3E63%20characters.%0A%23%20That's%20%60gcp-hostname.service%60.%0A%0A%23%20Block%20indefinitely%20until%20the%20host%20gets%20a%20non-localhost%20name.%0A%23%20Note%20node-valid-hostname.service%20uses%20systemd%20to%20abort%20if%20this%20takes%20too%20long.%0Await_localhost()%20%7B%0A%20%20%20%20echo%20%22waiting%20for%20non-localhost%20hostname%20to%20be%20assigned%22%0A%20%20%20%20while%20%5B%5B%20%22%24(%3C%20%2Fproc%2Fsys%2Fkernel%2Fhostname)%22%20%3D~%20(localhost%7Clocalhost.localdomain)%20%5D%5D%3B%0A%20%20%20%20do%0A%20%20%20%20%20%20%20%20sleep%201%0A%20%20%20%20done%0A%20%20%20%20echo%20%22node%20identified%20as%20%24(%3C%2Fproc%2Fsys%2Fkernel%2Fhostname)%22%0A%20%20%20%20exit%200%0A%7D%0A%0Aset_gcp_hostname()%20%7B%0A%20%20%20%20%2Fusr%2Fbin%2Fafterburn%20--provider%20gcp%20--hostname%3D%2Frun%2Fafterburn.hostname%0A%0A%20%20%20%20local%20host_name%3D%24(cat%20%2Frun%2Fafterburn.hostname)%0A%20%20%20%20local%20type_arg%3D%22transient%22%0A%0A%20%20%20%20%23%20%2Fetc%2Fhostname%20is%20used%20for%20static%20hostnames%20and%20is%20authoritative.%0A%20%20%20%20%23%20This%20will%20check%20to%20make%20sure%20that%20the%20static%20hostname%20is%20the%0A%20%20%20%20%23%20less%20than%20or%20equal%20to%2063%20characters%20in%20length.%0A%20%20%20%20if%20%5B%20-f%20%2Fetc%2Fhostname%20%5D%20%26%26%20%5B%20%22%24(cat%20%2Fetc%2Fhostname%20%7C%20wc%20-m)%22%20-gt%200%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20etc_name%3D%22%24(%3C%20%2Fetc%2Fhostname)%22%0A%20%20%20%20%20%20%20%20type_arg%3D%22static%22%0A%20%20%20%20%20%20%20%20if%20%5B%20%22%24%7Betc_name%7D%22%20!%3D%20%22%24%7Bhost_name%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22%2Fetc%2Fhostname%20is%20set%20to%20%24%7Betc_name%7D%20but%20does%20not%20match%20%24%7Bhost_name%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22using%20%2Fetc%2Fhostname%20as%20the%20authoritative%20name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20host_name%3D%22%24%7Betc_name%7D%22%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20Only%20mutate%20the%20hostname%20if%20the%20length%20is%20longer%20than%2063%20characters.%20The%0A%20%20%20%20%23%20hostname%20will%20be%20the%20lesser%20of%2063%20characters%20after%20the%20first%20dot%20in%20the%0A%20%20%20%20%23%20FQDN.%20%20This%20algorithm%20is%20only%20known%20to%20work%20in%20GCP%2C%20and%20hence%20is%20only%0A%20%20%20%20%23%20executed%20in%20GCP.%0A%20%20%20%20if%20%5B%20%22%24%7B%23host_name%7D%22%20-gt%2063%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20alt_name%3D%24(printf%20%22%24%7Bhost_name%7D%22%20%7C%20cut%20-f1%20-d'.'%20%7C%20cut%20-c%20-63)%0A%20%20%20%20%20%20%20%20echo%20%22%24%7Bhost_name%7D%20is%20longer%20than%2063%20characters%2C%20using%20truncated%20hostname%22%0A%20%20%20%20%20%20%20%20host_name%3D%22%24%7Balt_name%7D%22%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22setting%20%24%7Btype_arg%7D%20hostname%20to%20%24%7Bhost_name%7D%22%0A%20%20%20%20%2Fbin%2Fhostnamectl%20%22--%24%7Btype_arg%7D%22%20set-hostname%20%22%24%7Bhost_name%7D%22%0A%20%20%20%20exit%200%0A%7D%0A%0Aarg%3D%24%7B1%7D%3B%20shift%3B%0Acase%20%22%24%7Barg%7D%22%20in%0A%20%20%20%20--wait)%20wait_localhost%3B%3B%0A%20%20%20%20--gcp)%20set_gcp_hostname%3B%3B%0A%20%20%20%20*)%20echo%20%22Unhandled%20arg%20%24arg%22%3B%20exit%201%0Aesac%0A
        mode: 493
        overwrite: true
        path: /usr/local/bin/mco-hostname
      - contents:
          source: data:,
        mode: 493
        overwrite: true
        path: /etc/kubernetes/kubelet-plugins/volume/exec/.dummy
      - contents:
          source: data:,%23!%2Fbin%2Fbash%0A%23%20Workaround%3A%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1941714%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1935539%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1987108%0A%0Adriver%3D%24(nmcli%20-t%20-m%20tabular%20-f%20general.driver%20dev%20show%20%22%24%7BDEVICE_IFACE%7D%22)%0A%0Aif%20%5B%5B%20%22%242%22%20%3D%3D%20%22up%22%20%26%26%20%22%24%7Bdriver%7D%22%20%3D%3D%20%22vmxnet3%22%20%5D%5D%3B%20then%0A%20%20logger%20-s%20%2299-vsphere-disable-tx-udp-tnl%20triggered%20by%20%24%7B2%7D%20on%20device%20%24%7BDEVICE_IFACE%7D.%22%0A%20%20ethtool%20-K%20%24%7BDEVICE_IFACE%7D%20tx-udp_tnl-segmentation%20off%0A%20%20ethtool%20-K%20%24%7BDEVICE_IFACE%7D%20tx-udp_tnl-csum-segmentation%20off%0A%20%20ethtool%20-K%20%24%7BDEVICE_IFACE%7D%20tx-checksum-ip-generic%20off%0Afi%0A
        mode: 484
        overwrite: true
        path: /etc/NetworkManager/dispatcher.d/99-vsphere-disable-tx-udp-tnl
      - contents:
          compression: ""
          source: data:;base64,W3JlZ2lzdHJpZXNdCiAgW3JlZ2lzdHJpZXMuc2VhcmNoXQogICAgcmVnaXN0cmllcyA9IFsicmVnaXN0cnkuYWNjZXNzLnJlZGhhdC5jb20iLCAiZG9ja2VyLmlvIl0KICBbcmVnaXN0cmllcy5pbnNlY3VyZV0KICAgIHJlZ2lzdHJpZXMgPSBbImJyZXctcHVscC1kb2NrZXIwMS53ZWIucHJvZC5leHQucGh4Mi5yZWRoYXQuY29tOjg4ODgiLCAKICAgICAgICAgICAgICAgICAgImNudi1xZS1zZXJ2ZXIucmhldmRldi5sYWIuZW5nLnJkdTIucmVkaGF0LmNvbTo1MDAwIiwKICAgICAgICAgICAgICAgICAgImNudi1xZS1zZXJ2ZXIucmhldmRldi5sYWIuZW5nLnJkdTIucmVkaGF0LmNvbTo1MDAxIl0gICAgICAgICAgICAgICAgICAKICBbcmVnaXN0cmllcy5ibG9ja10KICAgIHJlZ2lzdHJpZXMgPSBbXQo=
        mode: 420
        overwrite: true
        path: /etc/containers/registries.conf
      - contents:
          source: data:,%5Bcrio%5D%0Ainternal_wipe%20%3D%20true%0Aversion_file_persist%20%3D%20%22%2Fvar%2Flib%2Fcrio%2Fversion%22%0A%0A%5Bcrio.api%5D%0Astream_address%20%3D%20%22%22%0Astream_port%20%3D%20%2210010%22%0A%0A%5Bcrio.runtime%5D%0Aselinux%20%3D%20true%0Aconmon%20%3D%20%22%22%0Aconmon_cgroup%20%3D%20%22pod%22%0Adefault_env%20%3D%20%5B%0A%20%20%20%20%22NSS_SDB_USE_CACHE%3Dno%22%2C%0A%5D%0Alog_level%20%3D%20%22info%22%0Acgroup_manager%20%3D%20%22systemd%22%0Adefault_sysctls%20%3D%20%5B%0A%20%20%20%20%22net.ipv4.ping_group_range%3D0%202147483647%22%2C%0A%5D%0Ahooks_dir%20%3D%20%5B%0A%20%20%20%20%22%2Fetc%2Fcontainers%2Foci%2Fhooks.d%22%2C%0A%20%20%20%20%22%2Frun%2Fcontainers%2Foci%2Fhooks.d%22%2C%0A%20%20%20%20%22%2Fusr%2Fshare%2Fcontainers%2Foci%2Fhooks.d%22%2C%0A%5D%0Amanage_ns_lifecycle%20%3D%20true%0Aabsent_mount_sources_to_reject%20%3D%20%5B%0A%20%20%20%20%22%2Fetc%2Fhostname%22%2C%0A%5D%0Adrop_infra_ctr%20%3D%20true%0A%0A%5Bcrio.runtime.workloads.openshift-builder%5D%0Aactivation_annotation%20%3D%20%22io.openshift.builder%22%0Aallowed_annotations%20%3D%20%5B%0A%20%20%22io.kubernetes.cri-o.userns-mode%22%2C%0A%20%20%22io.kubernetes.cri-o.Devices%22%0A%5D%0A%5Bcrio.runtime.workloads.openshift-builder.resources%5D%0A%0A%5Bcrio.image%5D%0Aglobal_auth_file%20%3D%20%22%2Fvar%2Flib%2Fkubelet%2Fconfig.json%22%0Apause_image%20%3D%20%22quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%40sha256%3A86e0050aaa7477b8aeef382e3bf8092463d207adfa5cd8c88358b367bb624869%22%0Apause_image_auth_file%20%3D%20%22%2Fvar%2Flib%2Fkubelet%2Fconfig.json%22%0Apause_command%20%3D%20%22%2Fusr%2Fbin%2Fpod%22%0A%0A%5Bcrio.network%5D%0Anetwork_dir%20%3D%20%22%2Fetc%2Fkubernetes%2Fcni%2Fnet.d%2F%22%0Aplugin_dirs%20%3D%20%5B%0A%20%20%20%20%22%2Fvar%2Flib%2Fcni%2Fbin%22%2C%0A%20%20%20%20%22%2Fusr%2Flibexec%2Fcni%22%2C%0A%5D%0A%0A%5Bcrio.metrics%5D%0Aenable_metrics%20%3D%20true%0Ametrics_port%20%3D%209537%0Ametrics_collectors%20%3D%20%5B%0A%20%20%22operations%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22operations_total%22%0A%20%20%22operations_latency_microseconds_total%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22operations_latency_seconds_total%22%0A%20%20%22operations_latency_microseconds%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22operations_latency_seconds%22%0A%20%20%22operations_errors%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22operations_errors_total%22%0A%20%20%22image_pulls_layer_size%22%2C%0A%20%20%22containers_oom_total%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22containers_oom_count_total%22%0A%20%20%22containers_oom%22%2C%0A%20%20%23%20Drop%20metrics%20with%20excessive%20label%20cardinality.%0A%20%20%23%20%22image_pulls_by_digest%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_pulls_bytes_total%22%0A%20%20%23%20%22image_pulls_by_name%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_pulls_bytes_total%22%0A%20%20%23%20%22image_pulls_by_name_skipped%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_pulls_skipped_bytes_total%22%0A%20%20%23%20%22image_pulls_failures%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_pulls_failure_total%22%0A%20%20%23%20%22image_pulls_successes%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_pulls_success_total%22%0A%20%20%23%20%22image_layer_reuse%22%2C%20%23%20DEPRECATED%3A%20in%20favour%20of%20%22image_layer_reuse_total%22%0A%20%20%22operations_total%22%2C%0A%20%20%22operations_latency_seconds_total%22%2C%0A%20%20%22operations_latency_seconds%22%2C%0A%20%20%22operations_errors_total%22%2C%0A%20%20%22image_pulls_bytes_total%22%2C%0A%20%20%22image_pulls_skipped_bytes_total%22%2C%0A%20%20%22image_pulls_success_total%22%2C%0A%20%20%22image_pulls_failure_total%22%2C%0A%20%20%22image_layer_reuse_total%22%2C%0A%20%20%22containers_oom_count_total%22%2C%0A%20%20%22processes_defunct%22%0A%5D%0A
        mode: 420
        overwrite: true
        path: /etc/crio/crio.conf.d/00-default
      - contents:
          source: data:,%7B%0A%20%20%20%20%22default%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22insecureAcceptAnything%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%5D%2C%0A%20%20%20%20%22transports%22%3A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22docker-daemon%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%3A%20%5B%7B%22type%22%3A%22insecureAcceptAnything%22%7D%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%7D
        mode: 420
        overwrite: true
        path: /etc/containers/policy.json
      - contents:
          source: data:,
        mode: 420
        overwrite: true
        path: /etc/kubernetes/cloud.conf
      - contents:
          compression: ""
          source: data:text/plain;charset=utf-8;base64,ewogICJraW5kIjogIkt1YmVsZXRDb25maWd1cmF0aW9uIiwKICAiYXBpVmVyc2lvbiI6ICJrdWJlbGV0LmNvbmZpZy5rOHMuaW8vdjFiZXRhMSIsCiAgInN0YXRpY1BvZFBhdGgiOiAiL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyIsCiAgInN5bmNGcmVxdWVuY3kiOiAiMHMiLAogICJmaWxlQ2hlY2tGcmVxdWVuY3kiOiAiMHMiLAogICJodHRwQ2hlY2tGcmVxdWVuY3kiOiAiMHMiLAogICJ0bHNDaXBoZXJTdWl0ZXMiOiBbCiAgICAiVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IiwKICAgICJUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IiwKICAgICJUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQiLAogICAgIlRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQiLAogICAgIlRMU19FQ0RIRV9FQ0RTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NiIsCiAgICAiVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NiIKICBdLAogICJ0bHNNaW5WZXJzaW9uIjogIlZlcnNpb25UTFMxMiIsCiAgInJvdGF0ZUNlcnRpZmljYXRlcyI6IHRydWUsCiAgInNlcnZlclRMU0Jvb3RzdHJhcCI6IHRydWUsCiAgImF1dGhlbnRpY2F0aW9uIjogewogICAgIng1MDkiOiB7CiAgICAgICJjbGllbnRDQUZpbGUiOiAiL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQtY2EuY3J0IgogICAgfSwKICAgICJ3ZWJob29rIjogewogICAgICAiY2FjaGVUVEwiOiAiMHMiCiAgICB9LAogICAgImFub255bW91cyI6IHsKICAgICAgImVuYWJsZWQiOiBmYWxzZQogICAgfQogIH0sCiAgImF1dGhvcml6YXRpb24iOiB7CiAgICAid2ViaG9vayI6IHsKICAgICAgImNhY2hlQXV0aG9yaXplZFRUTCI6ICIwcyIsCiAgICAgICJjYWNoZVVuYXV0aG9yaXplZFRUTCI6ICIwcyIKICAgIH0KICB9LAogICJjbHVzdGVyRG9tYWluIjogImNsdXN0ZXIubG9jYWwiLAogICJjbHVzdGVyRE5TIjogWwogICAgIjE3Mi4zMC4wLjEwIgogIF0sCiAgInN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dCI6ICIwcyIsCiAgIm5vZGVTdGF0dXNVcGRhdGVGcmVxdWVuY3kiOiAiMHMiLAogICJub2RlU3RhdHVzUmVwb3J0RnJlcXVlbmN5IjogIjBzIiwKICAiaW1hZ2VNaW5pbXVtR0NBZ2UiOiAiMHMiLAogICJ2b2x1bWVTdGF0c0FnZ1BlcmlvZCI6ICIwcyIsCiAgInN5c3RlbUNncm91cHMiOiAiL3N5c3RlbS5zbGljZSIsCiAgImNncm91cFJvb3QiOiAiLyIsCiAgImNncm91cERyaXZlciI6ICJzeXN0ZW1kIiwKICAiY3B1TWFuYWdlclBvbGljeSI6ICJzdGF0aWMiLAogICJjcHVNYW5hZ2VyUG9saWN5T3B0aW9ucyI6IHsKICAgICJmdWxsLXBjcHVzLW9ubHkiOiAidHJ1ZSIKICB9LAogICJjcHVNYW5hZ2VyUmVjb25jaWxlUGVyaW9kIjogIjVzIiwKICAibWVtb3J5TWFuYWdlclBvbGljeSI6ICJTdGF0aWMiLAogICJ0b3BvbG9neU1hbmFnZXJQb2xpY3kiOiAic2luZ2xlLW51bWEtbm9kZSIsCiAgInJ1bnRpbWVSZXF1ZXN0VGltZW91dCI6ICIwcyIsCiAgIm1heFBvZHMiOiAyNTAsCiAgInBvZFBpZHNMaW1pdCI6IDQwOTYsCiAgImt1YmVBUElRUFMiOiA1MCwKICAia3ViZUFQSUJ1cnN0IjogMTAwLAogICJzZXJpYWxpemVJbWFnZVB1bGxzIjogZmFsc2UsCiAgImV2aWN0aW9uSGFyZCI6IHsKICAgICJtZW1vcnkuYXZhaWxhYmxlIjogIjEwME1pIgogIH0sCiAgImV2aWN0aW9uUHJlc3N1cmVUcmFuc2l0aW9uUGVyaW9kIjogIjBzIiwKICAiZmVhdHVyZUdhdGVzIjogewogICAgIkFQSVByaW9yaXR5QW5kRmFpcm5lc3MiOiB0cnVlLAogICAgIkNTSU1pZ3JhdGlvbkFXUyI6IGZhbHNlLAogICAgIkNTSU1pZ3JhdGlvbkF6dXJlRmlsZSI6IGZhbHNlLAogICAgIkNTSU1pZ3JhdGlvbkdDRSI6IGZhbHNlLAogICAgIkNTSU1pZ3JhdGlvbnZTcGhlcmUiOiBmYWxzZSwKICAgICJEb3dud2FyZEFQSUh1Z2VQYWdlcyI6IHRydWUsCiAgICAiUG9kU2VjdXJpdHkiOiB0cnVlLAogICAgIlJvdGF0ZUt1YmVsZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSI6IHRydWUsCiAgICAiVG9wb2xvZ3lNYW5hZ2VyIjogdHJ1ZQogIH0sCiAgIm1lbW9yeVN3YXAiOiB7fSwKICAiY29udGFpbmVyTG9nTWF4U2l6ZSI6ICI1ME1pIiwKICAic3lzdGVtUmVzZXJ2ZWQiOiB7CiAgICAiZXBoZW1lcmFsLXN0b3JhZ2UiOiAiMUdpIgogIH0sCiAgImt1YmVSZXNlcnZlZCI6IHsKICAgICJtZW1vcnkiOiAiNTAwTWkiCiAgfSwKICAicmVzZXJ2ZWRTeXN0ZW1DUFVzIjogIjAsMiw0LDYsOCwxMCwxMiwxNCIsCiAgImxvZ2dpbmciOiB7CiAgICAiZmx1c2hGcmVxdWVuY3kiOiAwLAogICAgInZlcmJvc2l0eSI6IDAsCiAgICAib3B0aW9ucyI6IHsKICAgICAgImpzb24iOiB7CiAgICAgICAgImluZm9CdWZmZXJTaXplIjogIjAiCiAgICAgIH0KICAgIH0KICB9LAogICJzaHV0ZG93bkdyYWNlUGVyaW9kIjogIjBzIiwKICAic2h1dGRvd25HcmFjZVBlcmlvZENyaXRpY2FsUG9kcyI6ICIwcyIsCiAgInJlc2VydmVkTWVtb3J5IjogWwogICAgewogICAgICAibnVtYU5vZGUiOiAwLAogICAgICAibGltaXRzIjogewogICAgICAgICJtZW1vcnkiOiAiMTEwME1pIgogICAgICB9CiAgICB9CiAgXQp9Cg==
        mode: 420
        overwrite: true
        path: /etc/kubernetes/kubelet.conf
      - contents:
          source: data:text/plain;charset=utf-8;base64,IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2V0IC1ldW8gcGlwZWZhaWwKCm5vZGVzX3BhdGg9Ii9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZSIKaHVnZXBhZ2VzX2ZpbGU9IiR7bm9kZXNfcGF0aH0vbm9kZSR7TlVNQV9OT0RFfS9odWdlcGFnZXMvaHVnZXBhZ2VzLSR7SFVHRVBBR0VTX1NJWkV9a0IvbnJfaHVnZXBhZ2VzIgoKaWYgWyAhIC1mICIke2h1Z2VwYWdlc19maWxlfSIgXTsgdGhlbgogIGVjaG8gIkVSUk9SOiAke2h1Z2VwYWdlc19maWxlfSBkb2VzIG5vdCBleGlzdCIKICBleGl0IDEKZmkKCnRpbWVvdXQ9NjAKc2FtcGxlPTEKY3VycmVudF90aW1lPTAKd2hpbGUgWyAiJChjYXQgIiR7aHVnZXBhZ2VzX2ZpbGV9IikiIC1uZSAiJHtIVUdFUEFHRVNfQ09VTlR9IiBdOyBkbwogIGVjaG8gIiR7SFVHRVBBR0VTX0NPVU5UfSIgPiIke2h1Z2VwYWdlc19maWxlfSIKCiAgY3VycmVudF90aW1lPSQoKGN1cnJlbnRfdGltZSArIHNhbXBsZSkpCiAgaWYgWyAkY3VycmVudF90aW1lIC1ndCAkdGltZW91dCBdOyB0aGVuCiAgICBlY2hvICJFUlJPUjogJHtodWdlcGFnZXNfZmlsZX0gZG9lcyBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGh1Z2VwYWdlcyAke0hVR0VQQUdFU19DT1VOVH0iCiAgICBleGl0IDEKICBmaQoKICBzbGVlcCAkc2FtcGxlCmRvbmUK
        mode: 448
        path: /usr/local/bin/hugepages-allocation.sh
      - contents:
          source: data:text/plain;charset=utf-8;base64,IyEvdXNyL2Jpbi9lbnYgYmFzaAoKSlE9Ii91c3IvYmluL2pxIgpJUD0iL3Vzci9zYmluL2lwIgoKbWFzaz0iJHsxfSIKWyAtbiAiJHttYXNrfSIgXSB8fCB7IGxvZ2dlciAiJHswfTogVGhlIHJwcy1tYXNrIHBhcmFtZXRlciBpcyBtaXNzaW5nIiA7IGV4aXQgMDsgfQoKcGlkPSQoJHtKUX0gJy5waWQnIC9kZXYvc3RkaW4gMj4mMSkKW1sgJD8gLWVxIDAgJiYgLW4gIiR7cGlkfSIgXV0gfHwgeyBsb2dnZXIgIiR7MH06IEZhaWxlZCB0byBleHRyYWN0IHRoZSBwaWQ6ICR7cGlkfSI7IGV4aXQgMDsgfQoKbnM9JCgke0lQfSBuZXRucyBpZGVudGlmeSAiJHtwaWR9IiAyPiYxKQpbWyAkPyAtZXEgMCAmJiAtbiAiJHtuc30iIF1dIHx8IHsgbG9nZ2VyICIkezB9IEZhaWxlZCB0byBpZGVudGlmeSB0aGUgbmFtZXNwYWNlOiAke25zfSI7IGV4aXQgMDsgfQoKIyBVcGRhdGVzIHRoZSBjb250YWluZXIgdmV0aCBSUFMgbWFzayBvbiB0aGUgbm9kZQpuZXRuc19saW5rX2luZGV4ZXM9JCgke0lQfSBuZXRucyBleGVjICIke25zfSIgJHtJUH0gLWogbGluayB8ICR7SlF9ICIuW10gfCBzZWxlY3QoLmxpbmtfaW5kZXggIT0gbnVsbCkgfCAubGlua19pbmRleCIpCmZvciBsaW5rX2luZGV4IGluICR7bmV0bnNfbGlua19pbmRleGVzfTsgZG8KICBjb250YWluZXJfdmV0aD0kKCR7SVB9IC1qIGxpbmsgfCAke0pRfSAiLltdIHwgc2VsZWN0KC5pZmluZGV4ID09ICR7bGlua19pbmRleH0pIHwgLmlmbmFtZSIgfCB0ciAtZCAnIicpCiAgZWNobyAke21hc2t9ID4gL3N5cy9kZXZpY2VzL3ZpcnR1YWwvbmV0LyR7Y29udGFpbmVyX3ZldGh9L3F1ZXVlcy9yeC0wL3Jwc19jcHVzCmRvbmUKCiMgVXBkYXRlcyB0aGUgUlBTIG1hc2sgZm9yIHRoZSBpbnRlcmZhY2UgaW5zaWRlIG9mIHRoZSBjb250YWluZXIgbmV0d29yayBuYW1lc3BhY2UKbW9kZT0kKCR7SVB9IG5ldG5zIGV4ZWMgIiR7bnN9IiBbIC13IC9zeXMgXSAmJiBlY2hvICJydyIgfHwgZWNobyAicm8iIDI+JjEpClsgJD8gLWVxIDAgXSB8fCB7IGxvZ2dlciAiJHswfSBGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSAvc3lzIGlzIHdyaXRhYmxlOiAke21vZGV9IjsgZXhpdCAwOyB9CgppZiBbICIke21vZGV9IiA9ICJybyIgXTsgdGhlbgogICAgcmVzPSQoJHtJUH0gbmV0bnMgZXhlYyAiJHtuc30iIG1vdW50IC1vIHJlbW91bnQscncgL3N5cyAyPiYxKQogICAgWyAkPyAtZXEgMCBdIHx8IHsgbG9nZ2VyICIkezB9OiBGYWlsZWQgdG8gcmVtb3VudCAvc3lzIGFzIHJ3OiAke3Jlc30iOyBleGl0IDA7IH0KZmkKCiMgL3N5cy9jbGFzcy9uZXQgY2FuJ3QgYmUgdXNlZCByZWN1cnNpdmVseSB0byBmaW5kIHRoZSBycHNfY3B1cyBmaWxlLCB1c2UgL3N5cy9kZXZpY2VzL3ZpcnR1YWwgaW5zdGVhZApyZXM9JCgke0lQfSBuZXRucyBleGVjICIke25zfSIgZmluZCAvc3lzL2RldmljZXMvdmlydHVhbCAtdHlwZSBmIC1uYW1lIHJwc19jcHVzIC1leGVjIHNoIC1jICJlY2hvICR7bWFza30gfCBjYXQgPiB7fSIgXDsgMj4mMSkKW1sgJD8gLWVxIDAgJiYgLXogIiR7cmVzfSIgXV0gfHwgbG9nZ2VyICIkezB9OiBGYWlsZWQgdG8gYXBwbHkgdGhlIFJQUyBtYXNrOiAke3Jlc30iCgppZiBbICIke21vZGV9IiA9ICJybyIgXTsgdGhlbgogICAgJHtJUH0gbmV0bnMgZXhlYyAiJHtuc30iIG1vdW50IC1vIHJlbW91bnQscm8gL3N5cwogICAgWyAkPyAtZXEgMCBdIHx8IGV4aXQgMSAjIEVycm9yIG91dCBzbyB0aGUgcG9kIHdpbGwgbm90IHN0YXJ0IHdpdGggYSB3cml0YWJsZSAvc3lzCmZpCg==
        mode: 448
        path: /usr/local/bin/low-latency-hooks.sh
      - contents:
          source: data:text/plain;charset=utf-8;base64,IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGV2PSQxClsgLW4gIiR7ZGV2fSIgXSB8fCB7IGVjaG8gIlRoZSBkZXZpY2UgYXJndW1lbnQgaXMgbWlzc2luZyIgPiYyIDsgZXhpdCAxOyB9CgptYXNrPSQyClsgLW4gIiR7bWFza30iIF0gfHwgeyBlY2hvICJUaGUgbWFzayBhcmd1bWVudCBpcyBtaXNzaW5nIiA+JjIgOyBleGl0IDE7IH0KCmRldl9kaXI9Ii9zeXMvY2xhc3MvbmV0LyR7ZGV2fSIKCmZ1bmN0aW9uIGZpbmRfZGV2X2RpciB7CiAgc3lzdGVtZF9kZXZzPSQoc3lzdGVtY3RsIGxpc3QtdW5pdHMgLXQgZGV2aWNlIHwgZ3JlcCBzeXMtc3Vic3lzdGVtLW5ldC1kZXZpY2VzIHwgY3V0IC1kJyAnIC1mMSkKCiAgZm9yIHN5c3RlbWRfZGV2IGluICR7c3lzdGVtZF9kZXZzfTsgZG8KICAgIGRldl9zeXNmcz0kKHN5c3RlbWN0bCBzaG93ICIke3N5c3RlbWRfZGV2fSIgLXAgU3lzRlNQYXRoIC0tdmFsdWUpCgogICAgZGV2X29yaWdfbmFtZT0iJHtkZXZfc3lzZnMjIyovfSIKICAgIGlmIFsgIiR7ZGV2X29yaWdfbmFtZX0iID0gIiR7ZGV2fSIgXTsgdGhlbgogICAgICBkZXZfbmFtZT0iJHtzeXN0ZW1kX2RldiMjKi19IgogICAgICBkZXZfbmFtZT0iJHtkZXZfbmFtZSUlLmRldmljZX0iCiAgICAgIGlmIFsgIiR7ZGV2X25hbWV9IiA9ICIke2Rldn0iIF07IHRoZW4gIyBkaXNyZWdhcmQgdGhlIG9yaWdpbmFsIGRldmljZSB1bml0CiAgICAgICAgICAgICAgY29udGludWUKICAgICAgZmkKCiAgICAgIGVjaG8gIiR7ZGV2fSBkZXZpY2Ugd2FzIHJlbmFtZWQgdG8gJGRldl9uYW1lIgogICAgICBkZXZfZGlyPSIvc3lzL2NsYXNzL25ldC8ke2Rldl9uYW1lfSIKICAgICAgYnJlYWsKICAgIGZpCiAgZG9uZQp9CgpbIC1kICIke2Rldl9kaXJ9IiBdIHx8IGZpbmRfZGV2X2RpciAgICAgICAgICAgICAgICAjIHRoZSBuZXQgZGV2aWNlIHdhcyByZW5hbWVkLCBmaW5kIHRoZSBuZXcgbmFtZQpbIC1kICIke2Rldl9kaXJ9IiBdIHx8IHsgc2xlZXAgNTsgZmluZF9kZXZfZGlyOyB9ICAjIHNlYXJjaCBmYWlsZWQsIHdhaXQgYSBsaXR0bGUgYW5kIHRyeSBhZ2FpbgpbIC1kICIke2Rldl9kaXJ9IiBdIHx8IHsgZWNobyAiJHtkZXZfZGlyfSIgZGlyZWN0b3J5IG5vdCBmb3VuZCA+JjIgOyBleGl0IDA7IH0gIyB0aGUgaW50ZXJmYWNlIGRpc2FwcGVhcmVkLCBub3QgYW4gZXJyb3IKCmZpbmQgIiR7ZGV2X2Rpcn0iL3F1ZXVlcyAtdHlwZSBmIC1uYW1lIHJwc19jcHVzIC1leGVjIHNoIC1jICJlY2hvICR7bWFza30gfCBjYXQgPiB7fSIgXDs=
        mode: 448
        path: /usr/local/bin/set-rps-mask.sh
      - contents:
          source: data:text/plain;charset=utf-8;base64,IyEvdXNyL2Jpbi9iYXNoCgpzZXQgLWV1byBwaXBlZmFpbAoKZm9yIGNwdSBpbiAke09GRkxJTkVfQ1BVUy8vLC8gfTsKICBkbwogICAgb25saW5lX2NwdV9maWxlPSIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUkY3B1L29ubGluZSIKICAgIGlmIFsgISAtZiAiJHtvbmxpbmVfY3B1X2ZpbGV9IiBdOyB0aGVuCiAgICAgIGVjaG8gIkVSUk9SOiAke29ubGluZV9jcHVfZmlsZX0gZG9lcyBub3QgZXhpc3QsIGFib3J0IHNjcmlwdCBleGVjdXRpb24iCiAgICAgIGV4aXQgMQogICAgZmkKICBkb25lCgplY2hvICJBbGwgY3B1cyBvZmZsaW5lZCBleGlzdHMsIHNldCB0aGVtIG9mZmxpbmUiCgpmb3IgY3B1IGluICR7T0ZGTElORV9DUFVTLy8sLyB9OwogIGRvCiAgICBvbmxpbmVfY3B1X2ZpbGU9Ii9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSRjcHUvb25saW5lIgogICAgZWNobyAwID4gIiR7b25saW5lX2NwdV9maWxlfSIKICAgIGVjaG8gIm9mZmxpbmUgY3B1IG51bSAkY3B1IgogIGRvbmUKCg==
        mode: 448
        path: /usr/local/bin/set-cpus-offline.sh
      - contents:
          source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMCwyLDQsNiw4LDEwLDEyLDE0IgoKCiMgV2Ugc2hvdWxkIGNvcHkgcGFzdGUgdGhlIGRlZmF1bHQgcnVudGltZSBiZWNhdXNlIHRoaXMgc25pcHBldCB3aWxsIG92ZXJyaWRlIHRoZSB3aG9sZSBydW50aW1lcyBzZWN0aW9uCltjcmlvLnJ1bnRpbWUucnVudGltZXMucnVuY10KcnVudGltZV9wYXRoID0gIiIKcnVudGltZV90eXBlID0gIm9jaSIKcnVudGltZV9yb290ID0gIi9ydW4vcnVuYyIKCiMgVGhlIENSSS1PIHdpbGwgY2hlY2sgdGhlIGFsbG93ZWRfYW5ub3RhdGlvbnMgdW5kZXIgdGhlIHJ1bnRpbWUgaGFuZGxlciBhbmQgYXBwbHkgaGlnaC1wZXJmb3JtYW5jZSBob29rcyB3aGVuIG9uZSBvZgojIGhpZ2gtcGVyZm9ybWFuY2UgYW5ub3RhdGlvbnMgcHJlc2VudHMgdW5kZXIgaXQuCiMgV2Ugc2hvdWxkIHByb3ZpZGUgdGhlIHJ1bnRpbWVfcGF0aCBiZWNhdXNlIHdlIG5lZWQgdG8gaW5mb3JtIHRoYXQgd2Ugd2FudCB0byByZS11c2UgcnVuYyBiaW5hcnkgYW5kIHdlCiMgZG8gbm90IGhhdmUgaGlnaC1wZXJmb3JtYW5jZSBiaW5hcnkgdW5kZXIgdGhlICRQQVRIIHRoYXQgd2lsbCBwb2ludCB0byBpdC4KW2NyaW8ucnVudGltZS5ydW50aW1lcy5oaWdoLXBlcmZvcm1hbmNlXQpydW50aW1lX3BhdGggPSAiL2Jpbi9ydW5jIgpydW50aW1lX3R5cGUgPSAib2NpIgpydW50aW1lX3Jvb3QgPSAiL3J1bi9ydW5jIgphbGxvd2VkX2Fubm90YXRpb25zID0gWyJjcHUtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtcXVvdGEuY3Jpby5pbyIsICJpcnEtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyJdCg==
        mode: 420
        path: /etc/crio/crio.conf.d/99-runtimes.conf
      - contents:
          source: data:text/plain;charset=utf-8;base64,ewogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiaG9vayI6IHsKICAgICJwYXRoIjogIi91c3IvbG9jYWwvYmluL2xvdy1sYXRlbmN5LWhvb2tzLnNoIiwKICAgICJhcmdzIjogWyJsb3ctbGF0ZW5jeS1ob29rcy5zaCIsICIwMDAwNTU1NSJdCiAgfSwKICAid2hlbiI6IHsKICAgICJhbHdheXMiOiB0cnVlCiAgfSwKICAic3RhZ2VzIjogWyJwcmVzdGFydCJdCn0K
        mode: 420
        path: /etc/containers/oci/hooks.d/99-low-latency-hooks.json
      - contents:
          source: data:text/plain;charset=utf-8;base64,U1VCU1lTVEVNPT0ibmV0IiwgQUNUSU9OPT0iYWRkIiwgRU5We0RFVlBBVEh9IT0iL2RldmljZXMvdmlydHVhbC9uZXQvdmV0aCoiLCBFTlZ7SURfQlVTfSE9InBjaSIsIFRBRys9InN5c3RlbWQiLCBFTlZ7U1lTVEVNRF9XQU5UU309InVwZGF0ZS1ycHNAJWsuc2VydmljZSIK
        mode: 420
        path: /etc/udev/rules.d/99-netdev-rps.rules
      - contents:
          source: data:,%23%21/bin/bash%0A%0Aset%20-eo%20pipefail%0AIFACE%3D%241%0ASTATUS%3D%242%0ASCRIPT_NAME%3D%24%28basename%20%240%29%0A%0Acase%20%22%24STATUS%22%20in%0A%20%20%20%20up%7Cdhcp4-change%7Cdhcp6-change%29%0A%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20%24%7BSCRIPT_NAME%7D%20triggered%20by%20%24%7B1%7D%20%24%7B2%7D.%22%0A%20%20%20%20%20%20%20%20if%20systemctl%20-q%20is-enabled%20systemd-resolved%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20%24%7BSCRIPT_NAME%7D%3A%20Setting%20up%20systemd-resolved%20for%20OKD%20domain%20and%20local%20IP%22%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%5B%5B%20%21%20-f%20/etc/systemd/resolved.conf.d/60-kni.conf%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22%5BTODO%5D%20NM%20%24%7BSCRIPT_NAME%7D%3A%20Update%20/etc/systemd/resolved.conf.d/60-kni.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20Creating%20/etc/systemd/resolved.conf.d/60-kni.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20mkdir%20-p%20/etc/systemd/resolved.conf.d%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20echo%20%22%5BResolve%5D%22%20%3E%20/etc/systemd/resolved.conf.d/60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20echo%20%22DNS%3D%24NAMESERVER_IP%22%20%3E%3E%20/etc/systemd/resolved.conf.d/60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20echo%20%22Domains%3D%24DOMAINS%22%20%3E%3E%20/etc/systemd/resolved.conf.d/60-kni.conf%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20if%20systemctl%20-q%20is-active%20systemd-resolved%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20%20%20%20%20%3E%262%20echo%20%22NM%20resolv-prepender%3A%20restarting%20systemd-resolved%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20%20%20%20%20systemctl%20restart%20systemd-resolved%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20fi%0A%20%20%20%20%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%3E%262%20echo%20%22NM%20%24%7BSCRIPT_NAME%7D%3A%20truncate%20%27search%20...%27%20to%20fist%20value%20only%22%0A%20%20%20%20%20%20%20%20%20%20%20%20sed%20-i%20-r%20-e%20%27s%7C%5E%28search%20%2B%5B%5E%20%5D%2B%29%28.%2A%29%7C%5C1%7Cg%27%20/etc/resolv.conf%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%3B%3B%0A%20%20%20%20%2A%29%0A%20%20%20%20%3B%3B%0Aesac
        mode: 493
        overwrite: true
        path: /etc/NetworkManager/dispatcher.d/40-truncate-domain-search
      - contents:
          source: data:text/plain,%5Bcrio%5D%0A%20%20%5Bcrio.runtime%5D%0A%20%20%20%20default_capabilities%20%3D%20%5B%22CHOWN%22%2C%20%22DAC_OVERRIDE%22%2C%20%22FSETID%22%2C%20%22FOWNER%22%2C%20%22NET_RAW%22%2C%20%22SETGID%22%2C%20%22SETUID%22%2C%20%22SETPCAP%22%2C%20%22NET_BIND_SERVICE%22%2C%20%22SYS_CHROOT%22%2C%20%22KILL%22%5D%0A
        mode: 420
        overwrite: true
        path: /etc/crio/crio.conf.d/01-mc-defaultCapabilities
      - contents:
          source: data:text/plain,%5Bcrio%5D%0A%20%20%5Bcrio.runtime%5D%0A%20%20%20%20seccomp_use_default_when_empty%20%3D%20false%0A
        mode: 420
        overwrite: true
        path: /etc/crio/crio.conf.d/01-mc-seccompUseDefault
      - contents:
          source: data:;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVORENDQXh5Z0F3SUJBZ0lKQU51bkkwRDY2MmNuTUEwR0NTcUdTSWIzRFFFQkN3VUFNSUdsTVFzd0NRWUQKVlFRR0V3SlZVekVYTUJVR0ExVUVDQXdPVG05eWRHZ2dRMkZ5YjJ4cGJtRXhFREFPQmdOVkJBY01CMUpoYkdWcApaMmd4RmpBVUJnTlZCQW9NRFZKbFpDQklZWFFzSUVsdVl5NHhFekFSQmdOVkJBc01DbEpsWkNCSVlYUWdTVlF4Ckd6QVpCZ05WQkFNTUVsSmxaQ0JJWVhRZ1NWUWdVbTl2ZENCRFFURWhNQjhHQ1NxR1NJYjNEUUVKQVJZU2FXNW0KYjNObFkwQnlaV1JvWVhRdVkyOXRNQ0FYRFRFMU1EY3dOakUzTXpneE1Wb1lEekl3TlRVd05qSTJNVGN6T0RFeApXakNCcFRFTE1Ba0dBMVVFQmhNQ1ZWTXhGekFWQmdOVkJBZ01EazV2Y25Sb0lFTmhjbTlzYVc1aE1SQXdEZ1lEClZRUUhEQWRTWVd4bGFXZG9NUll3RkFZRFZRUUtEQTFTWldRZ1NHRjBMQ0JKYm1NdU1STXdFUVlEVlFRTERBcFMKWldRZ1NHRjBJRWxVTVJzd0dRWURWUVFEREJKU1pXUWdTR0YwSUVsVUlGSnZiM1FnUTBFeElUQWZCZ2txaGtpRwo5dzBCQ1FFV0VtbHVabTl6WldOQWNtVmthR0YwTG1OdmJUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFMUXQ5T0pRaDZHQzVMVDFnODBxTmgwdTUwQlE0c1oveVo4YUVUeHQrNWxuUFZYNk1IS3oKYmZ3STZuTzFhTUc2ajliU3crNlVVeVBCSFA3OTYrRlQvcFRTK0swd3NEVjdjOVh2SG94SkJKSlUzOGNkTGtJMgpjL2k3bERxVGZUY2ZMTDJueVVCZDJmUURrMUIwZnhyc2toR0lJWjNpZlAxUHM0bHRUa3Y4aFJTb2IzVnROcVNvCkd4a0tmdkQyUEtqVFB4RFBXWXlydXk5aXJMWmlvTWZmaTNpL2dDdXQwWld0QXlPM01WSDVxV0YvZW5Ld2dQRVMKWDlwbytUZEN2UkIvUlVPYkJhTTc2MUVjckxTTTFHcUhOdWVTZnFuaG8zQWpMUTZkQm5QV2xvNjM4Wm0xVmViSwpCRUx5aGtMV01TRmtLd0RtbmUwalEwMlk0ZzA3NXZDS3ZDc0NBd0VBQWFOak1HRXdIUVlEVlIwT0JCWUVGSDdSCjR5QytVZWhJSVBldUw4WnF3M1B6YmdjWk1COEdBMVVkSXdRWU1CYUFGSDdSNHlDK1VlaElJUGV1TDhacXczUHoKYmdjWk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0dHTUEwR0NTcUdTSWIzRFFFQgpDd1VBQTRJQkFRQkROdkQyVm05c0E1QTlBbE9KUjgrZW41WHo5aFhjeEpCNXBoeGNaUThqRm9HMDRWc2h2ZDBlCkxFblVyTWNmRmdJWjRuak1LVFFDTTRaRlVQQWlleUx4NGY1Mkh1RG9wcDNlNUp5SU1mVytLRmNOSXBLd0NzYWsKb1NvS3RJVU9zVUpLN3FCVlp4Y3JJeWVRVjJxY1lPZVpodFM1d0JxSXdPQWhGd2xDRVQ3WmU1OFFIbVM0OHNsagpTOUswSkFjcHMyeGRuR3UwZmt6aFNReFk4R1BRTkZUbHI2cllsZDUrSUQvaEhlUzc2Z3EwWUczcTZSTFdSa0hmCjRlVGtSaml2QWxFeHJGektjbGpDNGF4S1Fsbk92VkF6eitHbTMyVTB4UEJGNEJ5ZVBWeENKVUh3MVRzeVRtZWwKUnhORXA3eUhvWGN3bitmWG5hK3Q1SldoMWd4VVp0eTMKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        mode: 420
        overwrite: true
        path: /etc/pki/ca-trust/source/anchors/RH-IT-Root-CA.crt
    systemd:
      units:
      - dropins:
        - contents: ""
          name: 10-mco-default-env.conf
        - contents: |
            [Service]
            Environment="ENABLE_PROFILE_UNIX_SOCKET=true"
          name: 10-mco-profile-unix-socket.conf
        - contents: |
            [Service]
            Environment="GODEBUG=x509ignoreCN=0,madvdontneed=1"
          name: 10-mco-default-madv.conf
        name: crio.service
      - dropins:
        - contents: |
            [Unit]
            ConditionPathExists=/enoent
          name: mco-disabled.conf
        name: docker.socket
      - contents: |
          [Unit]
          Description=Dynamically sets the system reserved for the kubelet
          Wants=network-online.target
          After=network-online.target ignition-firstboot-complete.service
          Before=kubelet.service crio.service
          [Service]
          # Need oneshot to delay kubelet
          Type=oneshot
          RemainAfterExit=yes
          EnvironmentFile=/etc/node-sizing-enabled.env
          ExecStart=/bin/bash /usr/local/sbin/dynamic-system-reserved-calc.sh ${NODE_SIZING_ENABLED} ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU}
          [Install]
          RequiredBy=kubelet.service
        enabled: true
        name: kubelet-auto-node-size.service
      - contents: |
          [Unit]
          Description=Kubernetes Kubelet
          Wants=rpc-statd.service network-online.target
          Requires=crio.service kubelet-auto-node-size.service
          After=network-online.target crio.service kubelet-auto-node-size.service
          After=ostree-finalize-staged.service

          [Service]
          Type=notify
          ExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests
          ExecStartPre=/bin/rm -f /var/lib/kubelet/cpu_manager_state
          ExecStartPre=/bin/rm -f /var/lib/kubelet/memory_manager_state
          EnvironmentFile=/etc/os-release
          EnvironmentFile=-/etc/kubernetes/kubelet-workaround
          EnvironmentFile=-/etc/kubernetes/kubelet-env
          EnvironmentFile=/etc/node-sizing.env

          ExecStart=/usr/bin/hyperkube \
              kubelet \
                --config=/etc/kubernetes/kubelet.conf \
                --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
                --kubeconfig=/var/lib/kubelet/kubeconfig \
                --container-runtime=remote \
                --container-runtime-endpoint=/var/run/crio/crio.sock \
                --runtime-cgroups=/system.slice/crio.service \
                --node-labels=node-role.kubernetes.io/worker,node.openshift.io/os_id=${ID} \
                --node-ip=${KUBELET_NODE_IP} \
                --address=${KUBELET_NODE_IP} \
                --minimum-container-ttl-duration=6m0s \
                --volume-plugin-dir=/etc/kubernetes/kubelet-plugins/volume/exec \
                --cloud-provider= \
                 \
                --hostname-override=${KUBELET_NODE_NAME} \
                --pod-infra-container-image=quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:86e0050aaa7477b8aeef382e3bf8092463d207adfa5cd8c88358b367bb624869 \
                --system-reserved=cpu=${SYSTEM_RESERVED_CPU},memory=${SYSTEM_RESERVED_MEMORY} \
                --v=${KUBELET_LOG_LEVEL}

          Restart=always
          RestartSec=10

          [Install]
          WantedBy=multi-user.target
        dropins:
        - contents: ""
          name: 10-mco-default-env.conf
        - contents: |
            [Service]
            Environment="GODEBUG=x509ignoreCN=0,madvdontneed=1"
          name: 10-mco-default-madv.conf
        enabled: true
        name: kubelet.service
      - contents: |
          [Unit]
          Description=Machine Config Daemon Firstboot
          # Make sure it runs only on OSTree booted system
          ConditionPathExists=/run/ostree-booted
          # Removal of this file signals firstboot completion
          ConditionPathExists=/etc/ignition-machine-config-encapsulated.json
          After=machine-config-daemon-pull.service
          Before=crio.service kubelet.service

          [Service]
          Type=oneshot
          RemainAfterExit=yes
          # Disable existing repos (if any) so that OS extensions would use embedded RPMs only
          ExecStartPre=-/usr/bin/sh -c "sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/*.repo"
          ExecStart=/run/bin/machine-config-daemon firstboot-complete-machineconfig
          [Install]
          WantedBy=multi-user.target
          RequiredBy=crio.service kubelet.service
        enabled: true
        name: machine-config-daemon-firstboot.service
      - contents: |
          [Unit]
          Description=Machine Config Daemon Pull
          # Make sure it runs only on OSTree booted system
          ConditionPathExists=/run/ostree-booted
          # This "stamp file" is unlinked when we complete
          # machine-config-daemon-firstboot.service
          ConditionPathExists=/etc/ignition-machine-config-encapsulated.json
          # Run after crio-wipe so the pulled MCD image is protected against a corrupted storage from a forced shutdown
          Wants=network-online.target crio-wipe.service
          After=network-online.target crio-wipe.service

          [Service]
          Type=oneshot
          RemainAfterExit=yes
          # See https://github.com/coreos/fedora-coreos-tracker/issues/354
          ExecStart=/bin/sh -c '/bin/mkdir -p /run/bin && chcon --reference=/usr/bin /run/bin'
          ExecStart=/bin/sh -c "while ! /usr/bin/podman pull --authfile=/var/lib/kubelet/config.json --quiet 'quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:543edd3009688fb98fdf5487e72713f8b81653e83a2532ebb95408ac948390a5'; do sleep 1; done"
          ExecStart=/usr/bin/podman run --rm --quiet --net=host -v /run/bin:/host/run/bin:z --entrypoint=cp 'quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:543edd3009688fb98fdf5487e72713f8b81653e83a2532ebb95408ac948390a5' /usr/bin/machine-config-daemon /host/run/bin
          ExecStart=/bin/chcon system_u:object_r:bin_t:s0 /run/bin/machine-config-daemon
          [Install]
          RequiredBy=machine-config-daemon-firstboot.service
        enabled: true
        name: machine-config-daemon-pull.service
      - contents: |
          [Unit]
          Description=Wait for a non-localhost hostname
          Before=network-online.target

          [Service]
          Type=oneshot
          RemainAfterExit=yes
          User=root
          ExecStart=/usr/local/bin/mco-hostname --wait

          # Wait up to 5min for the node to get a non-localhost name
          TimeoutSec=300

          [Install]
          WantedBy=multi-user.target
          # Ensure that network-online.target will not complete until the node has a non-localhost hostname.
          RequiredBy=network-online.target
        enabled: true
        name: node-valid-hostname.service
      - contents: |
          [Unit]
          Description=Writes IP address configuration so that kubelet and crio services select a valid node IP
          # This only applies to VIP managing environments where the kubelet and crio IP
          # address picking logic is flawed and may end up selecting an address from a
          # different subnet or a deprecated address
          Wants=network-online.target crio-wipe.service
          After=network-online.target ignition-firstboot-complete.service crio-wipe.service
          Before=kubelet.service crio.service

          [Service]
          # Need oneshot to delay kubelet
          Type=oneshot
          # Would prefer to do Restart=on-failure instead of this bash retry loop, but
          # the version of systemd we have right now doesn't support it. It should be
          # available in systemd v244 and higher.
          ExecStart=/bin/bash -c " \
            until \
            /usr/bin/podman run --rm \
            --authfile /var/lib/kubelet/config.json \
            --net=host \
            --security-opt label=disable \
            --volume /etc/systemd/system:/etc/systemd/system \
            quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:5ce3526bde097d1550a02fbeeaea6822d7c885cbac4f757cdafe138dd968d489 \
            node-ip \
            set --retry-on-failure \
            10.35.16.57; \
            do \
            sleep 5; \
            done"
          ExecStart=/bin/systemctl daemon-reload

          [Install]
          WantedBy=multi-user.target
        enabled: true
        name: nodeip-configuration.service
      - enabled: true
        name: openvswitch.service
      - contents: |
          [Unit]
          Description=Configures OVS with proper host networking configuration
          # Removal of this file signals firstboot completion
          ConditionPathExists=!/etc/ignition-machine-config-encapsulated.json
          # This service is used to move a physical NIC into OVS and reconfigure OVS to use the host IP
          Requires=openvswitch.service
          Wants=NetworkManager-wait-online.service
          After=NetworkManager-wait-online.service openvswitch.service network.service
          Before=network-online.target kubelet.service crio.service node-valid-hostname.service

          [Service]
          # Need oneshot to delay kubelet
          Type=oneshot
          ExecStart=/usr/local/bin/configure-ovs.sh OpenShiftSDN
          StandardOutput=journal+console
          StandardError=journal+console

          [Install]
          WantedBy=network-online.target
        enabled: true
        name: ovs-configuration.service
      - dropins:
        - contents: |
            [Service]
            Restart=always
            ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /var/lib/openvswitch'
            ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /etc/openvswitch'
            ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /run/openvswitch'
            ExecStartPost=-/usr/bin/ovs-appctl vlog/set syslog:info
            ExecReload=-/usr/bin/ovs-appctl vlog/set syslog:info
          name: 10-ovs-vswitchd-restart.conf
        name: ovs-vswitchd.service
      - dropins:
        - contents: |
            [Service]
            Restart=always
          name: 10-ovsdb-restart.conf
        enabled: true
        name: ovsdb-server.service
      - dropins:
        - contents: ""
          name: 10-mco-default-env.conf
        name: pivot.service
      - dropins:
        - contents: |
            [Unit]
            ConditionPathExists=/enoent
          name: mco-disabled.conf
        name: zincati.service
      - contents: |
          [Unit]
          Description=Hugepages-1048576kB allocation on the node 1
          Before=kubelet.service

          [Service]
          Environment=HUGEPAGES_COUNT=16
          Environment=HUGEPAGES_SIZE=1048576
          Environment=NUMA_NODE=1
          Type=oneshot
          RemainAfterExit=true
          ExecStart=/usr/local/bin/hugepages-allocation.sh

          [Install]
          WantedBy=multi-user.target
        enabled: true
        name: hugepages-allocation-1048576kB-NUMA1.service
      - contents: |
          [Unit]
          Description=Sets network devices RPS mask

          [Service]
          Type=oneshot
          ExecStart=/usr/local/bin/set-rps-mask.sh %i 00005555
        name: update-rps@.service
      - enabled: true
        name: iscsid.service
      - contents: |
          [Unit]
          Description=Update system CA
          After=syslog.target network.target

          [Service]
          Type=oneshot
          ExecStart=/usr/bin/update-ca-trust
          RemainAfterExit=true

          [Install]
          WantedBy=multi-user.target
        enabled: true
        name: update-ca.service
  extensions: []
  fips: false
  kernelArguments:
  - skew_tick=1
  - nohz=on
  - rcu_nocbs=1,3,5,7,9,11,13,15
  - tuned.non_isolcpus=0000ffff,ffffffff,ffff5555
  - systemd.cpu_affinity=0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
  - intel_iommu=on
  - iommu=pt
  - isolcpus=managed_irq,1,3,5,7,9,11,13,15
  - nohz_full=1,3,5,7,9,11,13,15
  - tsc=nowatchdog
  - nosoftlockup
  - nmi_watchdog=0
  - mce=off
  - skew_tick=1
  - rcutree.kthread_prio=11
  - default_hugepagesz=1G
  - +
  kernelType: realtime
  osImageURL: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:6e7c8e9e407ebab51eac2482d13c07d071c0be1a5755a36a64f0be1b73b3999a
