{
  "ignition": {
    "version": "3.2.0"
  },
  "passwd": {
    "users": [
      {
        "name": "core",
        "sshAuthorizedKeys": [
          "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINedMPekwt897/Z4OgJYYYd8hL205xINWIyNCedJ8C3P okd-cluster\n"
        ]
      }
    ]
  },
  "storage": {
    "files": [
      {
        "overwrite": true,
        "path": "/usr/local/bin/nm-clean-initrd-state.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-ex%20-o%20pipefail%0A%0ANM_DEVICES_DIR%3D%2Frun%2FNetworkManager%2Fdevices%0ANM_RUN_CONN_DIR%3D%2Frun%2FNetworkManager%2Fsystem-connections%0ANM_ETC_CONN_DIR%3D%2Fetc%2FNetworkManager%2Fsystem-connections%0A%0Alogger%20-t%20nm-clean-initrd-state%20%22Cleaning%20network%20activation%20state%20generated%20by%20dracut...%22%0Alogger%20-t%20nm-clean-initrd-state%20%22To%20disable%2C%20remove%20%2Fvar%2Flib%2Fmco%2Fnm-clean-initrd-state%22%0A%0Aif%20%5B%20!%20-e%20%22%24NM_DEVICES_DIR%22%20%5D%20%7C%7C%20%5B%20!%20-e%20%22%24NM_RUN_CONN_DIR%22%20%5D%20%7C%7C%20%5B%20!%20-e%20%22%24NM_ETC_CONN_DIR%22%20%5D%3B%20then%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22There%20is%20no%20network%20activation%20state%20to%20clean%22%0A%20%20exit%0Afi%0A%0A%23%20Some%20deployments%20require%20an%20active%20network%20early%20in%20the%20boot%20process.%20To%0A%23%20achieve%20this%2C%20dracut%20runs%20specific%20NetworkManager%20modules.%20This%20results%20in%0A%23%20NetworkManager%20keyfiles%20being%20generated%20(either%20default%20or%20from%20ip%20kernel%0A%23%20arguments)%20and%20activated.%20This%20activation%20generates%20state%20that%20makes%20those%0A%23%20profiles%20to%20be%20re-activated%20by%20the%20NetworkManager%20service%20later%20in%20the%0A%23%20boot%20process.%20And%20this%20has%20the%20effect%20that%20other%20profiles%20deployed%20by%20the%0A%23%20user%20for%20the%20same%20set%20of%20devices%20are%20ignored.%0A%0A%23%20Most%20of%20the%20time%20this%20is%20the%20desired%20behavior.%20The%20exception%20to%20this%20rule%0A%23%20is%20when%20the%20user%20wants%20to%20run%20the%20boot%20process%20with%20a%20different%20network%0A%23%20setup%20than%20the%20real%20root%20which%20is%20usually%20related%20to%20the%20fact%20that%0A%23%20generating%20images%20with%20customized%20kernel%20arguments%20is%20a%20complication%20in%0A%23%20the%20deployment%20pipeline.%0A%0A%23%20This%20need%20has%20been%20exacerbated%20by%20past%20NetworkManager%20bugs%20that%20activated%0A%23%20the%20network%20on%20boot%20when%20it%20was%20not%20really%20needed.%20Most%20notably%20when%20ip%0A%23%20kernel%20argument%20is%20present%2C%20something%20that%20the%20baremetal%20installer%20adds%20by%0A%23%20default.%0A%0A%23%20The%20intention%20here%20is%20to%20remove%20the%20state%20that%20was%20generated%20with%20the%0A%23%20activation%20of%20those%20profiles%20during%20dracut%20execution.%20Then%20when%0A%23%20NetworkManager%20service%20runs%2C%20the%20profiles%20generated%20by%20dracut%2C%20along%20with%0A%23%20other%20profiles%20configured%20by%20the%20user%2C%20are%20evaluated%20towards%20finding%20the%0A%23%20most%20appropriate%20profile%20to%20connect%20a%20device%20with.%20As%20a%20precaution%2C%20clean%0A%23%20state%20only%20for%20devices%20that%3A%0A%23%20-%20have%20been%20activated%20with%20a%20default%20profile%20(assume%20that%20a%20non-default%0A%23%20%20%20configuration%20expresses%20intention%20by%20user%20to%20run%20with%20it%20permanently)%0A%23%20-%20have%20a%20specific%20configured%20profile%20set%20to%20auto-connect%20(if%20there%20is%20no%0A%23%20%20%20alternate%20configured%20profile%20for%20a%20device%20it%20makes%20no%20sense%20to%0A%23%20%20%20de-activate%20anything)%0A%23%0A%23%20Although%20this%20can%20theoretically%20happen%20on%20any%20deployment%20type%2C%20need%20has%0A%23%20mostly%20come%20from%20IPI%20bare%20metal%20deployments.%20For%20the%20time%20being%2C%20this%0A%23%20should%20be%20opt-in%20in%20any%20other%20deploment%20type.%0A%23%0A%23%20There%20is%20an%20RFE%20filed%20against%20NM%20that%20once%20implemented%20would%20make%20this%0A%23%20script%20unnecessary%3A%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D2089707%0A%0Afor%20device%20in%20%22%24%7BNM_DEVICES_DIR%7D%22%2F*%3B%20do%0A%20%20if%20%5B%20!%20-e%20%22%24device%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20the%20device%20file%20name%20is%20the%20ifindex%0A%20%20ifindex%3D%24(basename%20%22%24device%22)%0A%20%20%0A%20%20%23%20get%20the%20interface%20name%20by%20ifindex%0A%20%20ifname%3D%24(ip%20-j%20link%20show%20%7C%20jq%20-r%20%22.%5B%5D%20%7C%20select(.ifindex%20%3D%3D%20%24%7Bifindex%7D)%20%7C%20.ifname%20%2F%2F%20empty%22)%0A%0A%20%20%23%20no%20interface%20name%20found%2C%20ignore%0A%20%20if%20%5B%20-z%20%22%24ifname%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20get%20the%20uuid%20of%20the%20profile%20the%20device%20has%20been%20activated%20with%0A%20%20active_profile_uuid%3D%24(sed%20-nr%20'%2F%5E%5C%5Bdevice%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Econnection-uuid%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24device%22)%0A%0A%20%20%23%20the%20device%20was%20not%20activated%20with%20any%20profile%2C%20ignore%0A%20%20if%20%5B%20-z%20%22%24active_profile_uuid%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20find%20the%20generated%20profile%20by%20uuid%0A%20%20for%20profile%20in%20%22%24%7BNM_RUN_CONN_DIR%7D%22%2F*%3B%20do%0A%20%20%20%20generated_profile_uuid%3D%24(sed%20-nr%20'%2F%5E%5C%5Bconnection%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Euuid%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20%20%20if%20%5B%20%22%24active_profile_uuid%22%20%3D%20%22%24generated_profile_uuid%22%20%5D%3B%20then%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20done%0A%0A%20%20%23%20generated%20profile%20not%20found%2C%20ignore%0A%20%20if%20%5B%20%22%24active_profile_uuid%22%20!%3D%20%22%24generated_profile_uuid%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20check%20that%20it%20is%20not%20specific%20for%20the%20device%2C%20otherwise%20ignore%0A%20%20profile_ifname%3D%24(sed%20-nr%20'%2F%5E%5C%5Bconnection%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Einterface-name%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20if%20%5B%20-n%20%22%24profile_ifname%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20profile%20not%20generated%20by%20nm-initrd-generator%2C%20ignore%0A%20%20%23%20only%20check%20it%20if%20the%20key%20is%20set%20(from%20NM%201.32.4)%0A%20%20origin%3D%24(sed%20-nr%20'%2F%5E%5C%5Buser%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Eorg.freedesktop.NetworkManager.origin%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20if%20%5B%20-n%20%22%24origin%22%20%5D%20%26%26%20%5B%20%22%24origin%22%20!%3D%20%22nm-initrd-generator%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20%23%20find%20the%20configured%20profile%20by%20name%20with%20auto-connect%20set%0A%20%20for%20profile%20in%20%22%24%7BNM_ETC_CONN_DIR%7D%22%2F*%3B%20do%0A%20%20%20%20profile_ifname%3D%24(sed%20-nr%20'%2F%5E%5C%5Bconnection%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Einterface-name%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20%20%20autoconnect%3D%24(sed%20-nr%20'%2F%5E%5C%5Bconnection%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Eautoconnect%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20%20%20if%20%5B%20%22%24profile_ifname%22%20%3D%20%22%24ifname%22%20%5D%20%26%26%20%5B%20%22%24autoconnect%22%20!%3D%20%22false%22%20%5D%3B%20then%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20done%0A%0A%20%20%23%20configured%20profile%20not%20found%2C%20ignore%0A%20%20if%20%5B%20%22%24profile_ifname%22%20!%3D%20%22%24ifname%22%20%5D%20%7C%7C%20%5B%20%22%24autoconnect%22%20%3D%20%22false%22%20%5D%3B%20then%0A%20%20%20%20continue%0A%20%20fi%0A%0A%20%20configured_profile_uuid%3D%24(sed%20-nr%20'%2F%5E%5C%5Bconnection%5C%5D%2F%2C%2F%5E%5C%5B%2F%7B%2F%5Euuid%5Cs*%3D%2F%7Bs%2F%5B%5E%3D%5D%2B%5Cs*%3D%5Cs*%2F%2F%3BP%7D%7D'%20%22%24profile%22)%0A%20%20%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22%24ifname%20activated%20with%20default%20generated%20profile%20%24generated_profile_uuid%22%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22%24ifname%20has%20different%20configured%20specific%20profile%20%24configured_profile_uuid%22%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22%24ifname%3A%20removing%20state...%22%0A%20%20%0A%20%20%23%20NM%20can%20still%20generate%20internal%20profiles%20from%20the%20IP%20address%0A%20%20%23%20configuration%20of%20devices%2C%20so%20flush%20addresses%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22Flushing%20IP%20addresses%20from%20%24ifname%22%0A%20%20ip%20addr%20flush%20%22%24ifname%22%0A%20%20ip%20-6%20addr%20flush%20%22%24ifname%22%0A%0A%20%20%23%20remove%20device%20state%20file%20to%20prevent%20NM%20to%20unilaterally%20connect%20with%20the%0A%20%20%23%20latest%20activated%20profile%20without%20evaluating%20other%20profiles%20%0A%20%20logger%20-t%20nm-clean-initrd-state%20%22Removing%20%24device%22%0A%20%20rm%20-f%20--%20%22%24device%22%0A%0Adone%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/conf.d/01-ipv6.conf",
        "contents": {
          "source": "data:,%5Bconnection%5D%0Aipv6.dhcp-duid%3Dll%0Aipv6.dhcp-iaid%3Dmac%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/conf.d/20-keyfiles.conf",
        "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/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt",
        "contents": {
          "source": "data:,"
        },
        "mode": 384
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/apiserver-url.env",
        "contents": {
          "source": "data:,KUBERNETES_SERVICE_HOST%3D'api-int.okd.local'%0AKUBERNETES_SERVICE_PORT%3D'6443'%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/audit/rules.d/mco-audit-quiet-containers.rules",
        "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/NetworkManager/dispatcher.d/99-esp-offload",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0A%0A%23%20ESP%20offload%2C%20either%20in%20actual%20hardware%20or%20as%20part%20as%20GRO%20(generic%0A%23%20recieve%20offload)%20does%20not%20work%20for%20interfaces%20attached%20to%20an%20OVS%20bridge%0A%23%20so%20turn%20it%20off%20for%20the%20time%20being.%0A%23%20https%3A%2F%2Fissues.redhat.com%2Fbrowse%2FRHEL-58811%0A%0A%23%20Depends%20on%20ipsec%20service%20drop-in%20to%20start%20it%20after%20configure-ovs%20to%20make%0A%23%20sure%20offloads%20are%20disabled%20before%20ipsec%20starts.%0A%0Aif%20%5B%5B%20%22%242%22%20!%3D%20%22up%22%20%5D%5D%3B%20then%0A%20%20exit%0Afi%0A%0Adevice%3D%24DEVICE_IFACE%0Akind_slave%3D%24(ip%20-j%20-d%20link%20show%20%22%24device%22%20%7C%20jq%20-r%20'.%5B0%5D%20%7C%20.linkinfo.info_slave_kind%20%2F%2F%20empty')%0A%0Aif%20%5B%20%22%24kind_slave%22%20%3D%20%22openvswitch%22%20%5D%3B%20then%0A%20%20for%20feature%20in%20tx-esp-segmentation%20esp-hw-offload%20esp-tx-csum-hw-offload%3B%20do%0A%20%20%20%20if%20ethtool%20-k%20%22%24device%22%20%7C%20grep%20-qE%20%22%5E%24%7Bfeature%7D%3A%20off%22%3B%20then%0A%20%20%20%20%20%20%23%20already%20disabled%2C%20nothing%20to%20do%0A%20%20%20%20%20%20continue%0A%20%20%20%20fi%0A%20%20%20%20%0A%20%20%20%20logger%20-t%2099-esp-offload%20-s%20%22Setting%20%24feature%20off%20for%20%24device%3A%20unsupported%20when%20attached%20to%20Open%20vSwitch%20bridge%22%0A%20%20%20%20ethtool%20-K%20%22%24device%22%20%22%24feature%22%20off%0A%20%20done%0Afi%0A"
        },
        "mode": 484
      },
      {
        "overwrite": true,
        "path": "/etc/tmpfiles.d/cleanup-cni.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": "/usr/local/bin/configure-ovs.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-x%0A%0A%23%20Clear%20ovn-remote%20config%20to%20connect%20to%20OVN%20DBs.%0A%23%20ovnkube%20controller%20will%20set%20it%20on%20startup.%0A%23%20May%20remove%20when%20https%3A%2F%2Fissues.redhat.com%2Fbrowse%2FFDP-1537%20is%20availabe%0A%23%20However%20it%20may%20also%20be%20a%20good%20idea%20to%20leave%20this%20because%20we%20don't%20want%0A%23%20ovn-controller%20syncing%20to%20a%20stale%20OVN%20southbound%20database.%0Aovs-vsctl%20set%20Open_vSwitch%20.%20external_ids%3Aovn-remote%3D%22%20%22%0A%0Aif%20%5B%20-e%20%2Fetc%2Fnmstate%2Fopenshift%2Fapplied%20%5D%3B%20then%0A%20%20echo%20%22Skipping%20configure-ovs%20due%20to%20manual%20network%20configuration%22%0A%20%20exit%200%0Afi%0A%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%0A%0A%23%20always%20use%20--escape%20no%20to%20prevent%20'%3A'%20mangling.%20%20nmcli%20will%20escape%20all%20colons%20as%20%5C%3A%2C%20this%20breaks%20input%0ANMCLI_GET_VALUE%3D%22nmcli%20--escape%20no%20--get-values%22%0A%23%20These%20are%20well%20knwon%20NM%20default%20paths%0ANM_CONN_ETC_PATH%3D%22%2Fetc%2FNetworkManager%2Fsystem-connections%22%0ANM_CONN_RUN_PATH%3D%22%2Frun%2FNetworkManager%2Fsystem-connections%22%0A%0A%23%20This%20is%20the%20path%20where%20NM%20is%20known%20to%20be%20configured%20to%20store%20user%20keyfiles%20%0ANM_CONN_CONF_PATH%3D%22%24NM_CONN_ETC_PATH%22%0A%0A%23%20This%20is%20where%20we%20want%20our%20keyfiles%20to%20finally%20reside.%20configure-ovs%0A%23%20operates%20with%20temporary%20keyfiles%20in%20NM_CONN_RUN_PATH%20and%20then%20as%20a%20last%0A%23%20step%20moves%20those%20keyfiles%20to%20NM_CONN_SET_PATH%20if%20it%20is%20a%20different%20path%0A%23%20(not%20by%20default).%20This%20mitigates%20hard%20interruptions%20(SIGKILL%2C%20hard%20reboot)%0A%23%20of%20configure-ovs%20leaving%20the%20machine%20with%20a%20half-baked%20set%20of%20keyfiles%0A%23%20that%20might%20prevent%20machine%20networking%20from%20working%20correctly.%0ANM_CONN_SET_PATH%3D%22%24%7BNM_CONN_SET_PATH%3A-%24NM_CONN_RUN_PATH%7D%22%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_base()%20%7B%0A%20%20base_path%3D%24%7B1%7D%0A%20%20bridge_name%3D%24%7B2%7D%0A%20%20port_name%3D%24%7B3%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%7Bbase_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%7Bbase_path%7D%2F*%24%7BMANAGED_NM_CONN_SUFFIX%7D.nmconnection%20%24%7Bbase_path%7D%2F*%24%7BMANAGED_NM_CONN_SUFFIX%7D)%0A%20%20shopt%20-u%20nullglob%0A%7D%0A%0Aupdate_nm_conn_run_files()%20%7B%0A%20%20update_nm_conn_files_base%20%22%24%7BNM_CONN_RUN_PATH%7D%22%20%22%24%7B1%7D%22%20%22%24%7B2%7D%22%0A%7D%0A%0Aupdate_nm_conn_set_files()%20%7B%0A%20%20update_nm_conn_files_base%20%22%24%7BNM_CONN_SET_PATH%7D%22%20%22%24%7B1%7D%22%20%22%24%7B2%7D%22%0A%7D%0A%0Aupdate_nm_conn_etc_files()%20%7B%0A%20%20update_nm_conn_files_base%20%22%24%7BNM_CONN_ETC_PATH%7D%22%20%22%24%7B1%7D%22%20%22%24%7B2%7D%22%0A%7D%0A%0A%23%20Move%20and%20reload%20keyfiles%20at%20their%20final%20destination%0Aset_nm_conn_files()%20%7B%0A%20%20if%20%5B%20%22%24NM_CONN_RUN_PATH%22%20!%3D%20%22%24NM_CONN_SET_PATH%22%20%5D%3B%20then%0A%20%20%20%20update_nm_conn_run_files%20br-ex%20phys0%0A%20%20%20%20copy_nm_conn_files%20%22%24NM_CONN_SET_PATH%22%0A%20%20%20%20rm_nm_conn_files%0A%20%20%20%20update_nm_conn_run_files%20br-ex1%20phys1%0A%20%20%20%20copy_nm_conn_files%20%22%24NM_CONN_SET_PATH%22%0A%20%20%20%20rm_nm_conn_files%0A%0A%20%20%20%20%23%20reload%20keyfiles%0A%20%20%20%20nmcli%20connection%20reload%0A%20%20fi%0A%7D%0A%0A%23%20Used%20to%20remove%20files%20managed%20by%20configure-ovs%20and%20temporary%20leftover%20files%20from%20network%20manager%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%20%20for%20file%20in%20%22%24%7BMANAGED_NM_CONN_FILES%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20for%20temp%20in%20%24(compgen%20-G%20%22%24%7Bfile%7D.*%22)%3B%20do%0A%20%20%20%20%20%20rm%20-f%20%22%24temp%22%0A%20%20%20%20%20%20echo%20%22Removed%20nmconnection%20temporary%20file%20%24temp%22%0A%20%20%20%20%20%20nm_config_changed%3D1%0A%20%20%20%20done%0A%20%20done%0A%7D%0A%0A%23%20Used%20to%20clone%20a%20slave%20connection%20by%20uuid%2C%20returns%20new%20name%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(%24NMCLI_GET_VALUE%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%22WARNING%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%20clone_nm_conn%20%24uuid%20%22%24%7Bnew_name%7D%22%0A%20%20echo%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(%24NMCLI_GET_VALUE%20UUID%20connection%20show)%20%3B%20do%0A%20%20%20%20if%20%5B%20%22%24(%24NMCLI_GET_VALUE%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(%24NMCLI_GET_VALUE%20GENERAL.STATE%20connection%20show%20%22%24conn_uuid%22)%0A%20%20%20%20local%20autoconnect%3D%24(%24NMCLI_GET_VALUE%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_name%0A%20%20%20%20new_name%3D%24(clone_slave_connection%20%24conn_uuid)%0A%0A%20%20%20%20mod_nm_conn%20%22%24new_name%22%20connection.master%20%22%24new%22%20connection.autoconnect-priority%20100%20connection.autoconnect%20no%20%0A%20%20%20%20echo%20%22Replaced%20master%20%24old%20with%20%24new%20for%20slave%20profile%20%24new_name%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%20if%20%5B%5B%20-z%20%22%24old_conn%22%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22ERROR%3A%20cannot%20find%20connection%20for%20interface%3A%20%24%7Biface%7D%22%0A%20%20%20%20exit%201%0A%20%20fi%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%20%22%24bridge_name%22%20type%20ovs-bridge%20conn.interface%20%22%24bridge_name%22%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%20%5C%0A%20%20%20%20connection.autoconnect-slaves%201%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%20%22%24default_port_name%22%20type%20ovs-port%20conn.interface%20%24%7Biface%7D%20slave-type%20ovs-bridge%20master%20%22%24bridge_name%22%20%5C%0A%20%20%20%20connection.autoconnect-slaves%201%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%20%22%24ovs_port%22%20type%20ovs-port%20conn.interface%20%22%24bridge_name%22%20slave-type%20ovs-bridge%20master%20%22%24bridge_name%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%22%24(%24NMCLI_GET_VALUE%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%22%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(%24NMCLI_GET_VALUE%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(%24NMCLI_GET_VALUE%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%0A%20%20%20%20if%20nmcli%20connection%20show%20uuid%20%22%24vlan_parent%22%20%26%3E%20%2Fdev%2Fnull%3B%20then%0A%20%20%20%20%20%20%23%20if%20the%20VLAN%20connection%20is%20configured%20with%20a%20connection%20UUID%20as%20parent%2C%20we%20need%20to%20find%20the%20underlying%20device%0A%20%20%20%20%20%20%23%20and%20create%20the%20bridge%20against%20it%2C%20as%20the%20parent%20connection%20can%20be%20replaced%20by%20another%20bridge.%0A%20%20%20%20%20%20vlan_parent%3D%24(%24NMCLI_GET_VALUE%20GENERAL.DEVICES%20conn%20show%20uuid%20%24%7Bvlan_parent%7D)%0A%20%20%20%20fi%0A%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%22%24(%24NMCLI_GET_VALUE%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%22%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(%24NMCLI_GET_VALUE%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%22%24(%24NMCLI_GET_VALUE%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%22%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(%24NMCLI_GET_VALUE%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%20elif%20%5B%20%22%24(%24NMCLI_GET_VALUE%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%22%20%3D%3D%20%22tun%22%20%5D%3B%20then%0A%20%20%20%20iface_type%3Dtun%0A%20%20%20%20tun_mode%3D%24(%24NMCLI_GET_VALUE%20tun.mode%20-e%20no%20connection%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20extra_phys_args%2B%3D(%20tun.mode%20%22%24%7Btun_mode%7D%22%20)%0A%20%20elif%20%5B%20%22%24(%24NMCLI_GET_VALUE%20connection.type%20conn%20show%20%24%7Bold_conn%7D)%22%20%3D%3D%20%22bridge%22%20%5D%3B%20then%0A%20%20%20%20iface_type%3Dbridge%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%20ovs_default_port_conn%3D%24(%24NMCLI_GET_VALUE%20connection.uuid%20conn%20show%20%22%24default_port_name%22)%0A%20%20%20%20add_nm_conn%20%22%24bridge_interface_name%22%20type%20%24%7Biface_type%7D%20conn.interface%20%24%7Biface%7D%20master%20%22%24ovs_default_port_conn%22%20%5C%0A%20%20%20%20%20%20slave-type%20ovs-port%20connection.autoconnect-priority%20100%20connection.autoconnect-slaves%201%20802-3-ethernet.mtu%20%24%7Biface_mtu%7D%20%5C%0A%20%20%20%20%20%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(%24NMCLI_GET_VALUE%20connection.uuid%20conn%20show%20%22%24bridge_interface_name%22)%0A%20%20ovs_port_conn%3D%24(%24NMCLI_GET_VALUE%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%20ipv4_method%3D%24(%24NMCLI_GET_VALUE%20ipv4.method%20conn%20show%20%22%24old_conn%22)%0A%20%20ipv6_method%3D%24(%24NMCLI_GET_VALUE%20ipv6.method%20conn%20show%20%22%24old_conn%22)%0A%0A%20%20ipv4_addresses%3D%24(%24NMCLI_GET_VALUE%20ipv4.addresses%20conn%20show%20%22%24old_conn%22)%0A%20%20ipv6_addresses%3D%24(%24NMCLI_GET_VALUE%20ipv6.addresses%20conn%20show%20%22%24old_conn%22)%0A%0A%20%20%23%20Warn%20about%20an%20invalid%20MTU%20that%20will%20most%20likely%20fail%20in%20one%20way%20or%0A%20%20%23%20another%0A%20%20if%20%5B%20%24%7Biface_mtu%7D%20-lt%201280%20%5D%20%26%26%20%5B%20%22%24%7Bipv6_method%7D%22%20!%3D%20%22disabled%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22WARNING%3A%20MTU%20%24%7Biface_mtu%7D%20is%20lower%20than%20the%20minimum%20required%20of%201280%20for%20IPv6%22%0A%20%20fi%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%20%23%20Clone%20the%20connection%20in%20case%20the%20method%20is%20manual%20or%20in%20case%20the%20an%20address%20is%20set%20(DHCP%20%2B%20static%20IP)%0A%20%20%20%20if%20%5B%20%22%24%7Bipv4_method%7D%22%20%3D%20%22manual%22%20%5D%20%7C%7C%20%5B%20%22%24%7Bipv4_addresses%7D%22%20!%3D%20%22%22%20%5D%20%7C%7C%20%5B%20%22%24%7Bipv6_method%7D%22%20%3D%20%22manual%22%20%5D%20%7C%7C%20%5B%20%22%24%7Bipv6_addresses%7D%22%20!%3D%20%22%22%20%5D%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%20clone_nm_conn%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_RUN_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%20the%20connection%20type%20directly%20because%20it%20can't%20be%20modified%0A%20%20%20%20%20%20%23%20through%20nmcli%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%0A%20%20%20%20%20%20%23%20modify%20some%20more%20settings%20through%20nmcli%0A%20%20%20%20%20%20mod_nm_conn%20%22%24%7Bovs_interface%7D%22%20conn.interface%20%22%24bridge_name%22%20%5C%0A%20%20%20%20%20%20%20%20connection.multi-connect%20%22%22%20connection.autoconnect%20no%20%5C%0A%20%20%20%20%20%20%20%20connection.master%20%22%24ovs_port_conn%22%20connection.slave-type%20ovs-port%20%5C%0A%20%20%20%20%20%20%20%20ovs-interface.type%20internal%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%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(%24NMCLI_GET_VALUE%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(%24NMCLI_GET_VALUE%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(%24NMCLI_GET_VALUE%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%20%23%20check%20for%20static%20DNS%20address%0A%20%20%20%20%20%20ipv4_dns%3D%24(%24NMCLI_GET_VALUE%20ipv4.dns%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24ipv4_dns%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv4.dns%20%24%7Bipv4_dns%7D%20%22%0A%20%20%20%20%20%20fi%0A%20%20%20%20%20%20ipv6_dns%3D%24(%24NMCLI_GET_VALUE%20ipv6.dns%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24ipv6_dns%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv6.dns%20%24%7Bipv6_dns%7D%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20%23%20check%20for%20auto-dns%0A%20%20%20%20%20%20ipv4_auto_dns%3D%24(%24NMCLI_GET_VALUE%20ipv4.ignore-auto-dns%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24ipv4_auto_dns%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv4.ignore-auto-dns%20%24%7Bipv4_auto_dns%7D%20%22%0A%20%20%20%20%20%20fi%0A%20%20%20%20%20%20ipv6_auto_dns%3D%24(%24NMCLI_GET_VALUE%20ipv6.ignore-auto-dns%20conn%20show%20%24%7Bold_conn%7D)%0A%20%20%20%20%20%20if%20%5B%20-n%20%22%24ipv6_auto_dns%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20extra_if_brex_args%2B%3D%22ipv6.ignore-auto-dns%20%24%7Bipv6_auto_dns%7D%20%22%0A%20%20%20%20%20%20fi%0A%0A%20%20%20%20%20%20add_nm_conn%20%22%24ovs_interface%22%20type%20ovs-interface%20slave-type%20ovs-port%20conn.interface%20%22%24bridge_name%22%20master%20%22%24ovs_port_conn%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.method%20%22%24%7Bipv4_method%7D%22%20ipv4.route-metric%20%22%24%7Bbridge_metric%7D%22%20%5C%0A%20%20%20%20%20%20%20%20ipv6.method%20%22%24%7Bipv6_method%7D%22%20ipv6.route-metric%20%22%24%7Bbridge_metric%7D%22%20%5C%0A%20%20%20%20%20%20%20%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%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%20Remove%20the%20keyfiles%20from%20known%20configuration%20paths%0A%20%20update_nm_conn_run_files%20%24%7Bbridge_name%7D%20%24%7Bport_name%7D%0A%20%20rm_nm_conn_files%0A%20%20update_nm_conn_set_files%20%24%7Bbridge_name%7D%20%24%7Bport_name%7D%0A%20%20rm_nm_conn_files%0A%20%20%23%20Shouldn't%20be%20necessary%2C%20workaround%20for%20https%3A%2F%2Fissues.redhat.com%2Fbrowse%2FOCPBUGS-41489%0A%20%20update_nm_conn_etc_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%20remove_ovn_bridges%20br-ex1%20phys1%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%24%7Bnm_config_changed%3A-0%7D%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(%24NMCLI_GET_VALUE%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_CONF_PATH%7D%2F%24%7Bdev%7D%22%20%5D%20%7C%7C%20%5B%20-f%20%22%24%7BNM_CONN_CONF_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%20MANAGED_NM_CONN_FILES%3D(%22%24%7BNM_CONN_CONF_PATH%7D%2F%24%7Bdev%7D%22%20%22%24%7BNM_CONN_CONF_PATH%7D%2F%24%7Bdev%7D.nmconnection%22)%0A%20%20%20%20%20%20%20%20copy_nm_conn_files%20%22%24%7BNM_CONN_RUN_PATH%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%20%23%20don't%20use%20--escape%20no%2C%20we%20use%20%3A%20delimiter%20here%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%20temporary%20deactivated%20connection%20profile%20%0A%23%20First%20argument%20is%20the%20connection%20name%20folowed%20by%20arguments%20passed%20to%0A%23%20%60nmcli%20connection%20add%60%0Aadd_nm_conn()%20%7B%0A%20%20%23%20Use%20%60save%20no%60%20to%20add%20a%20temporary%20profile%0A%20%20nmcli%20c%20add%20save%20no%20con-name%20%22%24%40%22%20connection.autoconnect%20no%0A%7D%0A%0A%23%20Modify%20a%20temporary%20connection%20profile%20%0A%23%20First%20argument%20is%20the%20connection%20name%20followed%20by%20arguments%20passed%20to%0A%23%20%60nmcli%20connection%20modify%60%0Amod_nm_conn()%20%7B%0A%20%20%23%20the%20easiest%20thing%20to%20do%20here%20would%20be%20to%20use%20%60nmcli%20c%20mod%20--temporary%60%0A%20%20%23%20but%20there%20is%20a%20bug%20in%20selinux%20profiles%20that%20denies%20NM%20from%20performing%0A%20%20%23%20the%20operation%0A%20%20local%20dst_path%3D%24%7BNM_CONN_RUN_PATH%7D%2F%241.nmconnection%0A%20%20local%20src_path%0A%20%20src_path%3D%24(mktemp)%0A%20%20shift%0A%20%20cat%20%22%24dst_path%22%20%3E%20%22%24src_path%22%0A%20%20rm%20-f%20%22%24dst_path%22%0A%20%20nmcli%20--offline%20c%20mod%20%22%24%40%22%20%3C%20%22%24src_path%22%20%3E%20%22%24dst_path%22%0A%20%20rm%20-f%20%22%24src_path%22%0A%20%20chmod%20600%20%22%24dst_path%22%0A%20%20nmcli%20c%20load%20%22%24dst_path%22%0A%7D%0A%0A%23%20Clone%20to%20a%20temporary%20connection%20profile%20%0A%23%20First%20argument%20is%20the%20connection%20to%20clone%2C%20second%20argument%20is%20the%20clone%20name%0Aclone_nm_conn()%20%7B%0A%20%20%23%20clone%20as%20temporary%20so%20that%20it%20is%20generated%20in%20NM_CONN_RUN_PATH%0A%20%20nmcli%20connection%20clone%20--temporary%20%22%241%22%20%22%242%22%20%26%3E%20%2Fdev%2Fnull%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%0A%20%20%23%20We%20want%20autoconnect%20set%20for%20our%20cloned%20slave%20profiles%20so%20that%20they%20are%0A%20%20%23%20used%20over%20the%20original%20profiles%20if%20implicitly%20re-activated%20with%20other%0A%20%20%23%20dependant%20profiles.%20Otherwise%20if%20a%20slave%20activates%20with%20an%20old%20profile%2C%0A%20%20%23%20the%20old%20master%20profile%20might%20activate%20as%20well%2C%20interfering%20and%20causing%0A%20%20%23%20further%20activations%20to%20fail.%0A%20%20%23%20Slave%20interfaces%20should%20already%20be%20active%20so%20setting%20autoconnect%20here%0A%20%20%23%20won't%20implicitly%20activate%20them%20but%20there%20is%20an%20edge%20case%20where%20a%20slave%0A%20%20%23%20might%20be%20inactive%20(link%20down%20for%20example)%20and%20in%20that%20case%20setting%0A%20%20%23%20autoconnect%20will%20cause%20an%20implicit%20activation.%20This%20is%20not%20necessarily%20a%0A%20%20%23%20problem%20and%20hopefully%20we%20can%20make%20sure%20everything%20is%20activated%20as%20we%0A%20%20%23%20want%20next.%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(%24NMCLI_GET_VALUE%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%20%23%20Work%20around%20a%20Cisco%20switch%20issue%3A%20if%20a%20slave%20is%20detached%20from%20a%20bond%0A%20%20%20%20%20%20%23%20(e.g.%20during%20NM%20reactivation)%20before%20LACP%20negotiation%20completes%2C%20the%0A%20%20%20%20%20%20%23%20switch%20may%20mishandle%20LACP%20packets%20with%20agg%3D0.%20To%20avoid%20this%2C%20wait%20for%0A%20%20%20%20%20%20%23%20LACP%20to%20finish%20(only%20applies%20to%20LACP%20bonds%20in%20state%20UP).%0A%20%20%20%20%20%20slave%3D%24(nmcli%20-g%20connection.interface-name%20connection%20show%20%22%24conn%22)%0A%20%20%20%20%20%20if%20ip%20-d%20link%20show%20%22%24slave%22%20%7C%20tr%20'%5Cn'%20'%20'%20%7C%20grep%20-q%20'state%20UP.*ad_aggregator_id'%3B%20then%0A%20%20%20%20%20%20%20%20if%20!%20timeout%205%20bash%20-c%20%22while%20%5B%20%5C%24(ip%20-d%20link%20show%20%5C%22%24slave%5C%22%20%7C%20grep%20-o%20%5C%22collecting%2Cdistributing%5C%22%20%7C%20wc%20-l)%20-lt%202%20%5D%3B%20do%20sleep%201%3B%20done%22%3B%20then%0A%20%20%20%20%20%20%20%20%20%20echo%20%22WARNING%3A%20LACP%20negotiation%20is%20not%20yet%20done%20on%20slave%20%24conn.%22%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20fi%0A%20%20%20%20%20%20mod_nm_conn%20%22%24conn%22%20connection.autoconnect%20yes%0A%20%20%20%20fi%0A%20%20done%0A%0A%20%20%23%20Activate%20all%20connections%20and%20fail%20if%20activation%20fails%0A%20%20%23%20For%20slave%20connections%20-%20for%20as%20long%20as%20at%20least%20one%20slave%20that%20belongs%20to%20a%20bond%2Fteam%0A%20%20%23%20comes%20up%2C%20we%20should%20not%20fail%0A%20%20declare%20-A%20master_interfaces%0A%20%20for%20conn%20in%20%22%24%7Bconnections%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20%23%20Get%20the%20slave%20type%0A%20%20%20%20local%20slave_type%3D%24(%24NMCLI_GET_VALUE%20connection.slave-type%20connection%20show%20%22%24conn%22)%0A%20%20%20%20local%20is_slave%3Dfalse%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%20is_slave%3Dtrue%0A%20%20%20%20fi%20%0A%0A%20%20%20%20%23%20For%20slave%20interfaces%2C%20initialize%20the%20master%20interface%20to%20false%20if%20the%20key%20is%20not%20yet%20in%20the%20array%0A%20%20%20%20local%20master_interface%0A%20%20%20%20if%20%24is_slave%3B%20then%0A%20%20%20%20%20%20master_interface%3D%24(%24NMCLI_GET_VALUE%20connection.master%20connection%20show%20%22%24conn%22)%0A%20%20%20%20%20%20if%20!%20%5B%5B%20-v%20%22master_interfaces%5B%24master_interface%5D%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20master_interfaces%5B%22%24master_interface%22%5D%3Dfalse%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20slaves%20should%20implicitly%20activate%2C%20give%20them%20a%20chance%20to%20do%20so%0A%20%20%20%20if%20%24is_slave%3B%20then%0A%20%20%20%20%20%20if%20!%20timeout%205%20bash%20-c%20%22while%20!%20%24NMCLI_GET_VALUE%20GENERAL.STATE%20conn%20show%20%22%24conn%22%20%7C%20grep%20activated%3B%20do%20sleep%201%3B%20done%22%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22WARNING%3A%20slave%20%24conn%20did%20not%20implicitly%20activate%20in%205s%2C%20activating%20explicitly.%22%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20Do%20not%20activate%20interfaces%20that%20are%20already%20active%0A%20%20%20%20%23%20But%20set%20the%20entry%20in%20master_interfaces%20to%20true%20if%20this%20is%20a%20slave%0A%20%20%20%20%23%20Also%20set%20autoconnect%20to%20yes%0A%20%20%20%20local%20active_state%3D%24(%24NMCLI_GET_VALUE%20GENERAL.STATE%20conn%20show%20%22%24conn%22)%0A%20%20%20%20if%20%5B%20%22%24active_state%22%20%3D%3D%20%22activated%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Connection%20%24conn%20already%20activated%22%0A%20%20%20%20%20%20if%20%24is_slave%3B%20then%0A%20%20%20%20%20%20%20%20master_interfaces%5B%24master_interface%5D%3Dtrue%0A%20%20%20%20%20%20fi%0A%20%20%20%20%20%20mod_nm_conn%20%22%24conn%22%20connection.autoconnect%20yes%0A%20%20%20%20%20%20continue%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20Activate%20all%20interfaces%20that%20are%20not%20yet%20active%0A%20%20%20%20for%20i%20in%20%7B1..10%7D%3B%20do%0A%20%20%20%20%20%20echo%20%22Attempt%20%24i%20to%20bring%20up%20connection%20%24conn%22%0A%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%20sleep%205%0A%20%20%20%20done%0A%20%20%20%20if%20%5B%20%24s%20-eq%200%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Brought%20up%20connection%20%24conn%20successfully%22%0A%20%20%20%20%20%20if%20%24is_slave%3B%20then%0A%20%20%20%20%20%20%20%20master_interfaces%5B%22%24master_interface%22%5D%3Dtrue%0A%20%20%20%20%20%20fi%0A%20%20%20%20elif%20!%20%24is_slave%3B%20then%0A%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%20return%20%24s%0A%20%20%20%20fi%0A%20%20%20%20mod_nm_conn%20%22%24conn%22%20connection.autoconnect%20yes%0A%20%20done%0A%20%20%23%20Check%20that%20all%20master%20interfaces%20report%20at%20least%20a%20single%20active%20slave%0A%20%20%23%20Note%3A%20associative%20arrays%20require%20an%20exclamation%20mark%20when%20looping%0A%20%20for%20i%20in%20%22%24%7B!master_interfaces%5B%40%5D%7D%22%3B%20do%0A%20%20%20%20if%20!%20%24%7Bmaster_interfaces%5B%22%24i%22%5D%7D%3B%20then%0A%20%20%20%20%20%20%20%20echo%20%22ERROR%3A%20Cannot%20bring%20up%20any%20slave%20interface%20for%20master%20interface%3A%20%24i%22%0A%20%20%20%20%20%20%20%20return%201%0A%20%20%20%20fi%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%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%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%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%20%20echo%20%22%24%7Biface_default_hint%7D%22%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20fi%0A%20%20fi%0A%20%20echo%20%22%22%0A%7D%0A%0Aget_ip_from_ip_hint_file()%20%7B%0A%20%20local%20ip_hint_file%3D%22%241%22%0A%20%20if%20%5B%5B%20!%20-f%20%22%24%7Bip_hint_file%7D%22%20%5D%5D%3B%20then%0A%20%20%20%20return%0A%20%20fi%0A%20%20ip_hint%3D%24(cat%20%22%24%7Bip_hint_file%7D%22)%0A%20%20echo%20%22%24%7Bip_hint%7D%22%0A%7D%0A%0A%23%20This%20function%20waits%20for%20ip%20address%20of%20br-ex%20to%20be%20bindable%20only%20in%20case%20of%20ipv6%0A%23%20This%20is%20workaround%20for%20OCPBUGS-673%20as%20it%20will%20not%20allow%20starting%20crio%0A%23%20before%20address%20is%20bindable%0Atry_to_bind_ipv6_address()%20%7B%0A%20%20%23%20Retry%20for%201%20minute%0A%20%20retries%3D60%0A%20%20until%20%5B%5B%20%24%7Bretries%7D%20-eq%200%20%5D%5D%3B%20do%0A%20%20%20%20ip%3D%24(ip%20-6%20-j%20addr%20%7C%20jq%20-r%20%22first(.%5B%5D%20%7C%20select(.ifname%3D%3D%5C%22br-ex%5C%22)%20%7C%20.addr_info%5B%5D%20%7C%20select(.scope%3D%3D%5C%22global%5C%22)%20%7C%20.local)%22)%0A%20%20%20%20if%20%5B%5B%20%22%24%7Bip%7D%22%20%3D%3D%20%22%22%20%5D%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22No%20ipv6%20ip%20to%20bind%20was%20found%22%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20%20%20random_port%3D%24(shuf%20-i%2050000-60000%20-n%201)%0A%20%20%20%20echo%20%22Trying%20to%20bind%20%24%7Bip%7D%20on%20port%20%24%7Brandom_port%7D%22%0A%20%20%20%20exit_code%3D%24(timeout%202s%20nc%20-l%20%22%24%7Bip%7D%22%20%24%7Brandom_port%7D%3B%20echo%20%24%3F)%0A%20%20%20%20if%20%5B%5B%20exit_code%20-eq%20124%20%5D%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Address%20bound%20successfully%22%0A%20%20%20%20%20%20break%0A%20%20%20%20fi%0A%20%20%20%20sleep%201%0A%20%20%20%20((%20retries--%20))%0A%20%20done%0A%20%20if%20%5B%5B%20%24%7Bretries%7D%20-eq%200%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22Failed%20to%20bind%20ip%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%7D%0A%0A%23%20Get%20interface%20that%20matches%20ip%20from%20node%20ip%20hint%20file%0A%23%20in%20case%20file%20not%20exists%20return%20nothing%20and%0A%23%20fallback%20to%20default%20interface%20search%20flow%0Aget_nodeip_hint_interface()%20%7B%0A%20%20local%20ip_hint%3D%22%22%0A%20%20local%20ip_hint_file%3D%22%241%22%0A%20%20local%20extra_bridge%3D%22%242%22%0A%20%20local%20iface%3D%22%22%0A%0A%20%20ip_hint%3D%24(get_ip_from_ip_hint_file%20%22%24%7Bip_hint_file%7D%22)%0A%20%20if%20%5B%5B%20-z%20%22%24%7Bip_hint%7D%22%20%20%5D%5D%3B%20then%0A%20%20%20%20return%0A%20%20fi%0A%0A%20%20iface%3D%24(ip%20-j%20addr%20%7C%20jq%20-r%20%22first(.%5B%5D%20%7C%20select(any(.addr_info%5B%5D%3B%20.local%3D%3D%5C%22%24%7Bip_hint%7D%5C%22)%20and%20.ifname!%3D%5C%22br-ex1%5C%22%20and%20.ifname!%3D%5C%22%24%7Bextra_bridge%7D%5C%22))%20%7C%20.ifname%22)%0A%20%20if%20%5B%5B%20-n%20%22%24%7Biface%7D%22%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22%24%7Biface%7D%22%0A%20%20fi%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(%24NMCLI_GET_VALUE%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_default_hint_file%2C%20%24extra_bridge_file%2C%20%24ip_hint_file%2C%20%24default_bridge_file%0A%23%20Determines%20the%20interface%20to%20be%20used%20for%20br-ex.%20Order%20of%20priority%20is%3A%0A%23%201.%20Use%20the%20user%20specified%20interface%20if%20provided%20in%20the%20default%20bridge%20file%0A%23%202.%20Use%20the%20node%20IP%20hint%20interface%0A%23%203.%20Use%20the%20previously%20selected%20interface%0A%23%204.%20Use%20the%20interface%20detected%20as%20default%20gateway%0A%23%0A%23%20Read%20%24default_bridge_file%20and%20return%20the%20contained%20interface.%20Otherwise%2C%0A%23%20read%20%24ip_hint_file%20and%20return%20the%20interface%20that%20matches%20this%20ip.%20Otherwise%2C%0A%23%20if%20the%20default%20interface%20is%20br-ex%2C%20use%20that%20and%20return.%0A%23%20If%20the%20default%20interface%20is%20not%20br-ex%3A%0A%23%20Check%20if%20there%20is%20a%20valid%20hint%20inside%20%24iface_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.%0A%23%20Never%20use%20the%20interface%20that%20is%20provided%20inside%20%24extra_bridge_file%20for%20br-ex1.%0A%23%20Never%20use%20br-ex1.%0A%23%20Write%20the%20default%20interface%20to%20%24iface_default_hint_file%0Aget_default_bridge_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%20ip_hint_file%3D%22%243%22%0A%20%20local%20default_bridge_file%3D%22%244%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%20try%20to%20use%20user%20specified%20file%20first%0A%20%20if%20%5B%20-f%20%22%24default_bridge_file%22%20%5D%3B%20then%0A%20%20%20%20iface%3D%24(cat%20%22%24%7Bdefault_bridge_file%7D%22)%0A%20%20%20%20if%20%5B%20-z%20%22%24iface%22%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22ERROR%3A%20User%20specified%20bridge%20file%20detected%20without%20any%20data%22%0A%20%20%20%20%20%20exit%201%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22%24%7Biface%7D%22%0A%20%20%20%20return%0A%20%20fi%0A%0A%20%20%23%20if%20node%20ip%20was%20set%2C%20we%20should%20search%20for%20interface%20that%20matches%20it%0A%20%20iface%3D%24(get_nodeip_hint_interface%20%22%24%7Bip_hint_file%7D%22%20%22%24%7Bextra_bridge%7D%22)%0A%20%20if%20%5B%5B%20-n%20%22%24%7Biface%7D%22%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22%24%7Biface%7D%22%0A%20%20%20%20return%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%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%20tdir%3D%24(mktemp%20-u%20-d%20-t%20%22configure-ovs-%24(date%20%2B%25Y-%25m-%25d-%25H-%25M-%25S)-XXXXXXXXXX%22)%0A%20%20%0A%20%20if%20%5B%20%24e%20-eq%200%20%5D%3B%20then%0A%20%20%20%20print_state%0A%20%20%20%20%23%20remove%20previous%20troubleshooting%20information%0A%20%20%20%20rm%20-rf%20%22%24(dirname%20%22%24tdir%22)%2Fconfigure-ovs-*%22%0A%20%20%20%20exit%200%0A%20%20fi%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%20remove%20previous%20troubleshooting%20information%20except%20the%20oldest%20one%0A%20%20mapfile%20-t%20tdirs%20%3C%20%3C(compgen%20-G%20%22%24(dirname%20%22%24tdir%22)%2Fconfigure-ovs-*%22)%0A%20%20unset%20-v%20%22tdirs%5B0%5D%22%0A%20%20for%20dir%20in%20%22%24%7Btdirs%5B%40%5D%7D%22%3B%20do%20rm%20-rf%20%22%24dir%22%3B%20done%0A%0A%20%20%23%20copy%20configuration%20to%20tmp%20for%20troubleshooting%0A%20%20mkdir%20-p%20%22%24tdir%22%0A%20%20update_nm_conn_run_files%20br-ex%20phys0%0A%20%20copy_nm_conn_files%20%22%24tdir%22%0A%20%20update_nm_conn_run_files%20br-ex1%20phys1%0A%20%20copy_nm_conn_files%20%22%24tdir%22%0A%20%20echo%20%22Copied%20OVS%20configuration%20to%20%24tdir%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%0A%0A%23%20Setup%20a%20signal%20trap%20to%20rollback%0Ahandle_termination()%20%7B%0A%20%20echo%20%22WARNING%3A%20configure-ovs%20has%20been%20requested%20to%20terminate%2C%20quitting...%22%0A%20%20%0A%20%20%23%20by%20exiting%20with%20an%20error%20we%20will%20cleanup%20after%20ourselves%20in%20a%0A%20%20%23%20subsequent%20call%20to%20handle_exit%0A%20%20exit%201%0A%7D%0A%0A%23%20main%20function%0Aconfigure_ovs()%20%7B%0A%20%20set%20-eu%0A%0A%20%20%23%20setup%20traps%20to%20handle%20signals%20and%20other%20abnormal%20exits%0A%20%20trap%20'handle_termination'%20TERM%20INT%0A%20%20trap%20'handle_exit'%20EXIT%0A%0A%20%20%23%20this%20flag%20tracks%20if%20any%20config%20change%20was%20made%0A%20%20nm_config_changed%3D0%0A%0A%20%20%23%20Check%20that%20we%20are%20provided%20a%20valid%20NM%20connection%20path%0A%20%20if%20%5B%20%22%24NM_CONN_SET_PATH%22%20!%3D%20%22%24NM_CONN_CONF_PATH%22%20%5D%20%26%26%20%5B%20%22%24NM_CONN_SET_PATH%22%20!%3D%20%22%24NM_CONN_RUN_PATH%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22Error%3A%20Incorrect%20NM%20connection%20path%3A%20%24NM_CONN_SET_PATH%20is%20not%20%24NM_CONN_CONF_PATH%20nor%20%24NM_CONN_RUN_PATH%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%0A%20%20%23%20Clean%20up%20old%20config%20on%20behalf%20of%20mtu-migration%0A%20%20if%20!%20systemctl%20-q%20is-enabled%20mtu-migration%3B%20then%0A%20%20%20%20echo%20%22Cleaning%20up%20left%20over%20mtu%20migration%20configuration%22%0A%20%20%20%20rm%20-rf%20%2Fetc%2Fcno%2Fmtu-migration%0A%20%20fi%0A%0A%20%20if%20!%20rpm%20-qa%20%7C%20grep%20-q%20openvswitch%3B%20then%0A%20%20%20%20echo%20%22WARNING%3A%20Openvswitch%20package%20is%20not%20installed!%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%0A%20%20%23%20print%20initial%20state%0A%20%20print_state%0A%0A%20%20if%20%5B%20%22%241%22%20%3D%3D%20%22OVNKubernetes%22%20%5D%3B%20then%0A%20%20%20%20%23%20Configures%20NICs%20onto%20OVS%20bridge%20%22br-ex%22%0A%20%20%20%20%23%20Configuration%20is%20either%20auto-detected%20or%20provided%20through%20a%20config%20file%20written%20already%20in%20Network%20Manager%0A%20%20%20%20%23%20key%20files%20under%20%2Fetc%2FNetworkManager%2Fsystem-connections%2F%0A%20%20%20%20%23%20Managing%20key%20files%20is%20outside%20of%20the%20scope%20of%20this%20script%0A%0A%20%20%20%20%23%20if%20the%20interface%20is%20of%20type%20vmxnet3%20add%20multicast%20capability%20for%20that%20driver%0A%20%20%20%20%23%20History%3A%20BZ%3A1854355%0A%20%20%20%20function%20configure_driver_options%20%7B%0A%20%20%20%20%20%20intf%3D%241%0A%20%20%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%20%20%20echo%20%22Device%20file%20doesn't%20exist%2C%20skipping%20setting%20multicast%20mode%22%0A%20%20%20%20%20%20else%0A%20%20%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%20%20%20echo%20%22Driver%20name%20is%22%20%24driver%0A%20%20%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%20%20%20ip%20link%20set%20dev%20%22%24%7Bintf%7D%22%20allmulticast%20on%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20fi%0A%20%20%20%20%7D%0A%0A%20%20%20%20ovnk_config_dir%3D'%2Fetc%2Fovnk'%0A%20%20%20%20ovnk_var_dir%3D'%2Fvar%2Flib%2Fovnk'%0A%20%20%20%20extra_bridge_file%3D%22%24%7Bovnk_config_dir%7D%2Fextra_bridge%22%0A%20%20%20%20iface_default_hint_file%3D%22%24%7Bovnk_var_dir%7D%2Fiface_default_hint%22%0A%20%20%20%20ip_hint_file%3D%22%2Frun%2Fnodeip-configuration%2Fprimary-ip%22%0A%20%20%20%20%23%20explicitly%20specify%20which%20interface%20should%20be%20used%20with%20the%20default%20bridge%0A%20%20%20%20default_bridge_file%3D%22%24%7Bovnk_config_dir%7D%2Fdefault_bridge%22%0A%0A%20%20%20%20%23%20make%20sure%20to%20create%20ovnk_config_dir%20if%20it%20does%20not%20exist%2C%20yet%0A%20%20%20%20mkdir%20-p%20%22%24%7Bovnk_config_dir%7D%22%0A%20%20%20%20%23%20make%20sure%20to%20create%20ovnk_var_dir%20if%20it%20does%20not%20exist%2C%20yet%0A%20%20%20%20mkdir%20-p%20%22%24%7Bovnk_var_dir%7D%22%0A%0A%20%20%20%20%23%20For%20upgrade%20scenarios%2C%20make%20sure%20that%20we%20stabilize%20what%20we%20already%20configured%0A%20%20%20%20%23%20before.%20If%20we%20do%20not%20have%20a%20valid%20interface%20hint%2C%20find%20the%20physical%20interface%0A%20%20%20%20%23%20that's%20attached%20to%20ovs-if-phys0.%0A%20%20%20%20%23%20If%20we%20find%20such%20an%20interface%2C%20write%20it%20to%20the%20hint%20file.%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%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20%20%20current_interface%3D%24(get_bridge_physical_interface%20ovs-if-phys0)%0A%20%20%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%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%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20delete%20iface_default_hint_file%20if%20it%20has%20the%20same%20content%20as%20extra_bridge_file%0A%20%20%20%20%23%20in%20that%20case%2C%20we%20must%20also%20force%20a%20reconfiguration%20of%20our%20network%20interfaces%0A%20%20%20%20%23%20to%20make%20sure%20that%20we%20reconcile%20this%20conflict%0A%20%20%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%20%5B%20-f%20%22%24%7Bextra_bridge_file%7D%22%20%5D%20%26%26%0A%20%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%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%20%20%20echo%20%22Deleting%20file%20%24%7Biface_default_hint_file%7D%20to%20choose%20a%20different%20interface%22%0A%20%20%20%20%20%20rm%20-f%20%22%24%7Biface_default_hint_file%7D%22%0A%20%20%20%20%20%20rm%20-f%20%2Frun%2Fconfigure-ovs-boot-done%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20on%20every%20boot%20we%20rollback%20and%20generate%20the%20configuration%20again%2C%20to%20take%0A%20%20%20%20%23%20in%20any%20changes%20that%20have%20possibly%20been%20applied%20in%20the%20standard%0A%20%20%20%20%23%20configuration%20sources%0A%20%20%20%20if%20%5B%20!%20-f%20%2Frun%2Fconfigure-ovs-boot-done%20%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Running%20on%20boot%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%20%20%20touch%20%2Frun%2Fconfigure-ovs-boot-done%0A%0A%20%20%20%20iface%3D%24(get_default_bridge_interface%20%22%24%7Biface_default_hint_file%7D%22%20%22%24%7Bextra_bridge_file%7D%22%20%22%24%7Bip_hint_file%7D%22%20%22%24%7Bdefault_bridge_file%7D%22)%0A%0A%20%20%20%20if%20%5B%20%22%24iface%22%20!%3D%20%22br-ex%22%20%5D%3B%20then%0A%20%20%20%20%20%20%23%20Specified%20interface%20is%20not%20br-ex.%0A%20%20%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%20%20%23%20and%20bound%20to%20a%20different%20nic%20(https%3A%2F%2Fgithub.com%2Ftrozet%2Fopenshift-ovn-migration).%0A%20%20%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%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%20%20%23%20from%20previous%20attempts.%0A%20%20%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%20%20%20echo%20%22Bridge%20br-ex%20is%20not%20active%2C%20restoring%20previous%20configuration%20before%20proceeding...%22%0A%20%20%20%20%20%20%20%20rollback_nm%0A%20%20%20%20%20%20%20%20print_state%0A%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%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%20%20%23%20Check%20if%20we%20need%20to%20configure%20the%20second%20bridge%0A%20%20%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%20%20%20interface%3D%24(head%20-n%201%20%24extra_bridge_file)%0A%20%20%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%20%20%20fi%0A%0A%20%20%20%20%23%20Check%20if%20we%20need%20to%20remove%20the%20second%20bridge%0A%20%20%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%20%20%20remove_ovn_bridges%20br-ex1%20phys1%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20Remove%20bridges%20created%20by%20openshift-sdn%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br0%0A%0A%20%20%20%20%23%20Make%20sure%20everything%20is%20activated.%20Do%20it%20in%20a%20specific%20order%3A%0A%20%20%20%20%23%20-%20activate%20br-ex%20first%2C%20due%20to%20autoconnect-slaves%20this%20will%20also%0A%20%20%20%20%23%20%20%20activate%20ovs-port-br-ex%2C%20ovs-port-phys0%20and%20ovs-if-phys0.%20It%20is%0A%20%20%20%20%23%20%20%20important%20that%20ovs-if-phys0%20activates%20with%20br-ex%20to%20avoid%20the%0A%20%20%20%20%23%20%20%20ovs-if-phys0%20profile%20being%20overridden%20with%20a%20profile%20generated%20from%0A%20%20%20%20%23%20%20%20kargs.%20The%20activation%20of%20ovs-if-phys0%2C%20if%20a%20bond%2C%20might%20cause%20the%0A%20%20%20%20%23%20%20%20slaves%20to%20re-activate%2C%20but%20it%20should%20be%20with%20our%20profiles%20since%20they%0A%20%20%20%20%23%20%20%20have%20higher%20priority%0A%20%20%20%20%23%20-%20make%20sure%20that%20ovs-if-phys0%20and%20its%20slaves%2C%20if%20any%2C%20are%20activated.%0A%20%20%20%20%23%20-%20finally%20activate%20ovs-if-br-ex%20which%20holds%20the%20IP%20configuration.%0A%20%20%20%20connections%3D(br-ex%20ovs-if-phys0)%0A%20%20%20%20if%20%5B%20-f%20%22%24extra_bridge_file%22%20%5D%3B%20then%0A%20%20%20%20%20%20connections%2B%3D(br-ex1%20ovs-if-phys1)%0A%20%20%20%20fi%0A%20%20%20%20while%20IFS%3D%20read%20-r%20connection%3B%20do%0A%20%20%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%20%20%20connections%2B%3D(%22%24connection%22)%0A%20%20%20%20%20%20fi%0A%20%20%20%20done%20%3C%20%3C(nmcli%20-g%20NAME%20c)%0A%20%20%20%20connections%2B%3D(ovs-if-br-ex)%0A%20%20%20%20if%20%5B%20-f%20%22%24extra_bridge_file%22%20%5D%3B%20then%0A%20%20%20%20%20%20connections%2B%3D(ovs-if-br-ex1)%0A%20%20%20%20fi%0A%20%20%20%20activate_nm_connections%20%22%24%7Bconnections%5B%40%5D%7D%22%0A%20%20%20%20try_to_bind_ipv6_address%0A%20%20%20%20set_nm_conn_files%0A%20%20elif%20%5B%20%22%241%22%20%3D%3D%20%22OpenShiftSDN%22%20%5D%3B%20then%0A%20%20%20%20%23%20Revert%20changes%20made%20by%20%2Fusr%2Flocal%2Fbin%2Fconfigure-ovs.sh%20during%20SDN%20migration.%0A%20%20%20%20rollback_nm%0A%20%20%20%20%0A%20%20%20%20%23%20Remove%20bridges%20created%20by%20ovn-kubernetes%0A%20%20%20%20ovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br-int%20--%20--if-exists%20del-br%20br-local%0A%20%20fi%0A%7D%0A%0A%23%20Retry%20configure_ovs%20until%20it%20succeeds.%0A%23%20By%20default%2C%20retry%20every%2015%20minutes%20to%20give%20enough%20time%20to%20gather%0A%23%20troubleshooting%20information%20in%20between.%20Note%20that%20configure_ovs%20has%20other%0A%23%20internal%20retry%20mechanisms.%20This%20retry%20is%20intended%20to%20give%20some%0A%23%20self-healing%20capabilities%20to%20temporary%20but%20not%20necessarily%20short-lived%0A%23%20infrastructure%20problems.%0ARETRY%3D%22%24%7BRETRY-15m%7D%22%0Awhile%20true%3B%20do%0A%0A%20%20%23%20Disable%20retries%20if%20termination%20signal%20is%20received.%20Note%20that%20systemd%0A%20%20%23%20sends%20the%20signals%20to%20all%20processes%20in%20the%20group%20by%20default%20so%20we%20expect%0A%20%20%23%20configure_ovs%20to%20get%20its%20own%20signals.%0A%20%20trap%20'echo%20%22WARNING%3A%20termination%20requested%2C%20disabling%20retries%22%3B%20RETRY%3D%22%22'%20INT%20TERM%0A%20%20%0A%20%20%23%20Run%20configure_ovs%20in%20a%20sub-shell.%20%0A%20%20(%20configure_ovs%20%22%24%40%22%20)%0A%20%20e%3D%24%3F%0A%0A%20%20%23%20Handle%20signals%20while%20we%20sleep%0A%20%20trap%20'handle_termination'%20INT%20TERM%0A%20%20%0A%20%20%23%20Exit%20if%20succesful%20and%20not%20configured%20to%20retry%0A%20%20%5B%20%22%24e%22%20-eq%200%20%5D%20%7C%7C%20%5B%20-z%20%22%24RETRY%22%20%5D%20%26%26%20exit%20%22%24e%22%0A%20%20%0A%20%20echo%20%22configure-ovs%20failed%2C%20will%20retry%20after%20%24RETRY%22%0A%20%20%23%20flag%20that%20a%20retry%20has%20happened%0A%20%20touch%20%2Ftmp%2Fconfigure-ovs-retry%0A%20%20sleep%20%22%24RETRY%22%0A%0Adone%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/containers/storage.conf",
        "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%2C%20must%20be%20set%20for%20proper%20operation.%0Adriver%20%3D%20%22overlay%22%0A%0A%23%20Temporary%20storage%20location%0Arunroot%20%3D%20%22%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%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.%20This%20setting%20overrides%20the%0A%23%20Remap-UIDs%2FGIDs%20setting.%0A%23%0A%23%20remap-user%20%3D%20%22storage%22%0A%23%20remap-group%20%3D%20%22storage%22%0A%0A%5Bstorage.options.pull_options%5D%0A%23%20Options%20controlling%20how%20storage%20is%20populated%20when%20pulling%20images.%0A%0A%23%20Enable%20the%20%22zstd%3Achunked%22%20feature%2C%20which%20allows%20partial%20pulls%2C%20reusing%0A%23%20content%20that%20already%20exists%20on%20the%20system.%20This%20is%20disabled%20by%20default%2C%0A%23%20and%20must%20be%20explicitly%20enabled%20to%20be%20used.%20For%20more%20on%20zstd%3Achunked%2C%20see%0A%23%20https%3A%2F%2Fgithub.com%2Fcontainers%2Fstorage%2Fblob%2Fmain%2Fdocs%2Fcontainers-storage-zstd-chunked.md%0Aenable_partial_images%20%3D%20%22false%22%0A%0A%23%20Tells%20containers%2Fstorage%20to%20use%20hard%20links%20rather%20then%20create%20new%20files%20in%0A%23%20the%20image%2C%20if%20an%20identical%20file%20already%20existed%20in%20storage.%0Ause_hard_links%20%3D%20%22false%22%0A%0A%23%20Path%20to%20an%20ostree%20repository%20that%20might%20have%0A%23%20previously%20pulled%20content%20which%20can%20be%20used%20when%20attempting%20to%20avoid%0A%23%20pulling%20content%20from%20the%20container%20registry.%0Aostree_repos%20%3D%20%22%22%0A%0A%5Bstorage.options.overlay%5D%0A%23%20Storage%20Options%20for%20overlay%0A%0A%23%20Do%20not%20create%20a%20PRIVATE%20bind%20mount%20on%20the%20home%20directory.%0Askip_mount_home%20%3D%20%22true%22%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"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/docker/certs.d/.create",
        "contents": {
          "source": "data:,Initial%20Creation%0A"
        },
        "mode": 384
      },
      {
        "overwrite": true,
        "path": "/etc/mco/proxy.env",
        "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/systemd/system.conf.d/10-default-env-godebug.conf",
        "contents": {
          "source": "data:,%5BManager%5D%0ADefaultEnvironment%3DGODEBUG%3Dx509ignoreCN%3D0%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/dispatcher.d/99-gcp-disable-idpf-tx-checksum-off",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0A%23%20Workaround%3A%0A%23%20https%3A%2F%2Fissues.redhat.com%2Fbrowse%2FOCPBUGS-38779%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%22idpf%22%20%5D%5D%3B%20then%0A%20%20ethtool%20-K%20%24%7BDEVICE_IFACE%7D%20tx-checksumming%20off%0Afi"
        },
        "mode": 484
      },
      {
        "overwrite": true,
        "path": "/etc/modules-load.d/iptables.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/node-sizing-enabled.env",
        "contents": {
          "source": "data:,NODE_SIZING_ENABLED%3Dfalse%0ASYSTEM_RESERVED_MEMORY%3D1Gi%0ASYSTEM_RESERVED_CPU%3D500m%0ASYSTEM_RESERVED_ES%3D1Gi"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/usr/local/sbin/dynamic-system-reserved-calc.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-e%0ANODE_SIZES_ENV%3D%24%7BNODE_SIZES_ENV%3A-%2Fetc%2Fnode-sizing.env%7D%0AVERSION_1%3D1%0AVERSION_2%3D2%0ANODE_AUTO_SIZING_VERSION%3D%24%7BNODE_AUTO_SIZING_VERSION%3A-%24VERSION_2%7D%0ANODE_AUTO_SIZING_VERSION_FILE%3D%24%7BNODE_AUTO_SIZING_VERSION_FILE%3A-%2Fetc%2Fnode-sizing-version.json%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%20recommended_systemreserved_memory%3D%24(echo%20%24recommended_systemreserved_memory%20%7C%20awk%20'%7Bprintf(%22%25d%5Cn%22%2C%241%20%2B%200.5)%7D')%20%23%20Round%20off%20so%20we%20avoid%20float%20conversions%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%20if%20%5B%20%22%241%22%20-eq%20%22%24VERSION_1%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D0%0A%20%20%20%20%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%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%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D0.06%0A%20%20%20%20%20%20%20%20%20%20%20%20total_cpu%3D%24((total_cpu-1))%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%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%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%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%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%20%20%20%20%20total_cpu%3D%24((total_cpu-1))%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%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%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%20%20%20%20%20total_cpu%3D0%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%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%20%20%20%20%20total_cpu%3D%24((total_cpu-2))%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%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%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%20%20%20%20%20fi%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20%23%20Base%20allocation%20for%201%20CPU%20in%20fractions%20of%20a%20core%20(60%20millicores%20%3D%200.06%20CPU%20core)%0A%20%20%20%20%20%20%20%20base_allocation_fraction%3D0.06%0A%20%20%20%20%20%20%20%20%23%20Increment%20per%20additional%20CPU%20in%20fractions%20of%20a%20core%20(12%20millicores%20%3D%200.012%20CPU%20core)%0A%20%20%20%20%20%20%20%20increment_per_cpu_fraction%3D0.012%0A%20%20%20%20%20%20%20%20if%20((total_cpu%20%3E%201))%3B%20then%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20Calculate%20the%20total%20system-reserved%20CPU%20in%20fractions%2C%20starting%20with%20the%20base%20allocation%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20and%20adding%20the%20incremental%20fraction%20for%20each%20additional%20CPU%0A%20%20%20%20%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24(awk%20-v%20base%3D%22%24base_allocation_fraction%22%20-v%20increment%3D%22%24increment_per_cpu_fraction%22%20-v%20cpus%3D%22%24total_cpu%22%20'BEGIN%20%7Bprintf%20%22%25.2f%5Cn%22%2C%20base%20%2B%20increment%20*%20(cpus%20-%201)%7D')%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20For%20a%20single%20CPU%2C%20use%20the%20base%20allocation%0A%20%20%20%20%20%20%20%20%20%20%20%20recommended_systemreserved_cpu%3D%24base_allocation_fraction%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20fi%0A%0A%20%20%20%20%23%20Enforce%20minimum%20threshold%20of%200.5%20CPU%0A%20%20%20%20recommended_systemreserved_cpu%3D%24(awk%20-v%20val%3D%22%24recommended_systemreserved_cpu%22%20'BEGIN%20%7Bif%20(val%20%3C%200.5)%20print%200.5%3B%20else%20print%20val%7D')%0A%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%20set_memory%20%7B%0A%20%20%20%20SYSTEM_RESERVED_MEMORY%3D%241%0A%20%20%20%20if%20%5B%20-z%20%22%24%7BSYSTEM_RESERVED_MEMORY%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20SYSTEM_RESERVED_MEMORY%3D%221Gi%22%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_MEMORY%3D%24%7BSYSTEM_RESERVED_MEMORY%7D%22%20%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%7D%0Afunction%20set_cpu%20%7B%0A%20%20%20%20SYSTEM_RESERVED_CPU%3D%241%0A%20%20%20%20if%20%5B%20-z%20%22%24%7BSYSTEM_RESERVED_CPU%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20SYSTEM_RESERVED_CPU%3D%22500m%22%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_CPU%3D%24%7BSYSTEM_RESERVED_CPU%7D%22%20%3E%3E%20%24%7BNODE_SIZES_ENV%7D%0A%7D%0Afunction%20set_es%20%7B%0A%20%20%20%20SYSTEM_RESERVED_ES%3D%241%0A%20%20%20%20if%20%5B%20-z%20%22%24%7BSYSTEM_RESERVED_ES%7D%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20SYSTEM_RESERVED_ES%3D%221Gi%22%0A%20%20%20%20fi%0A%20%20%20%20echo%20%22SYSTEM_RESERVED_ES%3D%24%7BSYSTEM_RESERVED_ES%7D%22%20%3E%3E%20%24%7BNODE_SIZES_ENV%7D%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%20%241%0A%20%20%20%20set_es%20%242%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%20set_memory%20%241%0A%20%20%20%20set_cpu%20%242%0A%20%20%20%20set_es%20%243%0A%7D%0Afunction%20create_version_file%20%7B%0A%20%20%20%20echo%20%22%7B%5C%22version%5C%22%3A%20%241%7D%22%20%3E%20%242%0A%7D%0Aif%20!%20%5B%20-f%20%24NODE_AUTO_SIZING_VERSION_FILE%20%5D%3B%20then%0A%20%20%20%20create_version_file%20%24NODE_AUTO_SIZING_VERSION%20%24NODE_AUTO_SIZING_VERSION_FILE%0Afi%0Anew_version%3D%24(jq%20.version%20%24NODE_AUTO_SIZING_VERSION_FILE)%0Aif%20%5B%20%241%20%3D%3D%20%22true%22%20%5D%3B%20then%0A%20%20%20%20dynamic_node_sizing%20%24new_version%20%244%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%20%244%0Aelse%0A%20%20%20%20echo%20%22Unrecognized%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": "/etc/systemd/system.conf.d/kubelet-cgroups.conf",
        "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/kubelet.service.d/20-logging.conf",
        "contents": {
          "source": "data:,%5BService%5D%0AEnvironment%3D%22KUBELET_LOG_LEVEL%3D2%22%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/conf.d/sdn.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": "/usr/local/bin/nmstate-configuration.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-eux%0A%0A%23%20Clean%20up%20old%20config%20on%20behalf%20of%20mtu-migration%0Aif%20!%20systemctl%20-q%20is-enabled%20mtu-migration%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%0Asrc_path%3D%22%2Fetc%2Fnmstate%2Fopenshift%22%0Adst_path%3D%22%2Fetc%2Fnmstate%22%0Ahostname%3D%24(hostname%20-s)%0Ahost_file%3D%22%24%7Bhostname%7D.yml%22%0Acluster_file%3D%22cluster.yml%22%0Aconfig_file%3D%22%22%0Aif%20%5B%20-s%20%22%24src_path%2F%24host_file%22%20%5D%3B%20then%0A%20%20config_file%3D%24host_file%0Aelif%20%5B%20-s%20%22%24src_path%2F%24cluster_file%22%20%5D%3B%20then%0A%20%20config_file%3D%24cluster_file%0Aelse%0A%20%20echo%20%22No%20configuration%20found%20at%20%24src_path%2F%24host_file%20or%20%24src_path%2F%24cluster_file%22%0A%20%20exit%200%0Afi%0A%0Aif%20%5B%20-e%20%22%24src_path%2Fapplied%22%20%5D%3B%20then%0A%20%20sha_applied%3D%24(sha256sum%20%22%24src_path%2Fapplied%22%20%7C%20awk%20'%7Bprint%20%241%7D')%0A%20%20sha_config%3D%24(sha256sum%20%22%24src_path%2F%24config_file%22%20%7C%20awk%20'%7Bprint%20%241%7D')%0A%20%20if%20%5B%22%24sha_applied%22%3D%3D%22%24sha_config%22%5D%3B%20then%0A%20%20%20%20echo%20%22Configuration%20already%20applied%2C%20exiting%22%0A%20%20%20%20exit%200%0A%20%20fi%0Afi%0A%0A%23%20Handle%20the%20case%20where%20we're%20migrating%20from%20configure-ovs%0Aovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br-ex%0A%0A%23%20Handle%20the%20case%20where%20we're%20migrating%20from%20OpenShift%20SDN%0Aovs-vsctl%20--timeout%3D30%20--if-exists%20del-br%20br0%0A%0Acp%20%22%24src_path%2F%24config_file%22%20%2Fetc%2Fnmstate%0Acp%20%22%24src_path%2F%24config_file%22%20%22%24src_path%2Fapplied%22%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/nmstate/nmstate.conf",
        "contents": {
          "source": "data:,%5Bservice%5D%0Akeep_state_file_after_apply%20%3D%20true%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/dispatcher.d/pre-up.d/10-ofport-request.sh",
        "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%22OVNKubernetes%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.%20If%20it%20doesn't%20have%20any%2C%20assume%20it's%20not%20our%20bridge%0ABRIDGE_ID%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')%0Aif%20%5B%20%22%24%7BBRIDGE_ID%7D%22%20%3D%3D%20%22%22%20%5D%3B%20then%0A%20%20%20%20exit%200%0Afi%0A%0A%23%20Get%20the%20bridge%20name%0ABRIDGE_NAME%3D%24(nmcli%20-t%20-f%20connection.interface-name%20conn%20show%20%22%24%7BBRIDGE_ID%7D%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%20%7C%7C%20true%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%0A%23%20OCPBUGS-54682%3A%20If%20the%20condition%20is%20not%20met%20the%20first%20time%20it%20will%20check%20for%20br-ex-br%20to%20see%20if%20there%20is%20a%20K-NMS%20managed%20br-ex.%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%20BRIDGE_NAME%3D%24(nmcli%20-t%20-f%20connection.interface-name%20conn%20show%20%22br-ex-br%22%20%7C%20awk%20-F%20'%3A'%20'%7Bprint%20%24NF%7D')%0Afi%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/machine-config-daemon/generate_podman_policy_args.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0A%0A%23%20Extract%20Podman%20version%20and%20determine%20the%20signature%20policy%0A%2Fusr%2Fbin%2Fpodman%20-v%20%7C%20%2Fbin%2Fawk%20'%7B%0A%20%20%20%20split(%243%2C%20version%2C%20%22-%22)%3B%0A%20%20%20%20clean_version%20%3D%20version%5B1%5D%3B%0A%0A%20%20%20%20split(clean_version%2C%20current%2C%20%2F%5C.%2F)%3B%0A%20%20%20%20split(%224.4.1%22%2C%20target%2C%20%2F%5C.%2F)%3B%0A%0A%20%20%20%20for%20(i%20%3D%201%3B%20i%20%3C%3D%203%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20if%20((current%5Bi%5D%20%2B%200)%20%3C%20(target%5Bi%5D%20%2B%200))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20%22--signature-policy%20%2Fetc%2Fmachine-config-daemon%2Fpolicy-for-old-podman.json%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20exit%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20((current%5Bi%5D%20%2B%200)%20%3E%20(target%5Bi%5D%20%2B%200))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20exit%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D'%20%3E%20%2Ftmp%2Fpodman_policy_args%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/var/lib/kubelet/config.json",
        "contents": {
          "source": "data:,%7B%22auths%22%3A%7B%22fake%22%3A%7B%22auth%22%3A%22aWQ6cGFzcwo%3D%22%7D%7D%7D%0A"
        },
        "mode": 384
      },
      {
        "overwrite": true,
        "path": "/etc/sysctl.d/arp.conf",
        "contents": {
          "source": "data:,%23%20Needed%20by%20the%20OpenShift%20SDN.%20See%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1758552%0Anet.ipv4.conf.all.arp_announce%20%3D%202%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/sysctl.d/gc-thresh.conf",
        "contents": {
          "source": "data:,%23%20See%3A%20rhbz%231384746%2C%20OCPBUGS-24012%0Anet.ipv4.neigh.default.gc_thresh1%3D8192%0Anet.ipv4.neigh.default.gc_thresh2%3D32768%0Anet.ipv4.neigh.default.gc_thresh3%3D65536%0Anet.ipv6.neigh.default.gc_thresh1%3D8192%0Anet.ipv6.neigh.default.gc_thresh2%3D32768%0Anet.ipv6.neigh.default.gc_thresh3%3D65536%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/sysctl.d/inotify.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/enable-userfaultfd.conf",
        "contents": {
          "source": "data:,vm.unprivileged_userfaultfd%20%3D%201"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/sysctl.d/vm-max-map.conf",
        "contents": {
          "source": "data:,%23%20Needed%20for%20OpenShift%20Logging%20(ElasticSearch).%20See%0A%23%20https%3A%2F%2Fbugzilla.redhat.com%2Fshow_bug.cgi%3Fid%3D1793714%0Avm.max_map_count%20%3D%20262144%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/usr/local/bin/mco-hostname",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-euo%20pipefail%0A%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%0A%20%20%20%20%23%20Some%20cloud%20platforms%20may%20assign%20a%20hostname%20with%20a%20trailing%20dot.%0A%20%20%20%20%23%20However%2C%20tools%20like%20%60hostnamectl%60%20(used%20by%20systemd)%20do%20not%20allow%20trailing%20dots%2C%0A%20%20%20%20%23%20so%20we%20strip%20the%20trailing%20dot%20before%20applying%20the%20hostname.%0A%20%20%20%20HOSTNAME%3D%22%24(%3C%2Fproc%2Fsys%2Fkernel%2Fhostname)%22%0A%20%20%20%20CLEAN_HOSTNAME%3D%22%24%7BHOSTNAME%25.%7D%22%20%0A%20%20%20%20echo%20%22node%20identified%20as%20%24CLEAN_HOSTNAME%22%0A%20%20%20%20echo%20%22saving%20hostname%20to%20prevent%20NetworkManager%20from%20ever%20unsetting%20it%22%0A%20%20%20%20hostnamectl%20set-hostname%20--static%20--transient%20%22%24CLEAN_HOSTNAME%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%0Aset_openstack_hostname()%20%7B%0A%20%20%20%20%23%20Read%20metadata%20written%20by%20afterburn%20service%0A%20%20%20%20.%20%2Frun%2Fmetadata%2Fafterburn%0A%0A%20%20%20%20%23%20node-valid-hostname%20sets%20persistent%20hostname%20from%20%2Fproc%2Fsys%2Fkernel%2Fhostname%0A%20%20%20%20echo%20%22%24AFTERBURN_OPENSTACK_HOSTNAME%22%20%3E%20%2Fproc%2Fsys%2Fkernel%2Fhostname%0A%7D%0A%0Aset_powervs_hostname()%20%7B%0A%20%20%20%20%23%20Read%20metadata%20written%20by%20afterburn%20service%0A%20%20%20%20.%20%2Frun%2Fmetadata%2Fafterburn%0A%0A%20%20%20%20%23%20node-valid-hostname%20sets%20persistent%20hostname%20from%20%2Fproc%2Fsys%2Fkernel%2Fhostname%0A%20%20%20%20echo%20%22%24AFTERBURN_POWERVS_LOCAL_HOSTNAME%22%20%3E%20%2Fproc%2Fsys%2Fkernel%2Fhostname%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--openstack)%20set_openstack_hostname%3B%3B%0A%20%20%20%20--powervs)%20set_powervs_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/recover-kubeconfig.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0A%0Aset%20-eou%20pipefail%0A%0A%23%20context%0Aintapi%3D%24(oc%20get%20infrastructures.config.openshift.io%20cluster%20-o%20%22jsonpath%3D%7B.status.apiServerInternalURI%7D%22)%0Acontext%3D%22%24(oc%20config%20current-context)%22%0A%23%20cluster%0Acluster%3D%22%24(oc%20config%20view%20-o%20%22jsonpath%3D%7B.contexts%5B%3F(%40.name%3D%3D%5C%22%24context%5C%22)%5D.context.cluster%7D%22)%22%0Aserver%3D%22%24(oc%20config%20view%20-o%20%22jsonpath%3D%7B.clusters%5B%3F(%40.name%3D%3D%5C%22%24cluster%5C%22)%5D.cluster.server%7D%22)%22%0A%23%20token%0Aca_crt_data%3D%22%24(oc%20get%20secret%20-n%20openshift-machine-config-operator%20node-bootstrapper-token%20-o%20%22jsonpath%3D%7B.data.ca%5C.crt%7D%22%20%7C%20base64%20--decode)%22%0Anamespace%3D%22%24(oc%20get%20secret%20-n%20openshift-machine-config-operator%20node-bootstrapper-token%20%20-o%20%22jsonpath%3D%7B.data.namespace%7D%22%20%7C%20base64%20--decode)%22%0Atoken%3D%22%24(oc%20get%20secret%20-n%20openshift-machine-config-operator%20node-bootstrapper-token%20-o%20%22jsonpath%3D%7B.data.token%7D%22%20%7C%20base64%20--decode)%22%0A%0Aexport%20KUBECONFIG%3D%22%24(mktemp)%22%0Akubectl%20config%20set-credentials%20%22kubelet%22%20--token%3D%22%24token%22%20%3E%2Fdev%2Fnull%0Aca_crt%3D%22%24(mktemp)%22%3B%20echo%20%22%24ca_crt_data%22%20%3E%20%24ca_crt%0Akubectl%20config%20set-cluster%20%24cluster%20--server%3D%22%24intapi%22%20--certificate-authority%3D%22%24ca_crt%22%20--embed-certs%20%3E%2Fdev%2Fnull%0Akubectl%20config%20set-context%20kubelet%20--cluster%3D%22%24cluster%22%20--user%3D%22kubelet%22%20%3E%2Fdev%2Fnull%0Akubectl%20config%20use-context%20kubelet%20%3E%2Fdev%2Fnull%0Acat%20%22%24KUBECONFIG%22%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/kubelet-plugins/volume/exec/.dummy",
        "contents": {
          "source": "data:,"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/NetworkManager/dispatcher.d/99-vsphere-disable-tx-udp-tnl",
        "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": "/usr/local/bin/ipsec-connect-wait.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-x%0A%0Aif%20%5B%20!%20-e%20%22%2Fetc%2Fipsec.d%2Fopenshift.conf%22%20%5D%3B%20then%0A%20%20exit%200%0Afi%0A%0A%23%20Modify%20existing%20IPsec%20out%20connection%20entries%20with%20%22auto%3Dstart%22%0A%23%20option%20and%20restart%20ipsec%20systemd%20service.%20This%20helps%20to%0A%23%20establish%20IKE%20SAs%20for%20the%20existing%20IPsec%20connections%20with%0A%23%20peer%20nodes.%20This%20option%20will%20be%20deleted%20from%20connections%0A%23%20once%20ovs-monitor-ipsec%20process%20spinned%20up%20on%20the%20node%20by%0A%23%20ovn-ipsec-host%20pod%2C%20but%20still%20it%20won't%20reestablish%20IKE%20SAs%0A%23%20again%20with%20peer%20nodes%2C%20so%20it%20shouldn't%20be%20a%20problem.%0A%23%20We%20are%20updating%20only%20out%20connections%20with%20%22auto%3Dstart%22%20to%0A%23%20avoid%20cross%20stream%20issue%20with%20Libreswan%205.2.%0A%23%20The%20in%20connections%20use%20default%20auto%3Droute%20parameter.%0Aif%20!%20grep%20-q%20%22auto%3Dstart%22%20%2Fetc%2Fipsec.d%2Fopenshift.conf%3B%20then%0A%20%20sed%20-i%20'%2F%5E.*conn%20ovn.*-out-1%24%2Fa%5C%20%20%20%20auto%3Dstart'%20%2Fetc%2Fipsec.d%2Fopenshift.conf%0Afi%0Achroot%20%2Fproc%2F1%2Froot%20ipsec%20restart%0A%0A%23%20Wait%20for%20upto%2060s%20to%20get%20IPsec%20SAs%20to%20establish%20with%20peer%20nodes.%0Atimeout%3D60%0Aelapsed%3D0%0Adesiredconn%3D%22%22%0Aestablishedsa%3D%22%22%0Awhile%20%5B%5B%20%24elapsed%20-lt%20%24timeout%20%5D%5D%3B%20do%0A%20%20desiredconn%3D%24(grep%20-E%20'%5E%5Cs*conn%5Cs%2B'%20%2Fetc%2Fipsec.d%2Fopenshift.conf%20%7C%20grep%20-v%20'%25default'%20%7C%20awk%20'%7Bprint%20%242%7D'%20%7C%20tr%20'%20'%20'%5Cn'%20%7C%20sort%20%7C%20tr%20'%5Cn'%20'%20')%0A%20%20establishedsa%3D%24(ipsec%20showstates%20%7C%20grep%20ESTABLISHED_CHILD_SA%20%7C%20grep%20-o%20'%22%5B%5E%22%5D*%22'%20%7C%20sed%20's%2F%22%2F%2Fg'%20%7C%20tr%20'%20'%20'%5Cn'%20%7C%20sort%20%7C%20uniq%20%7C%20tr%20'%5Cn'%20'%20')%0A%20%20if%20%5B%20%22%24desiredconn%22%20%3D%3D%20%22%24establishedsa%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22IPsec%20SAs%20are%20established%20for%20desired%20connections%20after%20%24%7Belapsed%7Ds%22%0A%20%20%20%20break%0A%20%20else%0A%20%20%20%20echo%20%22IPsec%20SAs%20are%20not%20established%20yet%2C%20total%20waited%20time%20%24%7Belapsed%7Ds%22%0A%20%20%20%20sleep%202s%0A%20%20fi%0A%20%20elapsed%3D%24((elapsed%20%2B%202))%0Adone%0A%0Aif%20%5B%5B%20%24elapsed%20-ge%20%24timeout%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22Timed%20out%20waiting%2C%20some%20connections%20are%20not%20established%2C%20desired%20conns%20%24desiredconn%2C%20established%20conns%20%24establishedsa%22%0Afi%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/usr/local/bin/wait-for-primary-ip.sh",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fbash%0Aset%20-eux%0A%0Aif%20%5B%20!%20-e%20%2Fetc%2Fnmstate%2Fopenshift%2Fapplied%20%5D%3B%20then%0A%20%20%23%20No%20need%20to%20do%20this%20if%20no%20NMState%20configuration%20was%20applied%0A%20%20exit%200%0Afi%0A%0A%23%20This%20logic%20is%20borrowed%20from%20configure-ovs.sh%0A%23%20TODO%3A%20Find%20a%20platform-agnostic%20way%20to%20do%20this.%20It%20won't%20work%20on%20platforms%20where%0A%23%20nodeip-configuration%20is%20not%20used.%0Aip%3D%24(cat%20%2Frun%2Fnodeip-configuration%2Fprimary-ip)%0Aif%20%5B%5B%20%22%24%7Bip%7D%22%20%3D%3D%20%22%22%20%5D%5D%3B%20then%0A%20%20echo%20%22No%20ip%20to%20bind%20was%20found%22%0A%20%20exit%201%0Afi%0Awhile%20%3A%0Ado%0A%20%20random_port%3D%24(shuf%20-i%2050000-60000%20-n%201)%0A%20%20echo%20%22Trying%20to%20bind%20%24%7Bip%7D%20on%20port%20%24%7Brandom_port%7D%22%0A%20%20exit_code%3D%24(timeout%202s%20nc%20-l%20%22%24%7Bip%7D%22%20%24%7Brandom_port%7D%3B%20echo%20%24%3F)%0A%20%20if%20%5B%5B%20exit_code%20-eq%20124%20%5D%5D%3B%20then%0A%20%20%20%20echo%20%22Address%20bound%20successfully%22%0A%20%20%20%20exit%200%0A%20%20fi%0A%20%20sleep%2010%0Adone%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/containers/registries.conf",
        "contents": {
          "source": "data:,unqualified-search-registries%20%3D%20%5B'registry.access.redhat.com'%2C%20'docker.io'%5D%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/crio/crio.conf.d/00-default",
        "contents": {
          "source": "data:,%5Bcrio%5D%0Ainternal_wipe%20%3D%20true%0Ainternal_repair%20%3D%20true%0A%0A%5Bcrio.api%5D%0Astream_address%20%3D%20%22127.0.0.1%22%0Astream_port%20%3D%20%220%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%0Adefault_runtime%20%3D%20%22crun%22%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.runtimes.runc%5D%0Aruntime_root%20%3D%20%22%2Frun%2Frunc%22%0Aallowed_annotations%20%3D%20%5B%0A%20%20%20%20%22io.containers.trace-syscall%22%2C%0A%20%20%20%20%22io.kubernetes.cri-o.Devices%22%2C%0A%20%20%20%20%22io.kubernetes.cri-o.LinkLogs%22%2C%0A%5D%0A%0A%5Bcrio.runtime.runtimes.crun%5D%0Aruntime_root%20%3D%20%22%2Frun%2Fcrun%22%0Aallowed_annotations%20%3D%20%5B%0A%20%20%20%20%22io.containers.trace-syscall%22%2C%0A%20%20%20%20%22io.kubernetes.cri-o.Devices%22%2C%0A%20%20%20%20%22io.kubernetes.cri-o.LinkLogs%22%2C%0A%5D%0A%23%20Based%20on%20https%3A%2F%2Fgithub.com%2Fcontainers%2Fcrun%2Fblob%2F27d7dd3a0%2FREADME.md%3Fplain%3D1%23L48%0Acontainer_min_memory%20%3D%20%22512KiB%22%0Adefault_annotations%20%3D%20%7B%22run.oci.systemd.subgroup%22%20%3D%20%22%22%7D%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%2Fokd%2Fscos-content%40sha256%3A058d0e796625c199c05985db1f376ddec0314db80902e0d6af5a1a9700986602%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%0Aoci_artifact_mount_support%20%3D%20false%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%5D%0A%0A%5Bcrio.metrics%5D%0Aenable_metrics%20%3D%20true%0Ametrics_host%20%3D%20%22127.0.0.1%22%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/machine-config-daemon/policy-for-old-podman.json",
        "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%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/containers/policy.json",
        "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/kubernetes/cloud.conf",
        "contents": {
          "source": "data:,"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/crio-metrics-proxy.cfg",
        "contents": {
          "source": "data:,authorization%3A%0A%20%20static%3A%0A%20%20%20%20-%20resourceRequest%3A%20false%0A%20%20%20%20%20%20path%3A%20%2Fmetrics%0A%20%20%20%20%20%20verb%3A%20get%0A%20%20%20%20%20%20user%3A%0A%20%20%20%20%20%20%20%20name%3A%20system%3Aserviceaccount%3Aopenshift-monitoring%3Aprometheus-k8s"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/manifests/criometricsproxy.yaml",
        "contents": {
          "source": "data:,apiVersion%3A%20v1%0Akind%3A%20Pod%0Ametadata%3A%0A%20%20name%3A%20kube-rbac-proxy-crio%0A%20%20namespace%3A%20openshift-machine-config-operator%0A%20%20labels%3A%0A%20%20%20%20k8s-app%3A%20kube-rbac-proxy-crio%0A%20%20annotations%3A%0A%20%20%20%20target.workload.openshift.io%2Fmanagement%3A%20'%7B%22effect%22%3A%20%22PreferredDuringScheduling%22%7D'%0A%20%20%20%20openshift.io%2Frequired-scc%3A%20privileged%0Aspec%3A%0A%20%20volumes%3A%0A%20%20-%20name%3A%20etc-kube%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fetc%2Fkubernetes%22%0A%20%20-%20name%3A%20var-lib-kubelet%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20hostNetwork%3A%20true%0A%20%20priorityClassName%3A%20system-cluster-critical%0A%20%20initContainers%3A%0A%20%20-%20name%3A%20setup%0A%20%20%20%20terminationMessagePolicy%3A%20FallbackToLogsOnError%0A%20%20%20%20image%3A%20quay.io%2Fokd%2Fscos-content%40sha256%3Aaa36c472584a0c689573eda62e425ebb25452b2a33c5254287950407d4f67f69%0A%20%20%20%20imagePullPolicy%3A%20IfNotPresent%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20var-lib-kubelet%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%22%0A%20%20%20%20%20%20mountPropagation%3A%20HostToContainer%0A%20%20%20%20command%3A%20%5B'%2Fbin%2Fbash'%2C%20'-ec'%5D%0A%20%20%20%20args%3A%0A%20%20%20%20-%20%7C%0A%20%20%20%20%20%20echo%20-n%20%22Waiting%20for%20kubelet%20key%20and%20certificate%20to%20be%20available%22%0A%20%20%20%20%20%20while%20%5B%20-n%20%22%24(test%20-e%20%2Fvar%2Flib%2Fkubelet%2Fpki%2Fkubelet-server-current.pem)%22%20%5D%20%3B%20do%0A%20%20%20%20%20%20%20%20echo%20-n%20%22.%22%0A%20%20%20%20%20%20%20%20sleep%201%0A%20%20%20%20%20%20%20%20((%20tries%20%2B%3D%201%20))%0A%20%20%20%20%20%20%20%20if%20%5B%5B%20%22%24%7Btries%7D%22%20-gt%2010%20%5D%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20echo%20%22Timed%20out%20waiting%20for%20kubelet%20key%20and%20cert.%22%0A%20%20%20%20%20%20%20%20%20%20exit%201%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20%20%20done%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20memory%3A%2050Mi%0A%20%20%20%20%20%20%20%20cpu%3A%205m%0A%20%20containers%3A%0A%20%20-%20name%3A%20kube-rbac-proxy-crio%0A%20%20%20%20image%3A%20quay.io%2Fokd%2Fscos-content%40sha256%3Aaa36c472584a0c689573eda62e425ebb25452b2a33c5254287950407d4f67f69%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20privileged%3A%20true%0A%20%20%20%20ports%3A%0A%20%20%20%20-%20containerPort%3A%209637%0A%20%20%20%20args%3A%0A%20%20%20%20-%20--secure-listen-address%3D%3A9637%0A%20%20%20%20-%20--config-file%3D%2Fetc%2Fkubernetes%2Fcrio-metrics-proxy.cfg%0A%20%20%20%20-%20--client-ca-file%3D%2Fetc%2Fkubernetes%2Fkubelet-ca.crt%0A%20%20%20%20-%20--logtostderr%3Dtrue%0A%20%20%20%20-%20--kubeconfig%3D%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%0A%20%20%20%20-%20--tls-cipher-suites%3DTLS_AES_128_GCM_SHA256%2CTLS_AES_256_GCM_SHA384%2CTLS_CHACHA20_POLY1305_SHA256%2CTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256%2CTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256%2CTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384%2CTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384%2CTLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256%2CTLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256%20%0A%20%20%20%20-%20--tls-min-version%3DVersionTLS12%0A%20%20%20%20-%20--upstream%3Dhttp%3A%2F%2F127.0.0.1%3A9537%0A%20%20%20%20-%20--tls-cert-file%3D%2Fvar%2Flib%2Fkubelet%2Fpki%2Fkubelet-server-current.pem%0A%20%20%20%20-%20--tls-private-key-file%3D%2Fvar%2Flib%2Fkubelet%2Fpki%2Fkubelet-server-current.pem%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20cpu%3A%2020m%0A%20%20%20%20%20%20%20%20memory%3A%2050Mi%0A%20%20%20%20terminationMessagePolicy%3A%20FallbackToLogsOnError%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20etc-kube%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fetc%2Fkubernetes%22%0A%20%20%20%20%20%20mountPropagation%3A%20HostToContainer%0A%20%20%20%20%20%20readOnly%3A%20true%0A%20%20%20%20-%20name%3A%20var-lib-kubelet%0A%20%20%20%20%20%20mountPath%3A%20%22%2Fvar%2Flib%2Fkubelet%22%0A%20%20%20%20%20%20mountPropagation%3A%20HostToContainer%0A%20%20%20%20%20%20readOnly%3A%20true"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/kubelet.conf",
        "contents": {
          "source": "data:text/plain;charset=utf-8;base64,YXBpVmVyc2lvbjoga3ViZWxldC5jb25maWcuazhzLmlvL3YxYmV0YTEKYXV0aGVudGljYXRpb246CiAgYW5vbnltb3VzOgogICAgZW5hYmxlZDogZmFsc2UKICB3ZWJob29rOgogICAgY2FjaGVUVEw6IDBzCiAgeDUwOToKICAgIGNsaWVudENBRmlsZTogL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQtY2EuY3J0CmF1dGhvcml6YXRpb246CiAgd2ViaG9vazoKICAgIGNhY2hlQXV0aG9yaXplZFRUTDogMHMKICAgIGNhY2hlVW5hdXRob3JpemVkVFRMOiAwcwpjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKY2dyb3VwUm9vdDogLwpjbHVzdGVyRE5TOgotIDE3Mi4zMC4wLjEwCmNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKY29udGFpbmVyTG9nTWF4U2l6ZTogNTBNaQpjb250YWluZXJSdW50aW1lRW5kcG9pbnQ6ICIiCmNwdU1hbmFnZXJSZWNvbmNpbGVQZXJpb2Q6IDBzCmNyYXNoTG9vcEJhY2tPZmY6IHt9CmVuYWJsZVN5c3RlbUxvZ1F1ZXJ5OiB0cnVlCmV2aWN0aW9uUHJlc3N1cmVUcmFuc2l0aW9uUGVyaW9kOiAwcwpmYWlsU3dhcE9uOiB0cnVlCmZlYXR1cmVHYXRlczoKICBBV1NDbHVzdGVySG9zdGVkRE5TOiBmYWxzZQogIEFXU0NsdXN0ZXJIb3N0ZWRETlNJbnN0YWxsOiBmYWxzZQogIEFXU0RlZGljYXRlZEhvc3RzOiBmYWxzZQogIEFXU0R1YWxTdGFja0luc3RhbGw6IGZhbHNlCiAgQVdTU2VydmljZUxCTmV0d29ya1NlY3VyaXR5R3JvdXA6IGZhbHNlCiAgQWRkaXRpb25hbFJvdXRpbmdDYXBhYmlsaXRpZXM6IHRydWUKICBBZG1pbk5ldHdvcmtQb2xpY3k6IHRydWUKICBBbGliYWJhUGxhdGZvcm06IHRydWUKICBBdXRvbWF0ZWRFdGNkQmFja3VwOiBmYWxzZQogIEF6dXJlQ2x1c3Rlckhvc3RlZEROU0luc3RhbGw6IGZhbHNlCiAgQXp1cmVEZWRpY2F0ZWRIb3N0czogZmFsc2UKICBBenVyZUR1YWxTdGFja0luc3RhbGw6IGZhbHNlCiAgQXp1cmVNdWx0aURpc2s6IGZhbHNlCiAgQXp1cmVXb3JrbG9hZElkZW50aXR5OiB0cnVlCiAgQm9vdEltYWdlU2tld0VuZm9yY2VtZW50OiBmYWxzZQogIEJvb3RjTm9kZU1hbmFnZW1lbnQ6IGZhbHNlCiAgQnVpbGRDU0lWb2x1bWVzOiB0cnVlCiAgQ0JPUlNlcnZpbmdBbmRTdG9yYWdlOiBmYWxzZQogIENQTVNNYWNoaW5lTmFtZVByZWZpeDogdHJ1ZQogIENSRENvbXBhdGliaWxpdHlSZXF1aXJlbWVudE9wZXJhdG9yOiBmYWxzZQogIENsaWVudHNBbGxvd0NCT1I6IGZhbHNlCiAgQ2xpZW50c1ByZWZlckNCT1I6IGZhbHNlCiAgQ2x1c3RlckFQSUluc3RhbGw6IGZhbHNlCiAgQ2x1c3RlckFQSUluc3RhbGxJQk1DbG91ZDogZmFsc2UKICBDbHVzdGVyQVBJTWFjaGluZU1hbmFnZW1lbnQ6IGZhbHNlCiAgQ2x1c3RlckFQSU1hY2hpbmVNYW5hZ2VtZW50VlNwaGVyZTogZmFsc2UKICBDbHVzdGVyTW9uaXRvcmluZ0NvbmZpZzogZmFsc2UKICBDbHVzdGVyVmVyc2lvbk9wZXJhdG9yQ29uZmlndXJhdGlvbjogZmFsc2UKICBDb25zb2xlUGx1Z2luQ29udGVudFNlY3VyaXR5UG9saWN5OiB0cnVlCiAgRE5TTmFtZVJlc29sdmVyOiBmYWxzZQogIER1YWxSZXBsaWNhOiBmYWxzZQogIER5YW5taWNTZXJ2aWNlRW5kcG9pbnRJQk1DbG91ZDogZmFsc2UKICBFdGNkQmFja2VuZFF1b3RhOiBmYWxzZQogIEV2ZW50VFRMOiBmYWxzZQogIEV2ZW50ZWRQTEVHOiBmYWxzZQogIEV4YW1wbGU6IGZhbHNlCiAgRXhhbXBsZTI6IGZhbHNlCiAgRXh0ZXJuYWxPSURDOiB0cnVlCiAgRXh0ZXJuYWxPSURDV2l0aFVJREFuZEV4dHJhQ2xhaW1NYXBwaW5nczogdHJ1ZQogIEV4dGVybmFsU25hcHNob3RNZXRhZGF0YTogZmFsc2UKICBHQ1BDbHVzdGVySG9zdGVkRE5TOiBmYWxzZQogIEdDUENsdXN0ZXJIb3N0ZWRETlNJbnN0YWxsOiB0cnVlCiAgR0NQQ3VzdG9tQVBJRW5kcG9pbnRzOiBmYWxzZQogIEdDUEN1c3RvbUFQSUVuZHBvaW50c0luc3RhbGw6IGZhbHNlCiAgR0NQRHVhbFN0YWNrSW5zdGFsbDogZmFsc2UKICBHYXRld2F5QVBJOiB0cnVlCiAgR2F0ZXdheUFQSUNvbnRyb2xsZXI6IHRydWUKICBIaWdobHlBdmFpbGFibGVBcmJpdGVyOiB0cnVlCiAgSHlwZXJTaGlmdE9ubHlEeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uOiBmYWxzZQogIEltYWdlTW9kZVN0YXR1c1JlcG9ydGluZzogZmFsc2UKICBJbWFnZVN0cmVhbUltcG9ydE1vZGU6IHRydWUKICBJbWFnZVZvbHVtZTogdHJ1ZQogIEluZ3Jlc3NDb250cm9sbGVyRHluYW1pY0NvbmZpZ3VyYXRpb25NYW5hZ2VyOiBmYWxzZQogIEluc2lnaHRzQ29uZmlnOiBmYWxzZQogIEluc2lnaHRzT25EZW1hbmREYXRhR2F0aGVyOiBmYWxzZQogIElycmVjb25jaWxhYmxlTWFjaGluZUNvbmZpZzogZmFsc2UKICBLTVNFbmNyeXB0aW9uUHJvdmlkZXI6IGZhbHNlCiAgS01TdjE6IHRydWUKICBNYWNoaW5lQVBJTWlncmF0aW9uOiBmYWxzZQogIE1hY2hpbmVBUElPcGVyYXRvckRpc2FibGVNYWNoaW5lSGVhbHRoQ2hlY2tDb250cm9sbGVyOiBmYWxzZQogIE1hY2hpbmVDb25maWdOb2RlczogdHJ1ZQogIE1hbmFnZWRCb290SW1hZ2VzOiB0cnVlCiAgTWFuYWdlZEJvb3RJbWFnZXNBV1M6IHRydWUKICBNYW5hZ2VkQm9vdEltYWdlc0F6dXJlOiB0cnVlCiAgTWFuYWdlZEJvb3RJbWFnZXNDUE1TOiBmYWxzZQogIE1hbmFnZWRCb290SW1hZ2VzdlNwaGVyZTogdHJ1ZQogIE1heFVuYXZhaWxhYmxlU3RhdGVmdWxTZXQ6IGZhbHNlCiAgTWV0cmljc0NvbGxlY3Rpb25Qcm9maWxlczogdHJ1ZQogIE1pbmltdW1LdWJlbGV0VmVyc2lvbjogZmFsc2UKICBNaXhlZENQVXNBbGxvY2F0aW9uOiBmYWxzZQogIE11bHRpQXJjaEluc3RhbGxBenVyZTogZmFsc2UKICBNdWx0aURpc2tTZXR1cDogZmFsc2UKICBNdXRhYmxlQ1NJTm9kZUFsbG9jYXRhYmxlQ291bnQ6IGZhbHNlCiAgTXV0YXRpbmdBZG1pc3Npb25Qb2xpY3k6IGZhbHNlCiAgTmV0d29ya0RpYWdub3N0aWNzQ29uZmlnOiB0cnVlCiAgTmV0d29ya0xpdmVNaWdyYXRpb246IHRydWUKICBOZXR3b3JrU2VnbWVudGF0aW9uOiB0cnVlCiAgTmV3T0xNOiB0cnVlCiAgTmV3T0xNQm94Q3V0dGVyUnVudGltZTogZmFsc2UKICBOZXdPTE1DYXRhbG9nZEFQSVYxTWV0YXM6IGZhbHNlCiAgTmV3T0xNT3duU2luZ2xlTmFtZXNwYWNlOiBmYWxzZQogIE5ld09MTVByZWZsaWdodFBlcm1pc3Npb25DaGVja3M6IGZhbHNlCiAgTmV3T0xNV2ViaG9va1Byb3ZpZGVyT3BlbnNoaWZ0U2VydmljZUNBOiB0cnVlCiAgTm9SZWdpc3RyeUNsdXN0ZXJJbnN0YWxsOiBmYWxzZQogIE51dGFuaXhNdWx0aVN1Ym5ldHM6IGZhbHNlCiAgT1NTdHJlYW1zOiBmYWxzZQogIE9WTk9ic2VydmFiaWxpdHk6IGZhbHNlCiAgT25QcmVtRE5TUmVjb3JkczogZmFsc2UKICBPcGVuU2hpZnRQb2RTZWN1cml0eUFkbWlzc2lvbjogZmFsc2UKICBQaW5uZWRJbWFnZXM6IHRydWUKICBQcmVjb25maWd1cmVkVUROQWRkcmVzc2VzOiB0cnVlCiAgUHJvY01vdW50VHlwZTogdHJ1ZQogIFByb3Zpc2lvbmluZ1JlcXVlc3RBdmFpbGFibGU6IGZhbHNlCiAgUm91dGVBZHZlcnRpc2VtZW50czogdHJ1ZQogIFJvdXRlRXh0ZXJuYWxDZXJ0aWZpY2F0ZTogdHJ1ZQogIFNFTGludXhNb3VudDogZmFsc2UKICBTZXJ2aWNlQWNjb3VudFRva2VuTm9kZUJpbmRpbmc6IHRydWUKICBTaG9ydENlcnRSb3RhdGlvbjogZmFsc2UKICBTaWduYXR1cmVTdG9yZXM6IGZhbHNlCiAgU2lnc3RvcmVJbWFnZVZlcmlmaWNhdGlvbjogdHJ1ZQogIFNpZ3N0b3JlSW1hZ2VWZXJpZmljYXRpb25QS0k6IHRydWUKICBTdG9yYWdlUGVyZm9ybWFudFNlY3VyaXR5UG9saWN5OiB0cnVlCiAgVHJhbnNsYXRlU3RyZWFtQ2xvc2VXZWJzb2NrZXRSZXF1ZXN0czogZmFsc2UKICBVcGdyYWRlU3RhdHVzOiB0cnVlCiAgVXNlck5hbWVzcGFjZXNQb2RTZWN1cml0eVN0YW5kYXJkczogdHJ1ZQogIFVzZXJOYW1lc3BhY2VzU3VwcG9ydDogdHJ1ZQogIFZTcGhlcmVDb25maWd1cmFibGVNYXhBbGxvd2VkQmxvY2tWb2x1bWVzUGVyTm9kZTogZmFsc2UKICBWU3BoZXJlSG9zdFZNR3JvdXBab25hbDogZmFsc2UKICBWU3BoZXJlTWl4ZWROb2RlRW52OiBmYWxzZQogIFZTcGhlcmVNdWx0aURpc2s6IHRydWUKICBWU3BoZXJlTXVsdGlOZXR3b3JrczogdHJ1ZQogIFZvbHVtZUF0dHJpYnV0ZXNDbGFzczogdHJ1ZQogIFZvbHVtZUdyb3VwU25hcHNob3Q6IGZhbHNlCmZpbGVDaGVja0ZyZXF1ZW5jeTogMHMKaHR0cENoZWNrRnJlcXVlbmN5OiAwcwppbWFnZU1heGltdW1HQ0FnZTogMHMKaW1hZ2VNaW5pbXVtR0NBZ2U6IDBzCmtpbmQ6IEt1YmVsZXRDb25maWd1cmF0aW9uCmt1YmVBUElCdXJzdDogMTAwCmt1YmVBUElRUFM6IDUwCmxvZ2dpbmc6CiAgZmx1c2hGcmVxdWVuY3k6IDAKICBvcHRpb25zOgogICAganNvbjoKICAgICAgaW5mb0J1ZmZlclNpemU6ICIwIgogICAgdGV4dDoKICAgICAgaW5mb0J1ZmZlclNpemU6ICIwIgogIHZlcmJvc2l0eTogMAptYXhQb2RzOiAyNTAKbWVtb3J5U3dhcDoKICBzd2FwQmVoYXZpb3I6IE5vU3dhcApub2RlU3RhdHVzUmVwb3J0RnJlcXVlbmN5OiA1bTBzCm5vZGVTdGF0dXNVcGRhdGVGcmVxdWVuY3k6IDEwcwpwb2RQaWRzTGltaXQ6IDQwOTYKcHJvdGVjdEtlcm5lbERlZmF1bHRzOiB0cnVlCnJvdGF0ZUNlcnRpZmljYXRlczogdHJ1ZQpydW50aW1lUmVxdWVzdFRpbWVvdXQ6IDBzCnNlcmlhbGl6ZUltYWdlUHVsbHM6IGZhbHNlCnNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQpzaHV0ZG93bkdyYWNlUGVyaW9kOiAwcwpzaHV0ZG93bkdyYWNlUGVyaW9kQ3JpdGljYWxQb2RzOiAwcwpzdGF0aWNQb2RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCnN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dDogMHMKc3luY0ZyZXF1ZW5jeTogMHMKc3lzdGVtQ2dyb3VwczogL3N5c3RlbS5zbGljZQp0bHNDaXBoZXJTdWl0ZXM6Ci0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgotIFRMU19BRVNfMjU2X0dDTV9TSEEzODQKLSBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2Ci0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2Ci0gVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgotIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAotIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKLSBUTFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2CnRsc01pblZlcnNpb246IFZlcnNpb25UTFMxMgp2b2x1bWVTdGF0c0FnZ1BlcmlvZDogMHMK"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/usr/local/bin/kubenswrapper",
        "contents": {
          "source": "data:,%23!%2Fbin%2Fsh%0Aif%20%5B%20-x%20%2Fusr%2Fbin%2Fkubensenter%20%5D%3B%20then%0A%20%20exec%20%2Fusr%2Fbin%2Fkubensenter%20%22%24%40%22%0Aelse%0A%20%20exec%20%22%24%40%22%0Afi%0A"
        },
        "mode": 493
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/kubelet-ca.crt",
        "contents": {
          "source": "data:,-----BEGIN%20CERTIFICATE-----%0AMIIDMDCCAhigAwIBAgIISk37U3vf9A0wDQYJKoZIhvcNAQELBQAwNjESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSAwHgYDVQQDExdhZG1pbi1rdWJlY29uZmlnLXNpZ25lcjAe%0AFw0yNjA1MDcwOTAzNTNaFw0zNjA1MDQwOTAzNTNaMDYxEjAQBgNVBAsTCW9wZW5z%0AaGlmdDEgMB4GA1UEAxMXYWRtaW4ta3ViZWNvbmZpZy1zaWduZXIwggEiMA0GCSqG%0ASIb3DQEBAQUAA4IBDwAwggEKAoIBAQD2dHLrSx%2BLO1EQPPIiOyXpbBGw7TkKQ9LD%0AgRaYVu4udZqWN7G9%2FfZEP%2FbHfkoNa%2BEftfLcCm5K%2FRof42e7FTebIDWByIM54pp%2F%0Ac%2BaV5HkxtRArPFxQwmksmIXBk0CCfeX0BdKXwcTnEF0o%2FbTrv30gOYXTiA1S6sKV%0AMCb9j6EbMmq40Fg8fZee5FIlzzYLs%2BsC5thHJgyHgnfXeg0smu3Wc%2FF%2FJqmzLwNy%0AJVSxdOXUG1j1wMd8oM%2Fwv6hK8dckkmy7h2%2BdgT6UcGe18YNdDNTl230yFrjlEt73%0AtSiOI4qyxr39fodTXGm9f2igt0CFhueF%2BEMDqVsb0iIvMh3T4urtAgMBAAGjQjBA%0AMA4GA1UdDwEB%2FwQEAwICpDAPBgNVHRMBAf8EBTADAQH%2FMB0GA1UdDgQWBBQMs6gC%0AykbAZ%2B9gye95dc5cFOhRujANBgkqhkiG9w0BAQsFAAOCAQEAzrWnlTVc335FxZCQ%0AHHtuY%2BOupjhCX7B3kX4FISxBuylH4dCOxoKUTdptnChwMBNrH1oQqIBA341pK%2BKp%0A2Q3%2FlOspvU%2B6B1Ng043I6xB68DB%2BL%2BxbgoEbjT3%2FZU3RjEoMhIS4TWS2AK2ICSo4%0AFa726sEJrMMqIfFMlJMPe8n9xuMOgVBUqLVZ9L5J00pdfcj5BigTsIg14kaGzHRm%0ARygWF%2B7rAfwIpjvD5UKaqodnic8drdaq%2B%2BbeZ8gcjkwLuOSDodTjKCPW7YP2Avgs%0AVNiYJav4DxTIoKxCfeITnKxrPkj4IyQI2Ty9L0jiLjxSCBmCWug5luZmptn43Ttq%0AksJ8Pw%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDHjCCAgagAwIBAgIIXw7FRcBcTEswDQYJKoZIhvcNAQELBQAwLTESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MRcwFQYDVQQDEw5rdWJlbGV0LXNpZ25lcjAeFw0yNjA1MDcw%0AOTAzNTVaFw0yNjA1MDgwOTAzNTVaMC0xEjAQBgNVBAsTCW9wZW5zaGlmdDEXMBUG%0AA1UEAxMOa3ViZWxldC1zaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK%0AAoIBAQDWSs5clRxNbe1U9bh5gjoMjtksMo4bF%2FIWkTDTlMfZ0n28kJtI%2Fd7Z4mmA%0ADPoNWSuxVKm4M7KJXIPsJyx4jXaD9SoLdQBAZo%2FXoLQHXtFHtvbN8rqKVFe8Jp%2FY%0AIhlDSDs37MQJs52AAOGTxq702eho%2BfstiC1cr87Mbjamhb%2BjoY0uWwYMYiN1eqYx%0Ayc%2BcC1fIsOe5BLs422T421BjOabmDgBN19ZaT9%2BrdTBNoK%2FG8gf%2F60v9qcpLQOFU%0AW%2BnKpCBp2m0OoR9qAws%2F5OiaYDkL4KiLOQwbRHZi50rgvvt22deq%2FsMaXQGYWzG%2B%0ALFa%2F%2BKz1ZLcugyTEMG1Ev8vdjI2nAgMBAAGjQjBAMA4GA1UdDwEB%2FwQEAwICpDAP%0ABgNVHRMBAf8EBTADAQH%2FMB0GA1UdDgQWBBRrs2C62POPYJFcff%2FbabYiMFN7zjAN%0ABgkqhkiG9w0BAQsFAAOCAQEA1Vj%2F%2F0tS1Tf7iK%2FegSvS9m1ZpIEfltm1wHtoBGPT%0AzVAz02WOW7hbJnCv0y1EsvF9yNK6lhb3ZUif7b7pTN1Mrr6fBH1EBW2KEJvdcLkA%0A%2BQ8bC8oqdAcfvFubZAa4K7G2JUp0hW1bD9ItvqdFSryZM%2BCoW35J33zMRDSTY65G%0AxyoAXHA8zZrT3kbcx9N1Sq8fuqwJ8v5IEXHAtSlZCqWCPeCaXmfxXzgU%2FbOCea%2Bn%0AfzzNrvxTok0UGsxDf1PkvH3qAjHIsz0J2Bb8Ri0QV%2B%2FoaD%2Fmwun3beruTejOeX3z%0Ak2LANmLbdWyb7R3dBlvrpQoKKTXQyHR4n%2FnvF04s76ExtQ%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDNDCCAhygAwIBAgIIdeaxaxD7WigwDQYJKoZIhvcNAQELBQAwODESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSIwIAYDVQQDExlrdWJlLWNvbnRyb2wtcGxhbmUtc2lnbmVy%0AMB4XDTI2MDUwNzA5MDM1NVoXDTI3MDUwNzA5MDM1NVowODESMBAGA1UECxMJb3Bl%0AbnNoaWZ0MSIwIAYDVQQDExlrdWJlLWNvbnRyb2wtcGxhbmUtc2lnbmVyMIIBIjAN%0ABgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvIbdgUb8BMEM1EXRT%2BclqZX62qpy%0AMvfwrihVzPJTMEveQ6FFloBbzm7tKiVD20hUmwUWWkyVUkWHt8uDCssukiby9zZy%0ApF3KIEXQus4%2BcEhYs%2B7AOwa4hmmIdzFqgs4w5HV3LmIYQrKkRvLKelfnczjqAy0O%0AH5HQT0OGCaXZNGkJCNIGDqylciK%2FF5UmkrTIiTJaZuon1a6DCFdiKATMKh9ugWxH%0A6Wx1jfNIO2JgbsexpyHa0AKLQqFDH6WaYuVl9A373Sc2wmk20yCjCKE%2F%2BHENCWo7%0A6xu4Ji97LCwpgwKKD6XEDxaOT0QMwQGehyR63y8wxqg%2B01cfDe%2F86Cd2SwIDAQAB%0Ao0IwQDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH%2FBAUwAwEB%2FzAdBgNVHQ4EFgQU%0AhWIM9C%2B%2Fd97Bf%2BXTiQdrLs0hHGgwDQYJKoZIhvcNAQELBQADggEBAFh9eCq7fJNl%0AsvD3zpCwy8mJ7ikuPvEzAqJF%2FSoI%2F3S9ieJlhNDxlc40vnRCuOja%2B1%2BqOLI5jMhw%0AiAzc2sinodOnVImJRiVpXBxHIDtQdjomz2LkyvL7Xbp%2BX5gcDi0LP9wH2VXwKJPQ%0ARyR2Y0qTj13Cgi4cpaPJdL9dRfS9eP3vz8%2BuAiyuSYb17dYTCCoNNOsTHKJaLIaV%0ACKBly7LnJKkrEFWBPczGFPOmBYe9RWXsIHTAcVUmuitJLaMYMkJKgCUrzqiBoqQq%0AzZDopwk%2Fc%2Bct0HWuftIAA7P9alWmCGbrh8gYa67YK3p8%2BS%2BXKHcLzGGb%2BXMRr7Qy%0Ac2BBwjeiOto%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDQjCCAiqgAwIBAgIIV%2BeHTNDwKZowDQYJKoZIhvcNAQELBQAwPzESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSkwJwYDVQQDEyBrdWJlLWFwaXNlcnZlci10by1rdWJlbGV0%0ALXNpZ25lcjAeFw0yNjA1MDcwOTAzNTVaFw0yNzA1MDcwOTAzNTVaMD8xEjAQBgNV%0ABAsTCW9wZW5zaGlmdDEpMCcGA1UEAxMga3ViZS1hcGlzZXJ2ZXItdG8ta3ViZWxl%0AdC1zaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmC2aieH9m%0AQgGqbCCG8NnT47lKEIGkh8tK59ZLCqQuBCpA%2FTrOnBAQb%2BC1CaHWQ19VvfaKWM1%2B%0A9A0O3rBYK7XqfjJPzkM6obVUSiyh5kLxqr0QYvQOEnNyWhixDJeOULEiOpLoiom6%0AI%2F5hw4OAO8meQfbqoyjBYyiwoIb7EkpQMgHFxlRGP7jaKgbA6dMNyjEAHHd1xa%2FH%0AYvbwoRPwRxJXiZoRpQ2OYITccSkSUQo8WFsQqQGycHIV7U%2Fo6Dqo8eQScYNFvRO5%0ARrg3G6zVMHwaDpIrU4rbyUciJPZt0iXgjwR3O%2BWSsLrDnnZzhjzur45FJDnBaCCl%0Aa1KQonmPpd6jAgMBAAGjQjBAMA4GA1UdDwEB%2FwQEAwICpDAPBgNVHRMBAf8EBTAD%0AAQH%2FMB0GA1UdDgQWBBTN0iUJ3DYb3b5k7h%2Bl6J4eeXhVuDANBgkqhkiG9w0BAQsF%0AAAOCAQEAJSkAqC33PUOorlAoSMwBtQrrDlTEXxZoFTMUcSAqdOcijZVUfx49imh%2B%0AY1g2fbD3tvVv1eGRyoLHEzJploE8y81IiwzNuZZqXQp1OKY7odOM%2FAAl%2FibHHK9C%0AdptpjXXQT5XXhfq%2FRw9dXBcZKqu9F20II4HVa%2B%2BSh%2Fl81F3fC9ouNPyY%2BU8DMcza%0AySNGAyxv4Mo7oPeU8QEury%2BdNl2LU5fD1gZ3wvoCQQ6Wahxpyvuf1sje8lwIxvq6%0Aa0Yexj%2F%2FoAqFL%2FoIzGS7YkXZ74Vyx7q2eYRRp9ioX0vfpgdljtloR95YdqEe8Gri%0AASLWvoZQke4lVx1p%2BbW3X4Uj4u9ZOg%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIIDSDCCAjCgAwIBAgIIVfxtTR7QkfgwDQYJKoZIhvcNAQELBQAwQjESMBAGA1UE%0ACxMJb3BlbnNoaWZ0MSwwKgYDVQQDEyNrdWJlbGV0LWJvb3RzdHJhcC1rdWJlY29u%0AZmlnLXNpZ25lcjAeFw0yNjA1MDcwOTAzNTRaFw0zNjA1MDQwOTAzNTRaMEIxEjAQ%0ABgNVBAsTCW9wZW5zaGlmdDEsMCoGA1UEAxMja3ViZWxldC1ib290c3RyYXAta3Vi%0AZWNvbmZpZy1zaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc%0AgaRUjWceePePyW%2BDFGUGInqvP%2FIknF7V5%2BgV0ZIldpa7Ht3lsHagaIFOgWmG1ORI%0A4PJldCIfluyCE6CTiSiSPtL16KAVkFCrPYrQ7aBxucHCWrpa%2FMHPWCDK%2FN3Stne1%0APCFel3ts9tnIkUwl8UnXpPPA53Duy6g9yitNnufGmDua%2FaORC5jZssfq0R4uwuP9%0AB9ehFMuMFpfcq%2FLkPm1AettL3o8yfrK8bZykjpthGP%2FqwUeNunR2QskcqMW6pkA7%0A6VCVXgKmCwfxILO60dGxRDOo8hcBZWXUbVEzvvjq2AoKTsJfgj6mp2UuVFlRYeBP%0Aq7K6HqksZs1Q8tIcuxJPAgMBAAGjQjBAMA4GA1UdDwEB%2FwQEAwICpDAPBgNVHRMB%0AAf8EBTADAQH%2FMB0GA1UdDgQWBBSTzpNq%2FV7fNlC9WcoBWwn0Yfj%2BbzANBgkqhkiG%0A9w0BAQsFAAOCAQEAg46wQQK5Qoqm6sIglTw4GgfFaQ13KzEQGuJa3P42aCgzfSgE%0AsOvCswLzdKVz2XP0te2LYbg4HUi29oz1CQgOgJ7wYO1gKBfl4WO61%2BzFCm4zKjng%0AtPKcKS62qqTg9HLKzWKs1jQ5AsAXXAlEKLNUq9Iki289K3P2%2B6VPMUcFeZqD8j%2Bs%0A2giKqmxxeWFZmbRPi929JyR%2FJ4T9gdIE5O8pH20jEX0IzZ7DRfzUPdQB6t%2FR2pXu%0ATzXYEYohVXxsKDmMHqxfqv8UO1gF9Z9djhep6Zd1dO7SmzX0i5JgvSmtO55JECZI%0A1%2B4s6ZSdE8GK%2B4kTDjzd91ijnuGRo2P2IS9qyQ%3D%3D%0A-----END%20CERTIFICATE-----%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/machine-config-daemon/node-annotations.json",
        "contents": {
          "source": "data:,%7B%22machineconfiguration.openshift.io%2FcurrentConfig%22%3A%22rendered-master-4c3e25bed87fd10dc43ca0407f833c85%22%2C%22machineconfiguration.openshift.io%2FdesiredConfig%22%3A%22rendered-master-4c3e25bed87fd10dc43ca0407f833c85%22%2C%22machineconfiguration.openshift.io%2Fstate%22%3A%22Done%22%7D"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/kubernetes/kubeconfig",
        "contents": {
          "source": "data:,clusters%3A%0A-%20cluster%3A%0A%20%20%20%20certificate-authority-data%3A%20LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURRRENDQWlpZ0F3SUJBZ0lJV0hZRFFUTGd0VU13RFFZSktvWklodmNOQVFFTEJRQXdQakVTTUJBR0ExVUUKQ3hNSmIzQmxibk5vYVdaME1TZ3dKZ1lEVlFRREV4OXJkV0psTFdGd2FYTmxjblpsY2kxc2IyTmhiR2h2YzNRdApjMmxuYm1WeU1CNFhEVEkyTURVd056QTVNRE0xTTFvWERUTTJNRFV3TkRBNU1ETTFNMW93UGpFU01CQUdBMVVFCkN4TUpiM0JsYm5Ob2FXWjBNU2d3SmdZRFZRUURFeDlyZFdKbExXRndhWE5sY25abGNpMXNiMk5oYkdodmMzUXQKYzJsbmJtVnlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXI3TXprMjRZcGFVdApNVmlaaTlZQjNISEVnVld0RnJWaTBacm9TcUQ3RU9LdUR0bXkxenU5VmhsdG1BNVJVY05vb1FFeC9iNDdWQnZsCmFmMUp4WFp0MVQrWWRwTVNKVlo5ZStMcDBxWFFWNkllZ1FuUy9ySXNmMVJ4MkI1UnZTcVE3ZDNMcHZ3c2kzMnMKSklSNnNESVdEcmFLRk9tbXhtdENmcTFHM2E1ZVhhclhvby9vQzNpeS9TRXFzYmRUQXdVOTBXTzJaM1JyY2pRMApNZWpGUjVHTEJRVVhKOE1vZjNpQzZLRUdybnhETmRRZzBqOWluNjJFajB2V0FTV3ZUZHp6TVNNd1pBd0ZqcUtKClRYZHVsbmFaTFNORXk3bTVQNzhNd1ZnbzNPZDlBcDRQTlZLT2xVcTg0ckNFRThTTEVtSjY2RnhiQlRMc1JacTMKNU8zMUZiL3gxUUlEQVFBQm8wSXdRREFPQmdOVkhROEJBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQgovekFkQmdOVkhRNEVGZ1FVNVREQ2ZBaGNhVlVGREtVVnlUUDdFYldCYTYwd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBS1c0Wks0STlhSTJmM2lndkFoQVdwUXUzaGRJN2daSldHVm1jUStHdkdkK3p5SXhtL3pBTUJ6VlcwZUYKNlFOdE9MM0pnb0lJaitNeE42QzZQcmwyWlVudEt3VWF2eHQvd2xsejM0VHl1bkRINHZwbVJyV0YwWUlaM1diaQpLa3Q4anJybVVQclhnTFpVTGdSMVl0WndEYndnRnFBSENTNVlqNGtielJaSDI3SWNWbnpHUjlJdUl2VWgvRzVGCmN1NWRqR1J5YTVLcmJQeExlYW1GWk9QMk1zNmh5QjhCenhCL2VtcXdRWWxBRjgvc2xWWTZkVHBzNnVRY3hTQXkKbnJ1MjNqMUJsWWJKbVZMZTlDRFZVckptaDFXbXVZYlhjTVNSZllTemk4K0l4Q0o5RWR2azBkbHhmNFNKU2ZMeApMNEFpZ2w2L0tDQlpHY09EOFpVaTBqR1cxanc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURURENDQWpTZ0F3SUJBZ0lJWi9Ra1pIeTAvbUF3RFFZSktvWklodmNOQVFFTEJRQXdSREVTTUJBR0ExVUUKQ3hNSmIzQmxibk5vYVdaME1TNHdMQVlEVlFRREV5VnJkV0psTFdGd2FYTmxjblpsY2kxelpYSjJhV05sTFc1bApkSGR2Y21zdGMybG5ibVZ5TUI0WERUSTJNRFV3TnpBNU1ETTFNMW9YRFRNMk1EVXdOREE1TURNMU0xb3dSREVTCk1CQUdBMVVFQ3hNSmIzQmxibk5vYVdaME1TNHdMQVlEVlFRREV5VnJkV0psTFdGd2FYTmxjblpsY2kxelpYSjIKYVdObExXNWxkSGR2Y21zdGMybG5ibVZ5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQwpBUUVBekJ5RitUNFcvOTRJalUvY3BtTjcvOVp3VWdIekVEQ3BxY3dTeHZiQ3RrSVRMR1NzbUV6OEJ1VDVsbE5oCjlqZEpkeUZSTk9vanh6ME5rclR2ZHU3NVNKT1NNZ3pkMkdoclkyOFo0R1ZaR3B0dFVmQkZYbzRPclpFWTI4UFcKSEFmTm5ZNXdPdTNoV1A0bEpUMHZEcjkrWGZlL21jVVVXWXRkeXFsVUwwVjRERFVrSHJkdnJ1Q2ZmaGZITitseApTSmsvblMvdWtuN2xMb1J2cHVtVjl4bEM4UEZpNVhjQzBLaDN6ZjlTSTNFQjh3SE03RjZud25CdHhyT3NXSGlyCnNKUHpuTklOM09qMHByMTlNSFRQZ1JNVXRLOXp0UmMveWRUSmpOa3dxM0tvYXdCd052b0ppWUJvOFdvSUl0T3IKRXNFaS9MdjFwckRnYUVMM3M1dzFWRXh0TVFJREFRQUJvMEl3UURBT0JnTlZIUThCQWY4RUJBTUNBcVF3RHdZRApWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVp2R2RWak1HWVMrMGpKMXNCU3FhVUZtYTZib3dEUVlKCktvWklodmNOQVFFTEJRQURnZ0VCQUQxNGRxNkN2RDRzbW55OUtBMTc4Ylh3V3BXOFNqdk10YkZtbkZaZks0RCsKT3lLQ1pRRDNrM20vVUE0K25iUkxXTDE5QXdMT3I0TzJsNjRtdUFGVUFNcmIrNG9iNWFtbkJ2aDhnOURGUDhzSApFcUpOZEdZVGVKYjd4eXpLSTV4MCtMbU9jL3ZqcG00MVhQbjBqU2pWTG05am1Od20xL1BKMGlyelh6ZVQ4SE12CnZaazdtbllNZHN1U0ZBU2g5OHRWanVxY1pNUDVxaWpMbnNRVFZ3NjI3YkcvY2c4TXNFUHpyanBqMC9HUXhJdHMKbDJRY0Jyb1J5dnZDWVVGaEdiNHg0a2I1NTIyVmVuUTBJeVpmN0ExcTB1eDg5aXYwdUZXdi9SVmQrZFBBbU5vZQo0d0hENk5yVDM4aVYyM0ljR1AzaXBOVWdXSGoxWGJuWkhSc0xxVHcxRnBNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlETWpDQ0FocWdBd0lCQWdJSUxENzRyQ0dCYXdZd0RRWUpLb1pJaHZjTkFRRUxCUUF3TnpFU01CQUdBMVVFCkN4TUpiM0JsYm5Ob2FXWjBNU0V3SHdZRFZRUURFeGhyZFdKbExXRndhWE5sY25abGNpMXNZaTF6YVdkdVpYSXcKSGhjTk1qWXdOVEEzTURrd016VXpXaGNOTXpZd05UQTBNRGt3TXpVeldqQTNNUkl3RUFZRFZRUUxFd2x2Y0dWdQpjMmhwWm5ReElUQWZCZ05WQkFNVEdHdDFZbVV0WVhCcGMyVnlkbVZ5TFd4aUxYTnBaMjVsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU5WclR0Szk3MDkyUEY4TU5neTBkMVJBM3JiN2xoQzgKMWRNSDhqNkswcjQzQVc4MHd5Snk2WldZcEw3anhiKzhKSVBkcWgyQzRvRDQxWDBncy9LTHJtOHc1OGxEVGgrMAoxRU92L2lFaW5sTDJQN2ttVVRMM0dzd0xqWW1HZjNVQ1g0Y1Z4ZHRmWXFsRWMwZzNMd1FlVlhmUlhjYXp3THdMCjk1S2kvUlJ4UnZFb0pocmJpK0I2aXc4QlpnOFp1Qis3Mk9lcVpwclV1RGhIeEJjRTg1bDUrYVFNVWJjdkZyZG8KNUEzS2JZbkFCL3ZFbE5rQVI0VldWRXZmb0k1c0dFMUN6ZUlZM0h6cVluKzY0TE56enRYQ1lFSnRJUnk4N3JSZApyZmFGNmNvejZUKzIwbTV5dVh3VjY4OFAxNW82bW1JekxpVjRwTjM0bjZYcUZ5UGxIL2pTcGtrQ0F3RUFBYU5DCk1FQXdEZ1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZIWWwKYmcySnZOSk8xMWh3WlBSYUNSTmpKeERzTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCSDcxbWl5REc1Vkd5eAp0OHh6VUdUUUU2d3hKZ21reUVKVFdxV2ltM0RMdGFqdFVxeVB3VjM4eDVjWjdBSXl4U2FIWlErVDE4LzZ3ZHJGCjFYYVZyQWVSNmpNd0ZkTTROV1VVbytYV09DOHRCZW9MOXpxbFlYU2FsNnlmQUphaldWK2NtcFNkOE1nMUtNUDQKMmt1SEpDMHM4WDVSeEtSYnpYbGtaekJWWjFkd2c1MjdOdVVPWlBYR05vVElMV00yM2grRTJ3KyttU2Q2emhzSApsZ1JKajVuWUMvNGIxMzYvNnFIcEp4NVloVzlKeDhWSzlPV2k4dmY0QncrQVZub1NnNkVNU3ErQVVaYmZ1MGJHCmtSK3NTRnZlcjBkR1BITE5TVW1TVnBwUTRLdDdObzY5KzJFdlB4VEpmS2Evc04wb2NRSDNmc25mSGo5dTMxazAKOWhkNGtiZHEKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo%3D%0A%20%20%20%20server%3A%20https%3A%2F%2Fapi-int.okd.local%3A6443%0A%20%20name%3A%20okd%0Acontexts%3A%0A-%20context%3A%0A%20%20%20%20cluster%3A%20okd%0A%20%20%20%20user%3A%20kubelet%0A%20%20name%3A%20kubelet%0Acurrent-context%3A%20kubelet%0Ausers%3A%0A-%20name%3A%20kubelet%0A%20%20user%3A%0A%20%20%20%20client-certificate-data%3A%20LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ4RENDQXRpZ0F3SUJBZ0lJYWVhZTNhSDYxNEV3RFFZSktvWklodmNOQVFFTEJRQXdRakVTTUJBR0ExVUUKQ3hNSmIzQmxibk5vYVdaME1Td3dLZ1lEVlFRREV5TnJkV0psYkdWMExXSnZiM1J6ZEhKaGNDMXJkV0psWTI5dQpabWxuTFhOcFoyNWxjakFlRncweU5qQTFNRGN3T1RBek5UUmFGdzB6TmpBMU1EUXdPVEF6TlRSYU1JRzJNV0F3CkhRWURWUVFLRXhaemVYTjBaVzA2YzJWeWRtbGpaV0ZqWTI5MWJuUnpNRDhHQTFVRUNoTTRjM2x6ZEdWdE9uTmwKY25acFkyVmhZMk52ZFc1MGN6cHZjR1Z1YzJocFpuUXRiV0ZqYUdsdVpTMWpiMjVtYVdjdGIzQmxjbUYwYjNJeApVakJRQmdOVkJBTVRTWE41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwdmNHVnVjMmhwWm5RdGJXRmphR2x1ClpTMWpiMjVtYVdjdGIzQmxjbUYwYjNJNmJtOWtaUzFpYjI5MGMzUnlZWEJ3WlhJd2dnRWlNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFERWZKUyt4WkUyaGNGd2JCZUNXL2c1ejFoQlpycW5mWUlaMUZ6aQpyV1g3REt1Z0VUNTBoN3RzZ1MrMlA5UUMyKytTUGlTZUZVMElTYVRBVVhvNGtYZlZQU0tkaU5HUktUL0wzWE1UCmY0SHBHVVgrdm52aytodlpNQkdRZWpjVW44Z1RFMXNrUmJXNVBHZSt2dW5vOE43M0RJd1ZaWkxwaE41d1FlWVQKbnUzL0E2NzlUYmFha0FnK2p0UWJ5eVpSVE9BYnZxeUUzZEVXQjJMazBiSFBOczhtMGdubFVmWE16VkJvOWQwUgpZbmFnNU4xNENRUWZzRjVVcHhhaU0yWDdrRDZ0Nm9oVTh1UjJBcDJDdGszWmZpZS9EMENhVHRvS3hJbHBkUFhqClFnVys2Skw1V3kvQWxuVzJYVGdOS0JNdDR1STBjcVlwcHFUbS9lV2FVNzNaNVNCakFnTUJBQUdqZFRCek1BNEcKQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQQpNQjBHQTFVZERnUVdCQlJ2TDE4b0phWGlaWW1aa0I2aXkwTVExUXJvM3pBZkJnTlZIU01FR0RBV2dCU1R6cE5xCi9WN2ZObEM5V2NvQld3bjBZZmorYnpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWNIUll2bERXUVAzcnZnVnQKRndqQk53cDQwYU1acjl2Y25Qa2I5TVlmSW9NaEdRVWs5ZmU5ZXd3WW8yMEtJd1JiTTFUK3VFeUg1bEhKemxueAp0NUhlSlg1RGhrNmpDSWE4cXczYnJYUzF3MFJlSkl1STNqa1ZYS2llbjUrNWc0aUFOSFNTSWlYbS9xVE9IUDJkCklWNXJ5NHZyREVYd2tPU1ZvS25pTjVLRmIvL3ZEemNLWXhQT2tncStpdXR2bGpNd0FrblRVQTBvVFZvZW5xYi8KS2RxRzQvNW4xcDU0S0szTTNsOHltK1RRdlRJWW1XbnRKc0hGOHF6aXNFL1ZydHJJNlZPd21UcXJjUWtzRmlKMQprckNsODRvQU1ncENUdmlBd3F1YVZ2N3AwQ0JWTjAxMHFReEhZbHFqNGg1ZFJOUDRVbGkvTzlkRXBtSTZEd1g3CndkMGkwQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K%0A%20%20%20%20client-key-data%3A%20LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBeEh5VXZzV1JOb1hCY0d3WGdsdjRPYzlZUVdhNnAzMkNHZFJjNHExbCt3eXJvQkUrCmRJZTdiSUV2dGovVUF0dnZrajRrbmhWTkNFbWt3RkY2T0pGMzFUMGluWWpSa1NrL3k5MXpFMytCNlJsRi9yNTcKNVBvYjJUQVJrSG8zRkovSUV4TmJKRVcxdVR4bnZyN3A2UERlOXd5TUZXV1M2WVRlY0VIbUU1N3Qvd091L1UyMgptcEFJUG83VUc4c21VVXpnRzc2c2hOM1JGZ2RpNU5HeHp6YlBKdElKNVZIMXpNMVFhUFhkRVdKMm9PVGRlQWtFCkg3QmVWS2NXb2pObCs1QStyZXFJVlBMa2RnS2RnclpOMlg0bnZ3OUFtazdhQ3NTSmFYVDE0MElGdnVpUytWc3YKd0paMXRsMDREU2dUTGVMaU5IS21LYWFrNXYzbG1sTzkyZVVnWXdJREFRQUJBb0lCQUJuTk9rTXE4bnkwWjhoNQppVVRIQ3Z1Y2JMeDUzdnpya0ZBUUFQcUxScDhHOU9xYUdSZDRVM1pXS0l2SUtmRU9MSkdKczRsR3hzelZ6dHFxCldHQmhTZGtvcEFrSDFHMDVlM1VyNlZhZ0lkRVlUb2E3UU0yNndqbHRCSUZ5YXhVOFBpdXpHUDdVWUo2b2ZmOGcKVnRzTjlsbCt2azU0L2lmSUdPV280YXVsN1I3VmhBMXcvc3krclQxeFlycE45bFBXTFdJMWZXb0QweHd5eWxsdQp2bE1iUmNnTTZ5aTVlZUJFWU1NZDdQVjNaRFY2RDBReU9wVWthNmgxRnN3SngwaXBiVC9HYitDT2JJajRwNXA0Ci9CR2w1K3M3amtDQk1ycXZJc3JlbmNIMUtnVXpOaitSVnVwaUxYRDNSZm05Njk3UHpXQUFadXZsTG5pZGwwelIKdjVxT3dTRUNnWUVBMkE4QTFiQTE5Q3Fvam5CcFFtYkYrVElEKytyYjB0dWdueEhuR3JoRXllWTlPelgyQnN3Tgp1WlpVU3ZwY3FJMmVpbFdnaVRsTWFQYlNIVVZPemxDbXJ6M2w4N1dEa0VJMmZ4YTRLTWUyeUVyVGJXZ1FWRTlpClc4NWFzZkVWTG11WmRTVlc4ZEI2cTd5aXRjYlpYODY4TTNsUGg0dURQZ29pVVluQ2JEQ3daeGtDZ1lFQTZNOVYKSkJkWUxOTExqZmFQdmFyNUY4NFpMVElKTjhIdUo5TmNIRnY0UGF3UW92Zk5tNHFXUlNkRkRtUENPdXdldlZLTgpvK2piL2diRldYaDdFa1Uzand0N3daSDYvS1ZrOExLSXpza0U1dUwzYkVWYm95OUgxcEVnRTcxQ0ZMWTF1ckJrCmJhanNCV0FZYThHRmNqUmlsam0rNThHSXBnejhhOVhCeXlNb0h0c0NnWUVBZ0lzVWxRMzhXNk5SbTBVWDZ0Q1kKY25VbVY2ZllWekFoOU9IQzNHdkxTVSs1R0ZRM1pyM2FZSk1tM1dEczViODBGdHR3NHBON2VXdDNnTUN1YlNNZwp1RndjUm8yMGs0eEJQZ1YzVlpQVWxIK29JSXhzUXF6a09QaWhqd0orOXBvL3Q2bWFlODNzWGVhaDY0STk2N2xrCjBUOFlhTzFCRFJVY2ErU0pEck05RUdrQ2dZRUF3ZEhDdno1VUlWVUpORkkrRHhpbE1rVmFQbjgybjEzcnlPbzAKK0VNMUl4cjU2c05GUUtZYlBzMVh0NGdqN3V3ZkYxMEFJS0svYS9mMUd1eXNBV1R3d1QwOU5jVXo0RnhOOGZtZwozZzhLN3JHc2JVNDg0VmwraEVya0dxcm90ZGVRV2JGNm1yVVVjZEV6NDVvRVlEVHVrc1RXZzVsakMyTXFUeGh4CnM0MjhYQnNDZ1lFQW1DMy96bTVVWDJjRTNYckw4RzhvY0w5S0NMcEVFTTlvL2RDd0djaEhmMXJaN2YwbVFISjgKeTE1dWp5eElZZWVQM1NNUjVFSW9mWEVPNmxkRXVJci9hNFRYeXBIbTJlNWt4bjVqZjVVQzBSczBvSldwU09nMwptNXFtLy9QMTNlODFjZHpyaTFmeDljVWlMWjMveGVYZk5kK1NZVDVkZXJKenpQYXd5TWppSmVvPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo%3D%0A"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/mcs-machine-config-content.json",
        "contents": {
          "source": "data:,%7B%0A%20%20%20%20%22kind%22%3A%20%22MachineConfig%22%2C%0A%20%20%20%20%22apiVersion%22%3A%20%22machineconfiguration.openshift.io%2Fv1%22%2C%0A%20%20%20%20%22metadata%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22name%22%3A%20%22rendered-master-4c3e25bed87fd10dc43ca0407f833c85%22%2C%0A%20%20%20%20%20%20%20%20%22annotations%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22machineconfiguration.openshift.io%2Fgenerated-by-controller-version%22%3A%20%22f20ca236ffead6b7603c4f42a35c49fbed328bc3%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22machineconfiguration.openshift.io%2Frelease-image-version%22%3A%20%22%22%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22ownerReferences%22%3A%20%5B%0A%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%22apiVersion%22%3A%20%22machineconfiguration.openshift.io%2Fv1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22kind%22%3A%20%22MachineConfigPool%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22master%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22uid%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22controller%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22blockOwnerDeletion%22%3A%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22spec%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22osImageURL%22%3A%20%22quay.io%2Fokd%2Fscos-content%40sha256%3Af76b028281a1e5dbd9b985a37685dbda610c8c7fee4ebcd24f74d89aba4b482f%22%2C%0A%20%20%20%20%20%20%20%20%22baseOSExtensionsContainerImage%22%3A%20%22quay.io%2Fokd%2Fscos-content%40sha256%3Aa9928f8fafa2ed2e17ae9bbc051bfbff2a9afe0bd1067d728b98966db12f7e26%22%2C%0A%20%20%20%20%20%20%20%20%22config%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22ignition%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22version%22%3A%20%223.5.0%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22passwd%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22users%22%3A%20%5B%0A%20%20%20%20%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%20%20%20%20%22name%22%3A%20%22core%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22sshAuthorizedKeys%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ssh-ed25519%20AAAAC3NzaC1lZDI1NTE5AAAAINedMPekwt897%2FZ4OgJYYYd8hL205xINWIyNCedJ8C3P%20okd-cluster%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%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%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22storage%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22files%22%3A%20%5B%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-ex%2520-o%2520pipefail%250A%250ANM_DEVICES_DIR%253D%252Frun%252FNetworkManager%252Fdevices%250ANM_RUN_CONN_DIR%253D%252Frun%252FNetworkManager%252Fsystem-connections%250ANM_ETC_CONN_DIR%253D%252Fetc%252FNetworkManager%252Fsystem-connections%250A%250Alogger%2520-t%2520nm-clean-initrd-state%2520%2522Cleaning%2520network%2520activation%2520state%2520generated%2520by%2520dracut...%2522%250Alogger%2520-t%2520nm-clean-initrd-state%2520%2522To%2520disable%252C%2520remove%2520%252Fvar%252Flib%252Fmco%252Fnm-clean-initrd-state%2522%250A%250Aif%2520%255B%2520!%2520-e%2520%2522%2524NM_DEVICES_DIR%2522%2520%255D%2520%257C%257C%2520%255B%2520!%2520-e%2520%2522%2524NM_RUN_CONN_DIR%2522%2520%255D%2520%257C%257C%2520%255B%2520!%2520-e%2520%2522%2524NM_ETC_CONN_DIR%2522%2520%255D%253B%2520then%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522There%2520is%2520no%2520network%2520activation%2520state%2520to%2520clean%2522%250A%2520%2520exit%250Afi%250A%250A%2523%2520Some%2520deployments%2520require%2520an%2520active%2520network%2520early%2520in%2520the%2520boot%2520process.%2520To%250A%2523%2520achieve%2520this%252C%2520dracut%2520runs%2520specific%2520NetworkManager%2520modules.%2520This%2520results%2520in%250A%2523%2520NetworkManager%2520keyfiles%2520being%2520generated%2520(either%2520default%2520or%2520from%2520ip%2520kernel%250A%2523%2520arguments)%2520and%2520activated.%2520This%2520activation%2520generates%2520state%2520that%2520makes%2520those%250A%2523%2520profiles%2520to%2520be%2520re-activated%2520by%2520the%2520NetworkManager%2520service%2520later%2520in%2520the%250A%2523%2520boot%2520process.%2520And%2520this%2520has%2520the%2520effect%2520that%2520other%2520profiles%2520deployed%2520by%2520the%250A%2523%2520user%2520for%2520the%2520same%2520set%2520of%2520devices%2520are%2520ignored.%250A%250A%2523%2520Most%2520of%2520the%2520time%2520this%2520is%2520the%2520desired%2520behavior.%2520The%2520exception%2520to%2520this%2520rule%250A%2523%2520is%2520when%2520the%2520user%2520wants%2520to%2520run%2520the%2520boot%2520process%2520with%2520a%2520different%2520network%250A%2523%2520setup%2520than%2520the%2520real%2520root%2520which%2520is%2520usually%2520related%2520to%2520the%2520fact%2520that%250A%2523%2520generating%2520images%2520with%2520customized%2520kernel%2520arguments%2520is%2520a%2520complication%2520in%250A%2523%2520the%2520deployment%2520pipeline.%250A%250A%2523%2520This%2520need%2520has%2520been%2520exacerbated%2520by%2520past%2520NetworkManager%2520bugs%2520that%2520activated%250A%2523%2520the%2520network%2520on%2520boot%2520when%2520it%2520was%2520not%2520really%2520needed.%2520Most%2520notably%2520when%2520ip%250A%2523%2520kernel%2520argument%2520is%2520present%252C%2520something%2520that%2520the%2520baremetal%2520installer%2520adds%2520by%250A%2523%2520default.%250A%250A%2523%2520The%2520intention%2520here%2520is%2520to%2520remove%2520the%2520state%2520that%2520was%2520generated%2520with%2520the%250A%2523%2520activation%2520of%2520those%2520profiles%2520during%2520dracut%2520execution.%2520Then%2520when%250A%2523%2520NetworkManager%2520service%2520runs%252C%2520the%2520profiles%2520generated%2520by%2520dracut%252C%2520along%2520with%250A%2523%2520other%2520profiles%2520configured%2520by%2520the%2520user%252C%2520are%2520evaluated%2520towards%2520finding%2520the%250A%2523%2520most%2520appropriate%2520profile%2520to%2520connect%2520a%2520device%2520with.%2520As%2520a%2520precaution%252C%2520clean%250A%2523%2520state%2520only%2520for%2520devices%2520that%253A%250A%2523%2520-%2520have%2520been%2520activated%2520with%2520a%2520default%2520profile%2520(assume%2520that%2520a%2520non-default%250A%2523%2520%2520%2520configuration%2520expresses%2520intention%2520by%2520user%2520to%2520run%2520with%2520it%2520permanently)%250A%2523%2520-%2520have%2520a%2520specific%2520configured%2520profile%2520set%2520to%2520auto-connect%2520(if%2520there%2520is%2520no%250A%2523%2520%2520%2520alternate%2520configured%2520profile%2520for%2520a%2520device%2520it%2520makes%2520no%2520sense%2520to%250A%2523%2520%2520%2520de-activate%2520anything)%250A%2523%250A%2523%2520Although%2520this%2520can%2520theoretically%2520happen%2520on%2520any%2520deployment%2520type%252C%2520need%2520has%250A%2523%2520mostly%2520come%2520from%2520IPI%2520bare%2520metal%2520deployments.%2520For%2520the%2520time%2520being%252C%2520this%250A%2523%2520should%2520be%2520opt-in%2520in%2520any%2520other%2520deploment%2520type.%250A%2523%250A%2523%2520There%2520is%2520an%2520RFE%2520filed%2520against%2520NM%2520that%2520once%2520implemented%2520would%2520make%2520this%250A%2523%2520script%2520unnecessary%253A%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D2089707%250A%250Afor%2520device%2520in%2520%2522%2524%257BNM_DEVICES_DIR%257D%2522%252F*%253B%2520do%250A%2520%2520if%2520%255B%2520!%2520-e%2520%2522%2524device%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520the%2520device%2520file%2520name%2520is%2520the%2520ifindex%250A%2520%2520ifindex%253D%2524(basename%2520%2522%2524device%2522)%250A%2520%2520%250A%2520%2520%2523%2520get%2520the%2520interface%2520name%2520by%2520ifindex%250A%2520%2520ifname%253D%2524(ip%2520-j%2520link%2520show%2520%257C%2520jq%2520-r%2520%2522.%255B%255D%2520%257C%2520select(.ifindex%2520%253D%253D%2520%2524%257Bifindex%257D)%2520%257C%2520.ifname%2520%252F%252F%2520empty%2522)%250A%250A%2520%2520%2523%2520no%2520interface%2520name%2520found%252C%2520ignore%250A%2520%2520if%2520%255B%2520-z%2520%2522%2524ifname%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520get%2520the%2520uuid%2520of%2520the%2520profile%2520the%2520device%2520has%2520been%2520activated%2520with%250A%2520%2520active_profile_uuid%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bdevice%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Econnection-uuid%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524device%2522)%250A%250A%2520%2520%2523%2520the%2520device%2520was%2520not%2520activated%2520with%2520any%2520profile%252C%2520ignore%250A%2520%2520if%2520%255B%2520-z%2520%2522%2524active_profile_uuid%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520find%2520the%2520generated%2520profile%2520by%2520uuid%250A%2520%2520for%2520profile%2520in%2520%2522%2524%257BNM_RUN_CONN_DIR%257D%2522%252F*%253B%2520do%250A%2520%2520%2520%2520generated_profile_uuid%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bconnection%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Euuid%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524active_profile_uuid%2522%2520%253D%2520%2522%2524generated_profile_uuid%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%250A%2520%2520%2523%2520generated%2520profile%2520not%2520found%252C%2520ignore%250A%2520%2520if%2520%255B%2520%2522%2524active_profile_uuid%2522%2520!%253D%2520%2522%2524generated_profile_uuid%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520check%2520that%2520it%2520is%2520not%2520specific%2520for%2520the%2520device%252C%2520otherwise%2520ignore%250A%2520%2520profile_ifname%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bconnection%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Einterface-name%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520if%2520%255B%2520-n%2520%2522%2524profile_ifname%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520profile%2520not%2520generated%2520by%2520nm-initrd-generator%252C%2520ignore%250A%2520%2520%2523%2520only%2520check%2520it%2520if%2520the%2520key%2520is%2520set%2520(from%2520NM%25201.32.4)%250A%2520%2520origin%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Buser%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Eorg.freedesktop.NetworkManager.origin%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520if%2520%255B%2520-n%2520%2522%2524origin%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524origin%2522%2520!%253D%2520%2522nm-initrd-generator%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520%2523%2520find%2520the%2520configured%2520profile%2520by%2520name%2520with%2520auto-connect%2520set%250A%2520%2520for%2520profile%2520in%2520%2522%2524%257BNM_ETC_CONN_DIR%257D%2522%252F*%253B%2520do%250A%2520%2520%2520%2520profile_ifname%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bconnection%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Einterface-name%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520%2520%2520autoconnect%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bconnection%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Eautoconnect%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524profile_ifname%2522%2520%253D%2520%2522%2524ifname%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524autoconnect%2522%2520!%253D%2520%2522false%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%250A%2520%2520%2523%2520configured%2520profile%2520not%2520found%252C%2520ignore%250A%2520%2520if%2520%255B%2520%2522%2524profile_ifname%2522%2520!%253D%2520%2522%2524ifname%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524autoconnect%2522%2520%253D%2520%2522false%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520continue%250A%2520%2520fi%250A%250A%2520%2520configured_profile_uuid%253D%2524(sed%2520-nr%2520'%252F%255E%255C%255Bconnection%255C%255D%252F%252C%252F%255E%255C%255B%252F%257B%252F%255Euuid%255Cs*%253D%252F%257Bs%252F%255B%255E%253D%255D%252B%255Cs*%253D%255Cs*%252F%252F%253BP%257D%257D'%2520%2522%2524profile%2522)%250A%2520%2520%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522%2524ifname%2520activated%2520with%2520default%2520generated%2520profile%2520%2524generated_profile_uuid%2522%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522%2524ifname%2520has%2520different%2520configured%2520specific%2520profile%2520%2524configured_profile_uuid%2522%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522%2524ifname%253A%2520removing%2520state...%2522%250A%2520%2520%250A%2520%2520%2523%2520NM%2520can%2520still%2520generate%2520internal%2520profiles%2520from%2520the%2520IP%2520address%250A%2520%2520%2523%2520configuration%2520of%2520devices%252C%2520so%2520flush%2520addresses%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522Flushing%2520IP%2520addresses%2520from%2520%2524ifname%2522%250A%2520%2520ip%2520addr%2520flush%2520%2522%2524ifname%2522%250A%2520%2520ip%2520-6%2520addr%2520flush%2520%2522%2524ifname%2522%250A%250A%2520%2520%2523%2520remove%2520device%2520state%2520file%2520to%2520prevent%2520NM%2520to%2520unilaterally%2520connect%2520with%2520the%250A%2520%2520%2523%2520latest%2520activated%2520profile%2520without%2520evaluating%2520other%2520profiles%2520%250A%2520%2520logger%2520-t%2520nm-clean-initrd-state%2520%2522Removing%2520%2524device%2522%250A%2520%2520rm%2520-f%2520--%2520%2522%2524device%2522%250A%250Adone%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fnm-clean-initrd-state.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255Bconnection%255D%250Aipv6.dhcp-duid%253Dll%250Aipv6.dhcp-iaid%253Dmac%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fconf.d%2F01-ipv6.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255Bmain%255D%250Aplugins%253Dkeyfile%252Cifcfg-rh%250A%255Bkeyfile%255D%250Apath%253D%252Fetc%252FNetworkManager%252Fsystem-connections%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fconf.d%2F20-keyfiles.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20384%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fpki%2Fca-trust%2Fsource%2Fanchors%2Fopenshift-config-user-ca-bundle.crt%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2CKUBERNETES_SERVICE_HOST%253D'api-int.okd.local'%250AKUBERNETES_SERVICE_PORT%253D'6443'%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fapiserver-url.env%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520This%2520file%2520is%2520managed%2520by%2520machine-config-operator.%250A%2523%2520Suppress%2520audit%2520rules%2520which%2520always%2520trigger%2520for%2520container%250A%2523%2520workloads%252C%2520as%2520they%2520spam%2520the%2520audit%2520log.%2520%2520Workloads%2520are%2520expected%250A%2523%2520to%2520be%2520dynamic%252C%2520and%2520the%2520networking%2520stack%2520uses%2520iptables.%250A-a%2520exclude%252Calways%2520-F%2520msgtype%253DNETFILTER_CFG%250A%2523%2520The%2520default%2520bridged%2520networking%2520enables%2520promiscuous%2520on%2520the%2520veth%250A%2523%2520device.%2520%2520Ideally%252C%2520we'd%2520teach%2520audit%2520to%2520ignore%2520only%2520veth%2520devices%252C%250A%2523%2520since%2520one%2520might%2520legitimately%2520care%2520about%2520promiscuous%2520on%2520real%2520physical%250A%2523%2520devices.%2520%2520But%2520we%2520can't%2520currently%2520differentiate.%250A-a%2520exclude%252Calways%2520-F%2520msgtype%253DANOM_PROMISCUOUS%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Faudit%2Frules.d%2Fmco-audit-quiet-containers.rules%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%250A%2523%2520ESP%2520offload%252C%2520either%2520in%2520actual%2520hardware%2520or%2520as%2520part%2520as%2520GRO%2520(generic%250A%2523%2520recieve%2520offload)%2520does%2520not%2520work%2520for%2520interfaces%2520attached%2520to%2520an%2520OVS%2520bridge%250A%2523%2520so%2520turn%2520it%2520off%2520for%2520the%2520time%2520being.%250A%2523%2520https%253A%252F%252Fissues.redhat.com%252Fbrowse%252FRHEL-58811%250A%250A%2523%2520Depends%2520on%2520ipsec%2520service%2520drop-in%2520to%2520start%2520it%2520after%2520configure-ovs%2520to%2520make%250A%2523%2520sure%2520offloads%2520are%2520disabled%2520before%2520ipsec%2520starts.%250A%250Aif%2520%255B%255B%2520%2522%25242%2522%2520!%253D%2520%2522up%2522%2520%255D%255D%253B%2520then%250A%2520%2520exit%250Afi%250A%250Adevice%253D%2524DEVICE_IFACE%250Akind_slave%253D%2524(ip%2520-j%2520-d%2520link%2520show%2520%2522%2524device%2522%2520%257C%2520jq%2520-r%2520'.%255B0%255D%2520%257C%2520.linkinfo.info_slave_kind%2520%252F%252F%2520empty')%250A%250Aif%2520%255B%2520%2522%2524kind_slave%2522%2520%253D%2520%2522openvswitch%2522%2520%255D%253B%2520then%250A%2520%2520for%2520feature%2520in%2520tx-esp-segmentation%2520esp-hw-offload%2520esp-tx-csum-hw-offload%253B%2520do%250A%2520%2520%2520%2520if%2520ethtool%2520-k%2520%2522%2524device%2522%2520%257C%2520grep%2520-qE%2520%2522%255E%2524%257Bfeature%257D%253A%2520off%2522%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520already%2520disabled%252C%2520nothing%2520to%2520do%250A%2520%2520%2520%2520%2520%2520continue%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%250A%2520%2520%2520%2520logger%2520-t%252099-esp-offload%2520-s%2520%2522Setting%2520%2524feature%2520off%2520for%2520%2524device%253A%2520unsupported%2520when%2520attached%2520to%2520Open%2520vSwitch%2520bridge%2522%250A%2520%2520%2520%2520ethtool%2520-K%2520%2522%2524device%2522%2520%2522%2524feature%2522%2520off%250A%2520%2520done%250Afi%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20484%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fdispatcher.d%2F99-esp-offload%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2Cr%2520%252Fetc%252Fkubernetes%252Fcni%252Fnet.d%252F80-openshift-network.conf%250Ar%2520%252Fetc%252Fkubernetes%252Fcni%252Fnet.d%252F10-ovn-kubernetes.conf%250Ad%2520%252Frun%252Fmultus%252Fcni%252Fnet.d%252F%25200755%2520root%2520root%2520-%2520-%250AD%2520%252Fvar%252Flib%252Fcni%252Fnetworks%252Fopenshift-sdn%252F%25200755%2520root%2520root%2520-%2520-%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Ftmpfiles.d%2Fcleanup-cni.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-x%250A%250A%2523%2520Clear%2520ovn-remote%2520config%2520to%2520connect%2520to%2520OVN%2520DBs.%250A%2523%2520ovnkube%2520controller%2520will%2520set%2520it%2520on%2520startup.%250A%2523%2520May%2520remove%2520when%2520https%253A%252F%252Fissues.redhat.com%252Fbrowse%252FFDP-1537%2520is%2520availabe%250A%2523%2520However%2520it%2520may%2520also%2520be%2520a%2520good%2520idea%2520to%2520leave%2520this%2520because%2520we%2520don't%2520want%250A%2523%2520ovn-controller%2520syncing%2520to%2520a%2520stale%2520OVN%2520southbound%2520database.%250Aovs-vsctl%2520set%2520Open_vSwitch%2520.%2520external_ids%253Aovn-remote%253D%2522%2520%2522%250A%250Aif%2520%255B%2520-e%2520%252Fetc%252Fnmstate%252Fopenshift%252Fapplied%2520%255D%253B%2520then%250A%2520%2520echo%2520%2522Skipping%2520configure-ovs%2520due%2520to%2520manual%2520network%2520configuration%2522%250A%2520%2520exit%25200%250Afi%250A%250A%2523%2520This%2520file%2520is%2520not%2520needed%2520anymore%2520in%25204.7%252B%252C%2520but%2520when%2520rolling%2520back%2520to%25204.6%250A%2523%2520the%2520ovs%2520pod%2520needs%2520it%2520to%2520know%2520ovs%2520is%2520running%2520on%2520the%2520host.%250Atouch%2520%252Fvar%252Frun%252Fovs-config-executed%250A%250A%2523%2520always%2520use%2520--escape%2520no%2520to%2520prevent%2520'%253A'%2520mangling.%2520%2520nmcli%2520will%2520escape%2520all%2520colons%2520as%2520%255C%253A%252C%2520this%2520breaks%2520input%250ANMCLI_GET_VALUE%253D%2522nmcli%2520--escape%2520no%2520--get-values%2522%250A%2523%2520These%2520are%2520well%2520knwon%2520NM%2520default%2520paths%250ANM_CONN_ETC_PATH%253D%2522%252Fetc%252FNetworkManager%252Fsystem-connections%2522%250ANM_CONN_RUN_PATH%253D%2522%252Frun%252FNetworkManager%252Fsystem-connections%2522%250A%250A%2523%2520This%2520is%2520the%2520path%2520where%2520NM%2520is%2520known%2520to%2520be%2520configured%2520to%2520store%2520user%2520keyfiles%2520%250ANM_CONN_CONF_PATH%253D%2522%2524NM_CONN_ETC_PATH%2522%250A%250A%2523%2520This%2520is%2520where%2520we%2520want%2520our%2520keyfiles%2520to%2520finally%2520reside.%2520configure-ovs%250A%2523%2520operates%2520with%2520temporary%2520keyfiles%2520in%2520NM_CONN_RUN_PATH%2520and%2520then%2520as%2520a%2520last%250A%2523%2520step%2520moves%2520those%2520keyfiles%2520to%2520NM_CONN_SET_PATH%2520if%2520it%2520is%2520a%2520different%2520path%250A%2523%2520(not%2520by%2520default).%2520This%2520mitigates%2520hard%2520interruptions%2520(SIGKILL%252C%2520hard%2520reboot)%250A%2523%2520of%2520configure-ovs%2520leaving%2520the%2520machine%2520with%2520a%2520half-baked%2520set%2520of%2520keyfiles%250A%2523%2520that%2520might%2520prevent%2520machine%2520networking%2520from%2520working%2520correctly.%250ANM_CONN_SET_PATH%253D%2522%2524%257BNM_CONN_SET_PATH%253A-%2524NM_CONN_RUN_PATH%257D%2522%250A%250AMANAGED_NM_CONN_SUFFIX%253D%2522-slave-ovs-clone%2522%250A%2523%2520Workaround%2520to%2520ensure%2520OVS%2520is%2520installed%2520due%2520to%2520bug%2520in%2520systemd%2520Requires%253A%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1888017%250Acopy_nm_conn_files()%2520%257B%250A%2520%2520local%2520dst_path%253D%2522%25241%2522%250A%2520%2520for%2520src%2520in%2520%2522%2524%257BMANAGED_NM_CONN_FILES%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520src_path%253D%2524(dirname%2520%2522%2524src%2522)%250A%2520%2520%2520%2520file%253D%2524(basename%2520%2522%2524src%2522)%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524src_path%252F%2524file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520!%2520-f%2520%2522%2524dst_path%252F%2524file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Copying%2520configuration%2520%2524file%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520cp%2520%2522%2524src_path%252F%2524file%2522%2520%2522%2524dst_path%252F%2524file%2522%250A%2520%2520%2520%2520%2520%2520elif%2520!%2520cmp%2520--silent%2520%2522%2524src_path%252F%2524file%2522%2520%2522%2524dst_path%252F%2524file%2522%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Copying%2520updated%2520configuration%2520%2524file%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520cp%2520-f%2520%2522%2524src_path%252F%2524file%2522%2520%2522%2524dst_path%252F%2524file%2522%250A%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Skipping%2520%2524file%2520since%2520it's%2520equal%2520at%2520destination%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Skipping%2520%2524file%2520since%2520it%2520does%2520not%2520exist%2520at%2520source%2522%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%257D%250A%250Aupdate_nm_conn_files_base()%2520%257B%250A%2520%2520base_path%253D%2524%257B1%257D%250A%2520%2520bridge_name%253D%2524%257B2%257D%250A%2520%2520port_name%253D%2524%257B3%257D%250A%2520%2520ovs_port%253D%2522ovs-port-%2524%257Bbridge_name%257D%2522%250A%2520%2520ovs_interface%253D%2522ovs-if-%2524%257Bbridge_name%257D%2522%250A%2520%2520default_port_name%253D%2522ovs-port-%2524%257Bport_name%257D%2522%2520%2523%2520ovs-port-phys0%250A%2520%2520bridge_interface_name%253D%2522ovs-if-%2524%257Bport_name%257D%2522%2520%2523%2520ovs-if-phys0%250A%2520%2520%2523%2520In%2520RHEL7%2520files%2520in%2520%252F%257Betc%252Crun%257D%252FNetworkManager%252Fsystem-connections%2520end%2520without%2520the%2520suffix%2520'.nmconnection'%252C%2520whereas%2520in%2520RHCOS%2520they%2520end%2520with%2520the%2520suffix.%250A%2520%2520MANAGED_NM_CONN_FILES%253D(%2524(echo%2520%2522%2524%257Bbase_path%257D%2522%252F%257B%2522%2524bridge_name%2522%252C%2522%2524ovs_interface%2522%252C%2522%2524ovs_port%2522%252C%2522%2524bridge_interface_name%2522%252C%2522%2524default_port_name%2522%257D%257B%252C.nmconnection%257D))%250A%2520%2520shopt%2520-s%2520nullglob%250A%2520%2520MANAGED_NM_CONN_FILES%252B%253D(%2524%257Bbase_path%257D%252F*%2524%257BMANAGED_NM_CONN_SUFFIX%257D.nmconnection%2520%2524%257Bbase_path%257D%252F*%2524%257BMANAGED_NM_CONN_SUFFIX%257D)%250A%2520%2520shopt%2520-u%2520nullglob%250A%257D%250A%250Aupdate_nm_conn_run_files()%2520%257B%250A%2520%2520update_nm_conn_files_base%2520%2522%2524%257BNM_CONN_RUN_PATH%257D%2522%2520%2522%2524%257B1%257D%2522%2520%2522%2524%257B2%257D%2522%250A%257D%250A%250Aupdate_nm_conn_set_files()%2520%257B%250A%2520%2520update_nm_conn_files_base%2520%2522%2524%257BNM_CONN_SET_PATH%257D%2522%2520%2522%2524%257B1%257D%2522%2520%2522%2524%257B2%257D%2522%250A%257D%250A%250Aupdate_nm_conn_etc_files()%2520%257B%250A%2520%2520update_nm_conn_files_base%2520%2522%2524%257BNM_CONN_ETC_PATH%257D%2522%2520%2522%2524%257B1%257D%2522%2520%2522%2524%257B2%257D%2522%250A%257D%250A%250A%2523%2520Move%2520and%2520reload%2520keyfiles%2520at%2520their%2520final%2520destination%250Aset_nm_conn_files()%2520%257B%250A%2520%2520if%2520%255B%2520%2522%2524NM_CONN_RUN_PATH%2522%2520!%253D%2520%2522%2524NM_CONN_SET_PATH%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520update_nm_conn_run_files%2520br-ex%2520phys0%250A%2520%2520%2520%2520copy_nm_conn_files%2520%2522%2524NM_CONN_SET_PATH%2522%250A%2520%2520%2520%2520rm_nm_conn_files%250A%2520%2520%2520%2520update_nm_conn_run_files%2520br-ex1%2520phys1%250A%2520%2520%2520%2520copy_nm_conn_files%2520%2522%2524NM_CONN_SET_PATH%2522%250A%2520%2520%2520%2520rm_nm_conn_files%250A%250A%2520%2520%2520%2520%2523%2520reload%2520keyfiles%250A%2520%2520%2520%2520nmcli%2520connection%2520reload%250A%2520%2520fi%250A%257D%250A%250A%2523%2520Used%2520to%2520remove%2520files%2520managed%2520by%2520configure-ovs%2520and%2520temporary%2520leftover%2520files%2520from%2520network%2520manager%250Arm_nm_conn_files()%2520%257B%250A%2520%2520for%2520file%2520in%2520%2522%2524%257BMANAGED_NM_CONN_FILES%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520rm%2520-f%2520%2522%2524file%2522%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Removed%2520nmconnection%2520file%2520%2524file%2522%250A%2520%2520%2520%2520%2520%2520nm_config_changed%253D1%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%2520%2520for%2520file%2520in%2520%2522%2524%257BMANAGED_NM_CONN_FILES%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520for%2520temp%2520in%2520%2524(compgen%2520-G%2520%2522%2524%257Bfile%257D.*%2522)%253B%2520do%250A%2520%2520%2520%2520%2520%2520rm%2520-f%2520%2522%2524temp%2522%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Removed%2520nmconnection%2520temporary%2520file%2520%2524temp%2522%250A%2520%2520%2520%2520%2520%2520nm_config_changed%253D1%250A%2520%2520%2520%2520done%250A%2520%2520done%250A%257D%250A%250A%2523%2520Used%2520to%2520clone%2520a%2520slave%2520connection%2520by%2520uuid%252C%2520returns%2520new%2520name%250Aclone_slave_connection()%2520%257B%250A%2520%2520local%2520uuid%253D%2522%25241%2522%250A%2520%2520local%2520old_name%250A%2520%2520old_name%253D%2522%2524(%2524NMCLI_GET_VALUE%2520connection.id%2520connection%2520show%2520uuid%2520%2522%2524uuid%2522)%2522%250A%2520%2520local%2520new_name%253D%2522%2524%257Bold_name%257D%2524%257BMANAGED_NM_CONN_SUFFIX%257D%2522%250A%2520%2520if%2520nmcli%2520connection%2520show%2520id%2520%2522%2524%257Bnew_name%257D%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520existing%2520ovs%2520slave%2520%2524%257Bnew_name%257D%2520connection%2520profile%2520file%2520found%252C%2520overwriting...%2522%2520%253E%25262%250A%2520%2520%2520%2520nmcli%2520connection%2520delete%2520id%2520%2522%2524%257Bnew_name%257D%2522%2520%2526%253E%2520%252Fdev%252Fnull%250A%2520%2520fi%250A%2520%2520clone_nm_conn%2520%2524uuid%2520%2522%2524%257Bnew_name%257D%2522%250A%2520%2520echo%2520%2522%2524%257Bnew_name%257D%2522%250A%257D%250A%250A%2523%2520Used%2520to%2520replace%2520an%2520old%2520master%2520connection%2520uuid%2520with%2520a%2520new%2520one%2520on%2520all%2520connections%250Areplace_connection_master()%2520%257B%250A%2520%2520local%2520old%253D%2522%25241%2522%250A%2520%2520local%2520new%253D%2522%25242%2522%250A%2520%2520for%2520conn_uuid%2520in%2520%2524(%2524NMCLI_GET_VALUE%2520UUID%2520connection%2520show)%2520%253B%2520do%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.master%2520connection%2520show%2520uuid%2520%2522%2524conn_uuid%2522)%2522%2520!%253D%2520%2522%2524old%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520continue%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520local%2520active_state%253D%2524(%2524NMCLI_GET_VALUE%2520GENERAL.STATE%2520connection%2520show%2520%2522%2524conn_uuid%2522)%250A%2520%2520%2520%2520local%2520autoconnect%253D%2524(%2524NMCLI_GET_VALUE%2520connection.autoconnect%2520connection%2520show%2520%2522%2524conn_uuid%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524active_state%2522%2520!%253D%2520%2522activated%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524autoconnect%2522%2520!%253D%2520%2522yes%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520Assume%2520that%2520slave%2520profiles%2520intended%2520to%2520be%2520used%2520are%2520those%2520that%2520are%253A%250A%2520%2520%2520%2520%2520%2520%2523%2520-%2520active%250A%2520%2520%2520%2520%2520%2520%2523%2520-%2520or%2520inactive%2520(which%2520might%2520be%2520due%2520to%2520link%2520being%2520down)%2520but%2520to%2520be%2520autoconnected.%250A%2520%2520%2520%2520%2520%2520%2523%2520Otherwise%252C%2520ignore%2520them.%250A%2520%2520%2520%2520%2520%2520continue%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520make%2520changes%2520for%2520slave%2520profiles%2520in%2520a%2520new%2520clone%250A%2520%2520%2520%2520local%2520new_name%250A%2520%2520%2520%2520new_name%253D%2524(clone_slave_connection%2520%2524conn_uuid)%250A%250A%2520%2520%2520%2520mod_nm_conn%2520%2522%2524new_name%2522%2520connection.master%2520%2522%2524new%2522%2520connection.autoconnect-priority%2520100%2520connection.autoconnect%2520no%2520%250A%2520%2520%2520%2520echo%2520%2522Replaced%2520master%2520%2524old%2520with%2520%2524new%2520for%2520slave%2520profile%2520%2524new_name%2522%250A%2520%2520done%250A%257D%250A%250A%2523%2520when%2520creating%2520the%2520bridge%252C%2520we%2520use%2520a%2520value%2520lower%2520than%2520NM's%2520ethernet%2520device%2520default%2520route%2520metric%250A%2523%2520(we%2520pick%252048%2520and%252049%2520to%2520be%2520lower%2520than%2520anything%2520that%2520NM%2520chooses%2520by%2520default)%250ABRIDGE_METRIC%253D%252248%2522%250ABRIDGE1_METRIC%253D%252249%2522%250A%2523%2520Given%2520an%2520interface%252C%2520generates%2520NM%2520configuration%2520to%2520add%2520to%2520an%2520OVS%2520bridge%250Aconvert_to_bridge()%2520%257B%250A%2520%2520local%2520iface%253D%2524%257B1%257D%250A%2520%2520local%2520bridge_name%253D%2524%257B2%257D%250A%2520%2520local%2520port_name%253D%2524%257B3%257D%250A%2520%2520local%2520bridge_metric%253D%2524%257B4%257D%250A%2520%2520local%2520ovs_port%253D%2522ovs-port-%2524%257Bbridge_name%257D%2522%250A%2520%2520local%2520ovs_interface%253D%2522ovs-if-%2524%257Bbridge_name%257D%2522%250A%2520%2520local%2520default_port_name%253D%2522ovs-port-%2524%257Bport_name%257D%2522%2520%2523%2520ovs-port-phys0%250A%2520%2520local%2520bridge_interface_name%253D%2522ovs-if-%2524%257Bport_name%257D%2522%2520%2523%2520ovs-if-phys0%250A%250A%2520%2520if%2520%255B%2520%2522%2524iface%2522%2520%253D%2520%2522%2524bridge_name%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520handle%2520vlans%2520and%2520bonds%2520etc%2520if%2520they%2520have%2520already%2520been%250A%2520%2520%2520%2520%2523%2520configured%2520via%2520nm%2520key%2520files%2520and%2520br-ex%2520is%2520already%2520up%250A%2520%2520%2520%2520ifaces%253D%2524(ovs-vsctl%2520list-ifaces%2520%2524%257Biface%257D)%250A%2520%2520%2520%2520for%2520intf%2520in%2520%2524ifaces%253B%2520do%2520configure_driver_options%2520%2524intf%253B%2520done%250A%2520%2520%2520%2520echo%2520%2522Networking%2520already%2520configured%2520and%2520up%2520for%2520%2524%257Bbridge-name%257D!%2522%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%250A%2520%2520%2523%2520flag%2520to%2520reload%2520NM%2520to%2520account%2520for%2520all%2520the%2520configuration%2520changes%250A%2520%2520%2523%2520going%2520forward%250A%2520%2520nm_config_changed%253D1%250A%250A%2520%2520if%2520%255B%2520-z%2520%2522%2524iface%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520Unable%2520to%2520find%2520default%2520gateway%2520interface%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%2520%2520%2523%2520find%2520the%2520MAC%2520from%2520OVS%2520config%2520or%2520the%2520default%2520interface%2520to%2520use%2520for%2520OVS%2520internal%2520port%250A%2520%2520%2523%2520this%2520prevents%2520us%2520from%2520getting%2520a%2520different%2520DHCP%2520lease%2520and%2520dropping%2520connection%250A%2520%2520if%2520!%2520iface_mac%253D%2524(%253C%2522%252Fsys%252Fclass%252Fnet%252F%2524%257Biface%257D%252Faddress%2522)%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Unable%2520to%2520determine%2520default%2520interface%2520MAC%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%250A%2520%2520echo%2520%2522MAC%2520address%2520found%2520for%2520iface%253A%2520%2524%257Biface%257D%253A%2520%2524%257Biface_mac%257D%2522%250A%250A%2520%2520%2523%2520find%2520MTU%2520from%2520original%2520iface%250A%2520%2520iface_mtu%253D%2524(ip%2520link%2520show%2520%2522%2524iface%2522%2520%257C%2520awk%2520'%257Bprint%2520%25245%253B%2520exit%257D')%250A%2520%2520if%2520%255B%255B%2520-z%2520%2522%2524iface_mtu%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Unable%2520to%2520determine%2520default%2520interface%2520MTU%252C%2520defaulting%2520to%25201500%2522%250A%2520%2520%2520%2520iface_mtu%253D1500%250A%2520%2520else%250A%2520%2520%2520%2520echo%2520%2522MTU%2520found%2520for%2520iface%253A%2520%2524%257Biface%257D%253A%2520%2524%257Biface_mtu%257D%2522%250A%2520%2520fi%250A%250A%2520%2520%2523%2520store%2520old%2520conn%2520for%2520later%250A%2520%2520old_conn%253D%2524(nmcli%2520--fields%2520UUID%252CDEVICE%2520conn%2520show%2520--active%2520%257C%2520awk%2520%2522%252F%255Cs%2524%257Biface%257D%255Cs*%255C%2524%252F%2520%257Bprint%2520%255C%25241%257D%2522)%250A%250A%2520%2520if%2520%255B%255B%2520-z%2520%2522%2524old_conn%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520cannot%2520find%2520connection%2520for%2520interface%253A%2520%2524%257Biface%257D%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%250A%2520%2520%2523%2520create%2520bridge%250A%2520%2520if%2520!%2520nmcli%2520connection%2520show%2520%2522%2524bridge_name%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520%2522%2524bridge_name%2522%250A%2520%2520%2520%2520add_nm_conn%2520%2522%2524bridge_name%2522%2520type%2520ovs-bridge%2520conn.interface%2520%2522%2524bridge_name%2522%2520802-3-ethernet.mtu%2520%2524%257Biface_mtu%257D%2520%255C%250A%2520%2520%2520%2520connection.autoconnect-slaves%25201%250A%2520%2520fi%250A%250A%2520%2520%2523%2520find%2520default%2520port%2520to%2520add%2520to%2520bridge%250A%2520%2520if%2520!%2520nmcli%2520connection%2520show%2520%2522%2524default_port_name%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-port%2520%2522%2524bridge_name%2522%2520%2524%257Biface%257D%250A%2520%2520%2520%2520add_nm_conn%2520%2522%2524default_port_name%2522%2520type%2520ovs-port%2520conn.interface%2520%2524%257Biface%257D%2520slave-type%2520ovs-bridge%2520master%2520%2522%2524bridge_name%2522%2520%255C%250A%2520%2520%2520%2520connection.autoconnect-slaves%25201%250A%2520%2520fi%250A%250A%2520%2520if%2520!%2520nmcli%2520connection%2520show%2520%2522%2524ovs_port%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-port%2520%2522%2524bridge_name%2522%2520%2522%2524bridge_name%2522%250A%2520%2520%2520%2520add_nm_conn%2520%2522%2524ovs_port%2522%2520type%2520ovs-port%2520conn.interface%2520%2522%2524bridge_name%2522%2520slave-type%2520ovs-bridge%2520master%2520%2522%2524bridge_name%2522%250A%2520%2520fi%250A%250A%2520%2520extra_phys_args%253D()%250A%2520%2520%2523%2520check%2520if%2520this%2520interface%2520is%2520a%2520vlan%252C%2520bond%252C%2520team%252C%2520or%2520ethernet%2520type%250A%2520%2520if%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.type%2520conn%2520show%2520%2524%257Bold_conn%257D)%2522%2520%253D%253D%2520%2522vlan%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface_type%253Dvlan%250A%2520%2520%2520%2520vlan_id%253D%2524(%2524NMCLI_GET_VALUE%2520vlan.id%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524vlan_id%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520unable%2520to%2520determine%2520vlan_id%2520for%2520vlan%2520connection%253A%2520%2524%257Bold_conn%257D%2522%250A%2520%2520%2520%2520%2520%2520exit%25201%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520vlan_parent%253D%2524(%2524NMCLI_GET_VALUE%2520vlan.parent%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524vlan_parent%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520unable%2520to%2520determine%2520vlan_parent%2520for%2520vlan%2520connection%253A%2520%2524%257Bold_conn%257D%2522%250A%2520%2520%2520%2520%2520%2520exit%25201%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520if%2520nmcli%2520connection%2520show%2520uuid%2520%2522%2524vlan_parent%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520if%2520the%2520VLAN%2520connection%2520is%2520configured%2520with%2520a%2520connection%2520UUID%2520as%2520parent%252C%2520we%2520need%2520to%2520find%2520the%2520underlying%2520device%250A%2520%2520%2520%2520%2520%2520%2523%2520and%2520create%2520the%2520bridge%2520against%2520it%252C%2520as%2520the%2520parent%2520connection%2520can%2520be%2520replaced%2520by%2520another%2520bridge.%250A%2520%2520%2520%2520%2520%2520vlan_parent%253D%2524(%2524NMCLI_GET_VALUE%2520GENERAL.DEVICES%2520conn%2520show%2520uuid%2520%2524%257Bvlan_parent%257D)%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520extra_phys_args%253D(%2520dev%2520%2522%2524%257Bvlan_parent%257D%2522%2520id%2520%2522%2524%257Bvlan_id%257D%2522%2520)%250A%2520%2520elif%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.type%2520conn%2520show%2520%2524%257Bold_conn%257D)%2522%2520%253D%253D%2520%2522bond%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface_type%253Dbond%250A%2520%2520%2520%2520%2523%2520check%2520bond%2520options%250A%2520%2520%2520%2520bond_opts%253D%2524(%2524NMCLI_GET_VALUE%2520bond.options%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524bond_opts%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520extra_phys_args%252B%253D(%2520bond.options%2520%2522%2524%257Bbond_opts%257D%2522%2520)%250A%2520%2520%2520%2520%2520%2520MODE_REGEX%253D%2522(%255E%257C%252C)mode%253Dactive-backup(%252C%257C%2524)%2522%250A%2520%2520%2520%2520%2520%2520MAC_REGEX%253D%2522(%255E%257C%252C)fail_over_mac%253D(1%257Cactive%257C2%257Cfollow)(%252C%257C%2524)%2522%250A%2520%2520%2520%2520%2520%2520if%2520%255B%255B%2520%2524bond_opts%2520%253D~%2520%2524MODE_REGEX%2520%255D%255D%2520%2526%2526%2520%255B%255B%2520%2524bond_opts%2520%253D~%2520%2524MAC_REGEX%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520clone_mac%253D0%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%2520%2520elif%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.type%2520conn%2520show%2520%2524%257Bold_conn%257D)%2522%2520%253D%253D%2520%2522team%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface_type%253Dteam%250A%2520%2520%2520%2520%2523%2520check%2520team%2520config%2520options%250A%2520%2520%2520%2520team_config_opts%253D%2524(%2524NMCLI_GET_VALUE%2520team.config%2520-e%2520no%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524team_config_opts%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520team.config%2520is%2520json%252C%2520remove%2520spaces%2520to%2520avoid%2520problems%2520later%2520on%250A%2520%2520%2520%2520%2520%2520extra_phys_args%252B%253D(%2520team.config%2520%2522%2524%257Bteam_config_opts%252F%252F%255B%255B%253Aspace%253A%255D%255D%252F%257D%2522%2520)%250A%2520%2520%2520%2520%2520%2520team_mode%253D%2524(echo%2520%2522%2524%257Bteam_config_opts%257D%2522%2520%257C%2520jq%2520-r%2520%2522.runner.name%2520%252F%252F%2520empty%2522)%250A%2520%2520%2520%2520%2520%2520team_mac_policy%253D%2524(echo%2520%2522%2524%257Bteam_config_opts%257D%2522%2520%257C%2520jq%2520-r%2520%2522.runner.hwaddr_policy%2520%252F%252F%2520empty%2522)%250A%2520%2520%2520%2520%2520%2520MAC_REGEX%253D%2522(by_active%257Conly_active)%2522%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524team_mode%2522%2520%253D%2520%2522activebackup%2522%2520%255D%2520%2526%2526%2520%255B%255B%2520%2522%2524team_mac_policy%2522%2520%253D~%2520%2524MAC_REGEX%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520clone_mac%253D0%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%2520%2520elif%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.type%2520conn%2520show%2520%2524%257Bold_conn%257D)%2522%2520%253D%253D%2520%2522tun%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface_type%253Dtun%250A%2520%2520%2520%2520tun_mode%253D%2524(%2524NMCLI_GET_VALUE%2520tun.mode%2520-e%2520no%2520connection%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520extra_phys_args%252B%253D(%2520tun.mode%2520%2522%2524%257Btun_mode%257D%2522%2520)%250A%2520%2520elif%2520%255B%2520%2522%2524(%2524NMCLI_GET_VALUE%2520connection.type%2520conn%2520show%2520%2524%257Bold_conn%257D)%2522%2520%253D%253D%2520%2522bridge%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface_type%253Dbridge%250A%2520%2520else%250A%2520%2520%2520%2520iface_type%253D802-3-ethernet%250A%2520%2520fi%250A%250A%2520%2520if%2520%255B%2520!%2520%2522%2524%257Bclone_mac%253A-%257D%2522%2520%253D%2520%25220%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520In%2520active-backup%2520link%2520aggregation%252C%2520with%2520fail_over_mac%2520mode%2520enabled%252C%250A%2520%2520%2520%2520%2523%2520cloning%2520the%2520mac%2520address%2520is%2520not%2520supported.%2520It%2520is%2520possible%2520then%2520that%250A%2520%2520%2520%2520%2523%2520br-ex%2520has%2520a%2520different%2520mac%2520address%2520than%2520the%2520bond%2520which%2520might%2520be%250A%2520%2520%2520%2520%2523%2520troublesome%2520on%2520some%2520platforms%2520where%2520the%2520nic%2520won't%2520accept%2520packets%2520with%250A%2520%2520%2520%2520%2523%2520a%2520different%2520destination%2520mac.%2520But%2520nobody%2520has%2520complained%2520so%2520far%2520so%2520go%2520on%250A%2520%2520%2520%2520%2523%2520with%2520what%2520we%2520got.%2520%250A%2520%2520%2520%2520%250A%2520%2520%2520%2520%2523%2520Do%2520set%2520it%2520though%2520for%2520other%2520link%2520aggregation%2520configurations%2520where%2520the%250A%2520%2520%2520%2520%2523%2520mac%2520address%2520would%2520otherwise%2520depend%2520on%2520enslave%2520order%2520for%2520which%2520we%2520have%250A%2520%2520%2520%2520%2523%2520no%2520control%2520going%2520forward.%250A%2520%2520%2520%2520extra_phys_args%252B%253D(%2520802-3-ethernet.cloned-mac-address%2520%2522%2524%257Biface_mac%257D%2522%2520)%250A%2520%2520fi%250A%250A%2520%2520%2523%2520use%2520%2524%257Bextra_phys_args%255B%2540%255D%252B%2522%2524%257Bextra_phys_args%255B%2540%255D%257D%2522%257D%2520instead%2520of%2520%2524%257Bextra_phys_args%255B%2540%255D%257D%2520to%2520be%2520compatible%2520with%2520bash%25204.2%2520in%2520RHEL7.9%250A%2520%2520if%2520!%2520nmcli%2520connection%2520show%2520%2522%2524bridge_interface_name%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520destroy%2520interface%2520%2524%257Biface%257D%250A%2520%2520%2520%2520ovs_default_port_conn%253D%2524(%2524NMCLI_GET_VALUE%2520connection.uuid%2520conn%2520show%2520%2522%2524default_port_name%2522)%250A%2520%2520%2520%2520add_nm_conn%2520%2522%2524bridge_interface_name%2522%2520type%2520%2524%257Biface_type%257D%2520conn.interface%2520%2524%257Biface%257D%2520master%2520%2522%2524ovs_default_port_conn%2522%2520%255C%250A%2520%2520%2520%2520%2520%2520slave-type%2520ovs-port%2520connection.autoconnect-priority%2520100%2520connection.autoconnect-slaves%25201%2520802-3-ethernet.mtu%2520%2524%257Biface_mtu%257D%2520%255C%250A%2520%2520%2520%2520%2520%2520%2524%257Bextra_phys_args%255B%2540%255D%252B%2522%2524%257Bextra_phys_args%255B%2540%255D%257D%2522%257D%250A%2520%2520fi%250A%250A%2520%2520%2523%2520Get%2520the%2520new%2520connection%2520uuids%250A%2520%2520new_conn%253D%2524(%2524NMCLI_GET_VALUE%2520connection.uuid%2520conn%2520show%2520%2522%2524bridge_interface_name%2522)%250A%2520%2520ovs_port_conn%253D%2524(%2524NMCLI_GET_VALUE%2520connection.uuid%2520conn%2520show%2520%2522%2524ovs_port%2522)%250A%250A%2520%2520%2523%2520Update%2520connections%2520with%2520master%2520property%2520set%2520to%2520use%2520the%2520new%2520connection%250A%2520%2520replace_connection_master%2520%2524old_conn%2520%2524new_conn%250A%2520%2520replace_connection_master%2520%2524iface%2520%2524new_conn%250A%250A%2520%2520ipv4_method%253D%2524(%2524NMCLI_GET_VALUE%2520ipv4.method%2520conn%2520show%2520%2522%2524old_conn%2522)%250A%2520%2520ipv6_method%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.method%2520conn%2520show%2520%2522%2524old_conn%2522)%250A%250A%2520%2520ipv4_addresses%253D%2524(%2524NMCLI_GET_VALUE%2520ipv4.addresses%2520conn%2520show%2520%2522%2524old_conn%2522)%250A%2520%2520ipv6_addresses%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.addresses%2520conn%2520show%2520%2522%2524old_conn%2522)%250A%250A%2520%2520%2523%2520Warn%2520about%2520an%2520invalid%2520MTU%2520that%2520will%2520most%2520likely%2520fail%2520in%2520one%2520way%2520or%250A%2520%2520%2523%2520another%250A%2520%2520if%2520%255B%2520%2524%257Biface_mtu%257D%2520-lt%25201280%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524%257Bipv6_method%257D%2522%2520!%253D%2520%2522disabled%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520MTU%2520%2524%257Biface_mtu%257D%2520is%2520lower%2520than%2520the%2520minimum%2520required%2520of%25201280%2520for%2520IPv6%2522%250A%2520%2520fi%250A%250A%2520%2520if%2520!%2520nmcli%2520connection%2520show%2520%2522%2524ovs_interface%2522%2520%2526%253E%2520%252Fdev%252Fnull%253B%2520then%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520destroy%2520interface%2520%2522%2524bridge_name%2522%250A%2520%2520%2520%2520%2523%2520Clone%2520the%2520connection%2520in%2520case%2520the%2520method%2520is%2520manual%2520or%2520in%2520case%2520the%2520an%2520address%2520is%2520set%2520(DHCP%2520%252B%2520static%2520IP)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Bipv4_method%257D%2522%2520%253D%2520%2522manual%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524%257Bipv4_addresses%257D%2522%2520!%253D%2520%2522%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524%257Bipv6_method%257D%2522%2520%253D%2520%2522manual%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524%257Bipv6_addresses%257D%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Static%2520IP%2520addressing%2520detected%2520on%2520default%2520gateway%2520connection%253A%2520%2524%257Bold_conn%257D%2522%250A%2520%2520%2520%2520%2520%2520%2523%2520clone%2520the%2520old%2520connection%2520to%2520get%2520the%2520address%2520settings%250A%2520%2520%2520%2520%2520%2520%2523%2520prefer%2520cloning%2520vs%2520copying%2520the%2520connection%2520file%2520to%2520avoid%2520problems%2520with%2520selinux%250A%2520%2520%2520%2520%2520%2520clone_nm_conn%2520%2522%2524%257Bold_conn%257D%2522%2520%2522%2524%257Bovs_interface%257D%2522%250A%2520%2520%2520%2520%2520%2520shopt%2520-s%2520nullglob%250A%2520%2520%2520%2520%2520%2520new_conn_files%253D(%2524%257BNM_CONN_RUN_PATH%257D%252F%2522%2524%257Bovs_interface%257D%2522*)%250A%2520%2520%2520%2520%2520%2520shopt%2520-u%2520nullglob%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2524%257B%2523new_conn_files%255B%2540%255D%257D%2520-ne%25201%2520%255D%2520%257C%257C%2520%255B%2520!%2520-f%2520%2522%2524%257Bnew_conn_files%255B0%255D%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520could%2520not%2520find%2520%2524%257Bovs_interface%257D%2520conn%2520file%2520after%2520cloning%2520from%2520%2524%257Bold_conn%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520exit%25201%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520new_conn_file%253D%2522%2524%257Bnew_conn_files%255B0%255D%257D%2522%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520modify%2520the%2520connection%2520type%2520directly%2520because%2520it%2520can't%2520be%2520modified%250A%2520%2520%2520%2520%2520%2520%2523%2520through%2520nmcli%250A%2520%2520%2520%2520%2520%2520sed%2520-i%2520'%252F%255E%255C%255Bconnection%255C%255D%2524%252F%252C%252F%255E%255C%255B%252F%2520s%252F%255Etype%253D.*%2524%252Ftype%253Dovs-interface%252F'%2520%2524%257Bnew_conn_file%257D%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520modify%2520some%2520more%2520settings%2520through%2520nmcli%250A%2520%2520%2520%2520%2520%2520mod_nm_conn%2520%2522%2524%257Bovs_interface%257D%2522%2520conn.interface%2520%2522%2524bridge_name%2522%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520connection.multi-connect%2520%2522%2522%2520connection.autoconnect%2520no%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520connection.master%2520%2522%2524ovs_port_conn%2522%2520connection.slave-type%2520ovs-port%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520ovs-interface.type%2520internal%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520802-3-ethernet.mtu%2520%2524%257Biface_mtu%257D%2520802-3-ethernet.cloned-mac-address%2520%2524%257Biface_mac%257D%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520ipv4.route-metric%2520%2522%2524%257Bbridge_metric%257D%2522%2520ipv6.route-metric%2520%2522%2524%257Bbridge_metric%257D%2522%250A%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Loaded%2520new%2520%2524ovs_interface%2520connection%2520file%253A%2520%2524%257Bnew_conn_file%257D%2522%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520extra_if_brex_args%253D%2522%2522%250A%2520%2520%2520%2520%2520%2520%2523%2520check%2520if%2520interface%2520had%2520ipv4%252Fipv6%2520addresses%2520assigned%250A%2520%2520%2520%2520%2520%2520num_ipv4_addrs%253D%2524(ip%2520-j%2520a%2520show%2520dev%2520%2524%257Biface%257D%2520%257C%2520jq%2520%2522.%255B0%255D.addr_info%2520%257C%2520map(.%2520%257C%2520select(.family%2520%253D%253D%2520%255C%2522inet%255C%2522))%2520%257C%2520length%2522)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524num_ipv4_addrs%2522%2520-gt%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv4.may-fail%2520no%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520IPV6%2520should%2520have%2520at%2520least%2520a%2520link%2520local%2520address.%2520Check%2520for%2520more%2520than%25201%2520to%2520see%2520if%2520there%2520is%2520an%250A%2520%2520%2520%2520%2520%2520%2523%2520assigned%2520address.%250A%2520%2520%2520%2520%2520%2520num_ip6_addrs%253D%2524(ip%2520-j%2520a%2520show%2520dev%2520%2524%257Biface%257D%2520%257C%2520jq%2520%2522.%255B0%255D.addr_info%2520%257C%2520map(.%2520%257C%2520select(.family%2520%253D%253D%2520%255C%2522inet6%255C%2522%2520and%2520.scope%2520!%253D%2520%255C%2522link%255C%2522))%2520%257C%2520length%2522)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524num_ip6_addrs%2522%2520-gt%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv6.may-fail%2520no%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520check%2520for%2520dhcp%2520client%2520ids%250A%2520%2520%2520%2520%2520%2520dhcp_client_id%253D%2524(%2524NMCLI_GET_VALUE%2520ipv4.dhcp-client-id%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524dhcp_client_id%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv4.dhcp-client-id%2520%2524%257Bdhcp_client_id%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520dhcp6_client_id%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.dhcp-duid%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524dhcp6_client_id%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv6.dhcp-duid%2520%2524%257Bdhcp6_client_id%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520ipv6_addr_gen_mode%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.addr-gen-mode%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524ipv6_addr_gen_mode%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv6.addr-gen-mode%2520%2524%257Bipv6_addr_gen_mode%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520check%2520for%2520static%2520DNS%2520address%250A%2520%2520%2520%2520%2520%2520ipv4_dns%253D%2524(%2524NMCLI_GET_VALUE%2520ipv4.dns%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524ipv4_dns%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv4.dns%2520%2524%257Bipv4_dns%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520ipv6_dns%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.dns%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524ipv6_dns%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv6.dns%2520%2524%257Bipv6_dns%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520check%2520for%2520auto-dns%250A%2520%2520%2520%2520%2520%2520ipv4_auto_dns%253D%2524(%2524NMCLI_GET_VALUE%2520ipv4.ignore-auto-dns%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524ipv4_auto_dns%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv4.ignore-auto-dns%2520%2524%257Bipv4_auto_dns%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520ipv6_auto_dns%253D%2524(%2524NMCLI_GET_VALUE%2520ipv6.ignore-auto-dns%2520conn%2520show%2520%2524%257Bold_conn%257D)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-n%2520%2522%2524ipv6_auto_dns%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520extra_if_brex_args%252B%253D%2522ipv6.ignore-auto-dns%2520%2524%257Bipv6_auto_dns%257D%2520%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2520%2520add_nm_conn%2520%2522%2524ovs_interface%2522%2520type%2520ovs-interface%2520slave-type%2520ovs-port%2520conn.interface%2520%2522%2524bridge_name%2522%2520master%2520%2522%2524ovs_port_conn%2522%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520802-3-ethernet.mtu%2520%2524%257Biface_mtu%257D%2520802-3-ethernet.cloned-mac-address%2520%2524%257Biface_mac%257D%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520ipv4.method%2520%2522%2524%257Bipv4_method%257D%2522%2520ipv4.route-metric%2520%2522%2524%257Bbridge_metric%257D%2522%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520ipv6.method%2520%2522%2524%257Bipv6_method%257D%2522%2520ipv6.route-metric%2520%2522%2524%257Bbridge_metric%257D%2522%2520%255C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2524%257Bextra_if_brex_args%257D%250A%2520%2520%2520%2520fi%250A%2520%2520fi%250A%250A%2520%2520configure_driver_options%2520%2522%2524%257Biface%257D%2522%250A%257D%250A%250A%2523%2520Used%2520to%2520remove%2520a%2520bridge%250Aremove_ovn_bridges()%2520%257B%250A%2520%2520bridge_name%253D%2524%257B1%257D%250A%2520%2520port_name%253D%2524%257B2%257D%250A%250A%2520%2520%2523%2520Remove%2520the%2520keyfiles%2520from%2520known%2520configuration%2520paths%250A%2520%2520update_nm_conn_run_files%2520%2524%257Bbridge_name%257D%2520%2524%257Bport_name%257D%250A%2520%2520rm_nm_conn_files%250A%2520%2520update_nm_conn_set_files%2520%2524%257Bbridge_name%257D%2520%2524%257Bport_name%257D%250A%2520%2520rm_nm_conn_files%250A%2520%2520%2523%2520Shouldn't%2520be%2520necessary%252C%2520workaround%2520for%2520https%253A%252F%252Fissues.redhat.com%252Fbrowse%252FOCPBUGS-41489%250A%2520%2520update_nm_conn_etc_files%2520%2524%257Bbridge_name%257D%2520%2524%257Bport_name%257D%250A%2520%2520rm_nm_conn_files%250A%250A%2520%2520%2523%2520NetworkManager%2520will%2520not%2520remove%2520%2524%257Bbridge_name%257D%2520if%2520it%2520has%2520the%2520patch%2520port%2520created%2520by%2520ovn-kubernetes%250A%2520%2520%2523%2520so%2520remove%2520explicitly%250A%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520%2524%257Bbridge_name%257D%250A%257D%250A%250A%2523%2520Removes%2520any%2520previous%2520ovs%2520configuration%250Aremove_all_ovn_bridges()%2520%257B%250A%2520%2520echo%2520%2522Reverting%2520any%2520previous%2520OVS%2520configuration%2522%250A%2520%2520%250A%2520%2520remove_ovn_bridges%2520br-ex%2520phys0%250A%2520%2520remove_ovn_bridges%2520br-ex1%2520phys1%250A%2520%2520%250A%2520%2520echo%2520%2522OVS%2520configuration%2520successfully%2520reverted%2522%250A%257D%250A%250A%2523%2520Reloads%2520NM%2520NetworkManager%2520profiles%2520if%2520any%2520configuration%2520change%2520was%2520done.%250A%2523%2520Accepts%2520a%2520list%2520of%2520devices%2520that%2520should%2520be%2520re-connect%2520after%2520reload.%250Areload_profiles_nm()%2520%257B%250A%2520%2520if%2520%255B%2520%2524%257Bnm_config_changed%253A-0%257D%2520-eq%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520no%2520config%2520was%2520changed%252C%2520no%2520need%2520to%2520reload%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%250A%2520%2520%2523%2520reload%2520profiles%250A%2520%2520nmcli%2520connection%2520reload%250A%250A%2520%2520%2523%2520precautionary%2520sleep%2520of%252010s%2520(default%2520timeout%2520of%2520NM%2520to%2520bring%2520down%2520devices)%250A%2520%2520sleep%252010%250A%250A%2520%2520%2523%2520After%2520reload%252C%2520devices%2520that%2520were%2520already%2520connected%2520should%2520connect%2520again%250A%2520%2520%2523%2520if%2520any%2520profile%2520is%2520available.%2520If%2520no%2520profile%2520is%2520available%252C%2520a%2520device%2520can%250A%2520%2520%2523%2520remain%2520disconnected%2520and%2520we%2520have%2520to%2520explicitly%2520connect%2520it%2520so%2520that%2520a%250A%2520%2520%2523%2520profile%2520is%2520generated.%2520This%2520can%2520happen%2520for%2520physical%2520devices%2520but%2520should%250A%2520%2520%2523%2520not%2520happen%2520for%2520software%2520devices%2520as%2520those%2520always%2520require%2520a%2520profile.%250A%2520%2520for%2520dev%2520in%2520%2524%2540%253B%2520do%250A%2520%2520%2520%2520%2523%2520Only%2520attempt%2520to%2520connect%2520a%2520disconnected%2520device%250A%2520%2520%2520%2520local%2520connected_state%253D%2524(%2524NMCLI_GET_VALUE%2520GENERAL.STATE%2520device%2520show%2520%2522%2524dev%2522%2520%257C%257C%2520echo%2520%2522%2522)%250A%2520%2520%2520%2520if%2520%255B%255B%2520%2522%2524connected_state%2522%2520%253D~%2520%2522disconnected%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520keep%2520track%2520if%2520a%2520profile%2520by%2520the%2520same%2520name%2520as%2520the%2520device%2520existed%2520%250A%2520%2520%2520%2520%2520%2520%2523%2520before%2520we%2520attempt%2520activation%250A%2520%2520%2520%2520%2520%2520local%2520named_profile_existed%253D%2524(%255B%2520-f%2520%2522%2524%257BNM_CONN_CONF_PATH%257D%252F%2524%257Bdev%257D%2522%2520%255D%2520%257C%257C%2520%255B%2520-f%2520%2522%2524%257BNM_CONN_CONF_PATH%257D%252F%2524%257Bdev%257D.nmconnection%2522%2520%255D%2520%2526%2526%2520echo%2520%2522yes%2522)%250A%2520%2520%2520%2520%2520%2520%250A%2520%2520%2520%2520%2520%2520for%2520i%2520in%2520%257B1..10%257D%253B%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Attempt%2520%2524i%2520to%2520connect%2520device%2520%2524dev%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520nmcli%2520device%2520connect%2520%2522%2524dev%2522%2520%2526%2526%2520break%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520sleep%25205%250A%2520%2520%2520%2520%2520%2520done%250A%250A%2520%2520%2520%2520%2520%2520%2523%2520if%2520a%2520profile%2520did%2520not%2520exist%2520before%2520but%2520does%2520now%252C%2520it%2520was%2520generated%250A%2520%2520%2520%2520%2520%2520%2523%2520but%2520we%2520want%2520it%2520to%2520be%2520ephemeral%252C%2520so%2520move%2520it%2520back%2520to%2520%252Frun%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520!%2520%2522%2524named_profile_existed%2522%2520%253D%2520%2522yes%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520MANAGED_NM_CONN_FILES%253D(%2522%2524%257BNM_CONN_CONF_PATH%257D%252F%2524%257Bdev%257D%2522%2520%2522%2524%257BNM_CONN_CONF_PATH%257D%252F%2524%257Bdev%257D.nmconnection%2522)%250A%2520%2520%2520%2520%2520%2520%2520%2520copy_nm_conn_files%2520%2522%2524%257BNM_CONN_RUN_PATH%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520rm_nm_conn_files%250A%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520reload%2520profiles%2520so%2520that%2520NM%2520notices%2520that%2520some%2520might%2520have%2520been%2520moved%250A%2520%2520%2520%2520%2520%2520%2520%2520nmcli%2520connection%2520reload%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520echo%2520%2522Waiting%2520for%2520interface%2520%2524dev%2520to%2520activate...%2522%250A%2520%2520%2520%2520%2523%2520don't%2520use%2520--escape%2520no%252C%2520we%2520use%2520%253A%2520delimiter%2520here%250A%2520%2520%2520%2520if%2520!%2520timeout%252060%2520bash%2520-c%2520%2522while%2520!%2520nmcli%2520-g%2520DEVICE%252CSTATE%2520c%2520%257C%2520grep%2520%2522'%2522'%2522%2524dev%2522%253Aactivated'%2522'%2522%253B%2520do%2520sleep%25205%253B%2520done%2522%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520%2524dev%2520did%2520not%2520activate%2522%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%250A%2520%2520nm_config_changed%253D0%250A%257D%250A%250A%2523%2520Removes%2520all%2520configuration%2520and%2520reloads%2520NM%2520if%2520necessary%250Arollback_nm()%2520%257B%250A%2520%2520phys0%253D%2524(get_bridge_physical_interface%2520ovs-if-phys0)%250A%2520%2520phys1%253D%2524(get_bridge_physical_interface%2520ovs-if-phys1)%250A%2520%2520%250A%2520%2520%2523%2520Revert%2520changes%2520made%2520by%2520%252Fusr%252Flocal%252Fbin%252Fconfigure-ovs.sh%2520during%2520SDN%2520migration.%250A%2520%2520remove_all_ovn_bridges%250A%2520%2520%250A%2520%2520%2523%2520reload%2520profiles%2520so%2520that%2520NM%2520notices%2520that%2520some%2520were%2520removed%250A%2520%2520reload_profiles_nm%2520%2522%2524phys0%2522%2520%2522%2524phys1%2522%250A%257D%250A%250A%2523%2520Add%2520a%2520temporary%2520deactivated%2520connection%2520profile%2520%250A%2523%2520First%2520argument%2520is%2520the%2520connection%2520name%2520folowed%2520by%2520arguments%2520passed%2520to%250A%2523%2520%2560nmcli%2520connection%2520add%2560%250Aadd_nm_conn()%2520%257B%250A%2520%2520%2523%2520Use%2520%2560save%2520no%2560%2520to%2520add%2520a%2520temporary%2520profile%250A%2520%2520nmcli%2520c%2520add%2520save%2520no%2520con-name%2520%2522%2524%2540%2522%2520connection.autoconnect%2520no%250A%257D%250A%250A%2523%2520Modify%2520a%2520temporary%2520connection%2520profile%2520%250A%2523%2520First%2520argument%2520is%2520the%2520connection%2520name%2520followed%2520by%2520arguments%2520passed%2520to%250A%2523%2520%2560nmcli%2520connection%2520modify%2560%250Amod_nm_conn()%2520%257B%250A%2520%2520%2523%2520the%2520easiest%2520thing%2520to%2520do%2520here%2520would%2520be%2520to%2520use%2520%2560nmcli%2520c%2520mod%2520--temporary%2560%250A%2520%2520%2523%2520but%2520there%2520is%2520a%2520bug%2520in%2520selinux%2520profiles%2520that%2520denies%2520NM%2520from%2520performing%250A%2520%2520%2523%2520the%2520operation%250A%2520%2520local%2520dst_path%253D%2524%257BNM_CONN_RUN_PATH%257D%252F%25241.nmconnection%250A%2520%2520local%2520src_path%250A%2520%2520src_path%253D%2524(mktemp)%250A%2520%2520shift%250A%2520%2520cat%2520%2522%2524dst_path%2522%2520%253E%2520%2522%2524src_path%2522%250A%2520%2520rm%2520-f%2520%2522%2524dst_path%2522%250A%2520%2520nmcli%2520--offline%2520c%2520mod%2520%2522%2524%2540%2522%2520%253C%2520%2522%2524src_path%2522%2520%253E%2520%2522%2524dst_path%2522%250A%2520%2520rm%2520-f%2520%2522%2524src_path%2522%250A%2520%2520chmod%2520600%2520%2522%2524dst_path%2522%250A%2520%2520nmcli%2520c%2520load%2520%2522%2524dst_path%2522%250A%257D%250A%250A%2523%2520Clone%2520to%2520a%2520temporary%2520connection%2520profile%2520%250A%2523%2520First%2520argument%2520is%2520the%2520connection%2520to%2520clone%252C%2520second%2520argument%2520is%2520the%2520clone%2520name%250Aclone_nm_conn()%2520%257B%250A%2520%2520%2523%2520clone%2520as%2520temporary%2520so%2520that%2520it%2520is%2520generated%2520in%2520NM_CONN_RUN_PATH%250A%2520%2520nmcli%2520connection%2520clone%2520--temporary%2520%2522%25241%2522%2520%2522%25242%2522%2520%2526%253E%2520%252Fdev%252Fnull%250A%257D%250A%250A%2523%2520Activates%2520an%2520ordered%2520set%2520of%2520NM%2520connection%2520profiles%250Aactivate_nm_connections()%2520%257B%250A%2520%2520local%2520connections%253D(%2522%2524%2540%2522)%250A%250A%2520%2520%2523%2520We%2520want%2520autoconnect%2520set%2520for%2520our%2520cloned%2520slave%2520profiles%2520so%2520that%2520they%2520are%250A%2520%2520%2523%2520used%2520over%2520the%2520original%2520profiles%2520if%2520implicitly%2520re-activated%2520with%2520other%250A%2520%2520%2523%2520dependant%2520profiles.%2520Otherwise%2520if%2520a%2520slave%2520activates%2520with%2520an%2520old%2520profile%252C%250A%2520%2520%2523%2520the%2520old%2520master%2520profile%2520might%2520activate%2520as%2520well%252C%2520interfering%2520and%2520causing%250A%2520%2520%2523%2520further%2520activations%2520to%2520fail.%250A%2520%2520%2523%2520Slave%2520interfaces%2520should%2520already%2520be%2520active%2520so%2520setting%2520autoconnect%2520here%250A%2520%2520%2523%2520won't%2520implicitly%2520activate%2520them%2520but%2520there%2520is%2520an%2520edge%2520case%2520where%2520a%2520slave%250A%2520%2520%2523%2520might%2520be%2520inactive%2520(link%2520down%2520for%2520example)%2520and%2520in%2520that%2520case%2520setting%250A%2520%2520%2523%2520autoconnect%2520will%2520cause%2520an%2520implicit%2520activation.%2520This%2520is%2520not%2520necessarily%2520a%250A%2520%2520%2523%2520problem%2520and%2520hopefully%2520we%2520can%2520make%2520sure%2520everything%2520is%2520activated%2520as%2520we%250A%2520%2520%2523%2520want%2520next.%250A%2520%2520for%2520conn%2520in%2520%2522%2524%257Bconnections%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520local%2520slave_type%253D%2524(%2524NMCLI_GET_VALUE%2520connection.slave-type%2520connection%2520show%2520%2522%2524conn%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524slave_type%2522%2520%253D%2520%2522team%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524slave_type%2522%2520%253D%2520%2522bond%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520Work%2520around%2520a%2520Cisco%2520switch%2520issue%253A%2520if%2520a%2520slave%2520is%2520detached%2520from%2520a%2520bond%250A%2520%2520%2520%2520%2520%2520%2523%2520(e.g.%2520during%2520NM%2520reactivation)%2520before%2520LACP%2520negotiation%2520completes%252C%2520the%250A%2520%2520%2520%2520%2520%2520%2523%2520switch%2520may%2520mishandle%2520LACP%2520packets%2520with%2520agg%253D0.%2520To%2520avoid%2520this%252C%2520wait%2520for%250A%2520%2520%2520%2520%2520%2520%2523%2520LACP%2520to%2520finish%2520(only%2520applies%2520to%2520LACP%2520bonds%2520in%2520state%2520UP).%250A%2520%2520%2520%2520%2520%2520slave%253D%2524(nmcli%2520-g%2520connection.interface-name%2520connection%2520show%2520%2522%2524conn%2522)%250A%2520%2520%2520%2520%2520%2520if%2520ip%2520-d%2520link%2520show%2520%2522%2524slave%2522%2520%257C%2520tr%2520'%255Cn'%2520'%2520'%2520%257C%2520grep%2520-q%2520'state%2520UP.*ad_aggregator_id'%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520!%2520timeout%25205%2520bash%2520-c%2520%2522while%2520%255B%2520%255C%2524(ip%2520-d%2520link%2520show%2520%255C%2522%2524slave%255C%2522%2520%257C%2520grep%2520-o%2520%255C%2522collecting%252Cdistributing%255C%2522%2520%257C%2520wc%2520-l)%2520-lt%25202%2520%255D%253B%2520do%2520sleep%25201%253B%2520done%2522%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520LACP%2520negotiation%2520is%2520not%2520yet%2520done%2520on%2520slave%2520%2524conn.%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520mod_nm_conn%2520%2522%2524conn%2522%2520connection.autoconnect%2520yes%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%250A%2520%2520%2523%2520Activate%2520all%2520connections%2520and%2520fail%2520if%2520activation%2520fails%250A%2520%2520%2523%2520For%2520slave%2520connections%2520-%2520for%2520as%2520long%2520as%2520at%2520least%2520one%2520slave%2520that%2520belongs%2520to%2520a%2520bond%252Fteam%250A%2520%2520%2523%2520comes%2520up%252C%2520we%2520should%2520not%2520fail%250A%2520%2520declare%2520-A%2520master_interfaces%250A%2520%2520for%2520conn%2520in%2520%2522%2524%257Bconnections%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520%2523%2520Get%2520the%2520slave%2520type%250A%2520%2520%2520%2520local%2520slave_type%253D%2524(%2524NMCLI_GET_VALUE%2520connection.slave-type%2520connection%2520show%2520%2522%2524conn%2522)%250A%2520%2520%2520%2520local%2520is_slave%253Dfalse%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524slave_type%2522%2520%253D%2520%2522team%2522%2520%255D%2520%257C%257C%2520%255B%2520%2522%2524slave_type%2522%2520%253D%2520%2522bond%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520is_slave%253Dtrue%250A%2520%2520%2520%2520fi%2520%250A%250A%2520%2520%2520%2520%2523%2520For%2520slave%2520interfaces%252C%2520initialize%2520the%2520master%2520interface%2520to%2520false%2520if%2520the%2520key%2520is%2520not%2520yet%2520in%2520the%2520array%250A%2520%2520%2520%2520local%2520master_interface%250A%2520%2520%2520%2520if%2520%2524is_slave%253B%2520then%250A%2520%2520%2520%2520%2520%2520master_interface%253D%2524(%2524NMCLI_GET_VALUE%2520connection.master%2520connection%2520show%2520%2522%2524conn%2522)%250A%2520%2520%2520%2520%2520%2520if%2520!%2520%255B%255B%2520-v%2520%2522master_interfaces%255B%2524master_interface%255D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520master_interfaces%255B%2522%2524master_interface%2522%255D%253Dfalse%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520slaves%2520should%2520implicitly%2520activate%252C%2520give%2520them%2520a%2520chance%2520to%2520do%2520so%250A%2520%2520%2520%2520if%2520%2524is_slave%253B%2520then%250A%2520%2520%2520%2520%2520%2520if%2520!%2520timeout%25205%2520bash%2520-c%2520%2522while%2520!%2520%2524NMCLI_GET_VALUE%2520GENERAL.STATE%2520conn%2520show%2520%2522%2524conn%2522%2520%257C%2520grep%2520activated%253B%2520do%2520sleep%25201%253B%2520done%2522%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520slave%2520%2524conn%2520did%2520not%2520implicitly%2520activate%2520in%25205s%252C%2520activating%2520explicitly.%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Do%2520not%2520activate%2520interfaces%2520that%2520are%2520already%2520active%250A%2520%2520%2520%2520%2523%2520But%2520set%2520the%2520entry%2520in%2520master_interfaces%2520to%2520true%2520if%2520this%2520is%2520a%2520slave%250A%2520%2520%2520%2520%2523%2520Also%2520set%2520autoconnect%2520to%2520yes%250A%2520%2520%2520%2520local%2520active_state%253D%2524(%2524NMCLI_GET_VALUE%2520GENERAL.STATE%2520conn%2520show%2520%2522%2524conn%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524active_state%2522%2520%253D%253D%2520%2522activated%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Connection%2520%2524conn%2520already%2520activated%2522%250A%2520%2520%2520%2520%2520%2520if%2520%2524is_slave%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520master_interfaces%255B%2524master_interface%255D%253Dtrue%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520mod_nm_conn%2520%2522%2524conn%2522%2520connection.autoconnect%2520yes%250A%2520%2520%2520%2520%2520%2520continue%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Activate%2520all%2520interfaces%2520that%2520are%2520not%2520yet%2520active%250A%2520%2520%2520%2520for%2520i%2520in%2520%257B1..10%257D%253B%2520do%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Attempt%2520%2524i%2520to%2520bring%2520up%2520connection%2520%2524conn%2522%250A%2520%2520%2520%2520%2520%2520nmcli%2520conn%2520up%2520%2522%2524conn%2522%2520%2526%2526%2520s%253D0%2520%2526%2526%2520break%2520%257C%257C%2520s%253D%2524%253F%250A%2520%2520%2520%2520%2520%2520sleep%25205%250A%2520%2520%2520%2520done%250A%2520%2520%2520%2520if%2520%255B%2520%2524s%2520-eq%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Brought%2520up%2520connection%2520%2524conn%2520successfully%2522%250A%2520%2520%2520%2520%2520%2520if%2520%2524is_slave%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520master_interfaces%255B%2522%2524master_interface%2522%255D%253Dtrue%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520elif%2520!%2520%2524is_slave%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520Cannot%2520bring%2520up%2520connection%2520%2524conn%2520after%2520%2524i%2520attempts%2522%250A%2520%2520%2520%2520%2520%2520return%2520%2524s%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520mod_nm_conn%2520%2522%2524conn%2522%2520connection.autoconnect%2520yes%250A%2520%2520done%250A%2520%2520%2523%2520Check%2520that%2520all%2520master%2520interfaces%2520report%2520at%2520least%2520a%2520single%2520active%2520slave%250A%2520%2520%2523%2520Note%253A%2520associative%2520arrays%2520require%2520an%2520exclamation%2520mark%2520when%2520looping%250A%2520%2520for%2520i%2520in%2520%2522%2524%257B!master_interfaces%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520if%2520!%2520%2524%257Bmaster_interfaces%255B%2522%2524i%2522%255D%257D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520Cannot%2520bring%2520up%2520any%2520slave%2520interface%2520for%2520master%2520interface%253A%2520%2524i%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520return%25201%250A%2520%2520%2520%2520fi%250A%2520%2520done%250A%257D%250A%250A%2523%2520Accepts%2520parameters%2520%2524iface_default_hint_file%252C%2520%2524iface%250A%2523%2520Writes%2520content%2520of%2520%2524iface%2520into%2520%2524iface_default_hint_file%250Awrite_iface_default_hint()%2520%257B%250A%2520%2520local%2520iface_default_hint_file%253D%2522%25241%2522%250A%2520%2520local%2520iface%253D%2522%25242%2522%250A%250A%2520%2520echo%2520%2522%2524%257Biface%257D%2522%2520%253E%257C%2520%2522%2524%257Biface_default_hint_file%257D%2522%250A%257D%250A%250A%2523%2520Accepts%2520parameters%2520%2524iface_default_hint_file%250A%2523%2520Returns%2520the%2520stored%2520interface%2520default%2520hint%2520if%2520the%2520hint%2520is%2520non-empty%252C%250A%2523%2520not%2520br-ex%252C%2520not%2520br-ex1%2520and%2520if%2520the%2520interface%2520can%2520be%2520found%2520in%2520%252Fsys%252Fclass%252Fnet%250Aget_iface_default_hint()%2520%257B%250A%2520%2520local%2520iface_default_hint_file%253D%25241%250A%2520%2520if%2520%255B%2520-f%2520%2522%2524%257Biface_default_hint_file%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520local%2520iface_default_hint%253D%2524(cat%2520%2522%2524%257Biface_default_hint_file%257D%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520!%253D%2520%2522%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%2520%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520!%253D%2520%2522br-ex%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%2520%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520!%253D%2520%2522br-ex1%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%2520%2520%255B%2520-d%2520%2522%252Fsys%252Fclass%252Fnet%252F%2524%257Biface_default_hint%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522%2524%257Biface_default_hint%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520return%250A%2520%2520%2520%2520fi%250A%2520%2520fi%250A%2520%2520echo%2520%2522%2522%250A%257D%250A%250Aget_ip_from_ip_hint_file()%2520%257B%250A%2520%2520local%2520ip_hint_file%253D%2522%25241%2522%250A%2520%2520if%2520%255B%255B%2520!%2520-f%2520%2522%2524%257Bip_hint_file%257D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%2520%2520ip_hint%253D%2524(cat%2520%2522%2524%257Bip_hint_file%257D%2522)%250A%2520%2520echo%2520%2522%2524%257Bip_hint%257D%2522%250A%257D%250A%250A%2523%2520This%2520function%2520waits%2520for%2520ip%2520address%2520of%2520br-ex%2520to%2520be%2520bindable%2520only%2520in%2520case%2520of%2520ipv6%250A%2523%2520This%2520is%2520workaround%2520for%2520OCPBUGS-673%2520as%2520it%2520will%2520not%2520allow%2520starting%2520crio%250A%2523%2520before%2520address%2520is%2520bindable%250Atry_to_bind_ipv6_address()%2520%257B%250A%2520%2520%2523%2520Retry%2520for%25201%2520minute%250A%2520%2520retries%253D60%250A%2520%2520until%2520%255B%255B%2520%2524%257Bretries%257D%2520-eq%25200%2520%255D%255D%253B%2520do%250A%2520%2520%2520%2520ip%253D%2524(ip%2520-6%2520-j%2520addr%2520%257C%2520jq%2520-r%2520%2522first(.%255B%255D%2520%257C%2520select(.ifname%253D%253D%255C%2522br-ex%255C%2522)%2520%257C%2520.addr_info%255B%255D%2520%257C%2520select(.scope%253D%253D%255C%2522global%255C%2522)%2520%257C%2520.local)%2522)%250A%2520%2520%2520%2520if%2520%255B%255B%2520%2522%2524%257Bip%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522No%2520ipv6%2520ip%2520to%2520bind%2520was%2520found%2522%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520random_port%253D%2524(shuf%2520-i%252050000-60000%2520-n%25201)%250A%2520%2520%2520%2520echo%2520%2522Trying%2520to%2520bind%2520%2524%257Bip%257D%2520on%2520port%2520%2524%257Brandom_port%257D%2522%250A%2520%2520%2520%2520exit_code%253D%2524(timeout%25202s%2520nc%2520-l%2520%2522%2524%257Bip%257D%2522%2520%2524%257Brandom_port%257D%253B%2520echo%2520%2524%253F)%250A%2520%2520%2520%2520if%2520%255B%255B%2520exit_code%2520-eq%2520124%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Address%2520bound%2520successfully%2522%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520sleep%25201%250A%2520%2520%2520%2520((%2520retries--%2520))%250A%2520%2520done%250A%2520%2520if%2520%255B%255B%2520%2524%257Bretries%257D%2520-eq%25200%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Failed%2520to%2520bind%2520ip%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%257D%250A%250A%2523%2520Get%2520interface%2520that%2520matches%2520ip%2520from%2520node%2520ip%2520hint%2520file%250A%2523%2520in%2520case%2520file%2520not%2520exists%2520return%2520nothing%2520and%250A%2523%2520fallback%2520to%2520default%2520interface%2520search%2520flow%250Aget_nodeip_hint_interface()%2520%257B%250A%2520%2520local%2520ip_hint%253D%2522%2522%250A%2520%2520local%2520ip_hint_file%253D%2522%25241%2522%250A%2520%2520local%2520extra_bridge%253D%2522%25242%2522%250A%2520%2520local%2520iface%253D%2522%2522%250A%250A%2520%2520ip_hint%253D%2524(get_ip_from_ip_hint_file%2520%2522%2524%257Bip_hint_file%257D%2522)%250A%2520%2520if%2520%255B%255B%2520-z%2520%2522%2524%257Bip_hint%257D%2522%2520%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%250A%2520%2520iface%253D%2524(ip%2520-j%2520addr%2520%257C%2520jq%2520-r%2520%2522first(.%255B%255D%2520%257C%2520select(any(.addr_info%255B%255D%253B%2520.local%253D%253D%255C%2522%2524%257Bip_hint%257D%255C%2522)%2520and%2520.ifname!%253D%255C%2522br-ex1%255C%2522%2520and%2520.ifname!%253D%255C%2522%2524%257Bextra_bridge%257D%255C%2522))%2520%257C%2520.ifname%2522)%250A%2520%2520if%2520%255B%255B%2520-n%2520%2522%2524%257Biface%257D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522%2524%257Biface%257D%2522%250A%2520%2520fi%250A%257D%250A%250A%2523%2520Accepts%2520parameters%2520%2524bridge_interface%2520(e.g.%2520ovs-port-phys0)%250A%2523%2520Returns%2520the%2520physical%2520interface%2520name%2520if%2520%2524bridge_interface%2520exists%252C%2520%2522%2522%2520otherwise%250Aget_bridge_physical_interface()%2520%257B%250A%2520%2520local%2520bridge_interface%253D%2522%25241%2522%250A%2520%2520local%2520physical_interface%253D%2522%2522%250A%2520%2520physical_interface%253D%2524(%2524NMCLI_GET_VALUE%2520connection.interface-name%2520conn%2520show%2520%2522%2524%257Bbridge_interface%257D%2522%25202%253E%252Fdev%252Fnull%2520%257C%257C%2520echo%2520%2522%2522)%250A%2520%2520echo%2520%2522%2524%257Bphysical_interface%257D%2522%250A%257D%250A%250A%2523%2520Accepts%2520parameters%2520%2524iface_default_hint_file%252C%2520%2524extra_bridge_file%252C%2520%2524ip_hint_file%252C%2520%2524default_bridge_file%250A%2523%2520Determines%2520the%2520interface%2520to%2520be%2520used%2520for%2520br-ex.%2520Order%2520of%2520priority%2520is%253A%250A%2523%25201.%2520Use%2520the%2520user%2520specified%2520interface%2520if%2520provided%2520in%2520the%2520default%2520bridge%2520file%250A%2523%25202.%2520Use%2520the%2520node%2520IP%2520hint%2520interface%250A%2523%25203.%2520Use%2520the%2520previously%2520selected%2520interface%250A%2523%25204.%2520Use%2520the%2520interface%2520detected%2520as%2520default%2520gateway%250A%2523%250A%2523%2520Read%2520%2524default_bridge_file%2520and%2520return%2520the%2520contained%2520interface.%2520Otherwise%252C%250A%2523%2520read%2520%2524ip_hint_file%2520and%2520return%2520the%2520interface%2520that%2520matches%2520this%2520ip.%2520Otherwise%252C%250A%2523%2520if%2520the%2520default%2520interface%2520is%2520br-ex%252C%2520use%2520that%2520and%2520return.%250A%2523%2520If%2520the%2520default%2520interface%2520is%2520not%2520br-ex%253A%250A%2523%2520Check%2520if%2520there%2520is%2520a%2520valid%2520hint%2520inside%2520%2524iface_default_hint_file.%2520If%2520so%252C%2520use%2520that%2520hint.%250A%2523%2520If%2520there%2520is%2520no%2520valid%2520hint%252C%2520use%2520the%2520default%2520interface%2520that%2520we%2520found%2520during%2520the%2520step%250A%2523%2520earlier.%250A%2523%2520Never%2520use%2520the%2520interface%2520that%2520is%2520provided%2520inside%2520%2524extra_bridge_file%2520for%2520br-ex1.%250A%2523%2520Never%2520use%2520br-ex1.%250A%2523%2520Write%2520the%2520default%2520interface%2520to%2520%2524iface_default_hint_file%250Aget_default_bridge_interface()%2520%257B%250A%2520%2520local%2520iface%253D%2522%2522%250A%2520%2520local%2520counter%253D0%250A%2520%2520local%2520iface_default_hint_file%253D%2522%25241%2522%250A%2520%2520local%2520extra_bridge_file%253D%2522%25242%2522%250A%2520%2520local%2520ip_hint_file%253D%2522%25243%2522%250A%2520%2520local%2520default_bridge_file%253D%2522%25244%2522%250A%2520%2520local%2520extra_bridge%253D%2522%2522%250A%250A%2520%2520if%2520%255B%2520-f%2520%2522%2524%257Bextra_bridge_file%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520extra_bridge%253D%2524(cat%2520%2524%257Bextra_bridge_file%257D)%250A%2520%2520fi%250A%250A%2520%2520%2523%2520try%2520to%2520use%2520user%2520specified%2520file%2520first%250A%2520%2520if%2520%255B%2520-f%2520%2522%2524default_bridge_file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520iface%253D%2524(cat%2520%2522%2524%257Bdefault_bridge_file%257D%2522)%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524iface%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522ERROR%253A%2520User%2520specified%2520bridge%2520file%2520detected%2520without%2520any%2520data%2522%250A%2520%2520%2520%2520%2520%2520exit%25201%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520echo%2520%2522%2524%257Biface%257D%2522%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%250A%2520%2520%2523%2520if%2520node%2520ip%2520was%2520set%252C%2520we%2520should%2520search%2520for%2520interface%2520that%2520matches%2520it%250A%2520%2520iface%253D%2524(get_nodeip_hint_interface%2520%2522%2524%257Bip_hint_file%257D%2522%2520%2522%2524%257Bextra_bridge%257D%2522)%250A%2520%2520if%2520%255B%255B%2520-n%2520%2522%2524%257Biface%257D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522%2524%257Biface%257D%2522%250A%2520%2520%2520%2520return%250A%2520%2520fi%250A%250A%2520%2520%2523%2520find%2520default%2520interface%250A%2520%2520%2523%2520the%2520default%2520interface%2520might%2520be%2520br-ex%252C%2520so%2520check%2520this%2520before%2520looking%2520at%2520the%2520hint%250A%2520%2520while%2520%255B%2520%2524%257Bcounter%257D%2520-lt%252012%2520%255D%253B%2520do%250A%2520%2520%2520%2520%2523%2520check%2520ipv4%250A%2520%2520%2520%2520%2523%2520never%2520use%2520the%2520interface%2520that's%2520specified%2520in%2520extra_bridge_file%250A%2520%2520%2520%2520%2523%2520never%2520use%2520br-ex1%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Bextra_bridge%257D%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520iface%253D%2524(ip%2520route%2520show%2520default%2520%257C%2520grep%2520-v%2520%2522br-ex1%2522%2520%257C%2520grep%2520-v%2520%2522%2524%257Bextra_bridge%257D%2522%2520%257C%2520awk%2520'%257B%2520if%2520(%25244%2520%253D%253D%2520%2522dev%2522)%2520%257B%2520print%2520%25245%253B%2520exit%2520%257D%2520%257D')%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520iface%253D%2524(ip%2520route%2520show%2520default%2520%257C%2520grep%2520-v%2520%2522br-ex1%2522%2520%257C%2520awk%2520'%257B%2520if%2520(%25244%2520%253D%253D%2520%2522dev%2522)%2520%257B%2520print%2520%25245%253B%2520exit%2520%257D%2520%257D')%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520%255B%255B%2520-n%2520%2522%2524%257Biface%257D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2523%2520check%2520ipv6%250A%2520%2520%2520%2520%2523%2520never%2520use%2520the%2520interface%2520that's%2520specified%2520in%2520extra_bridge_file%250A%2520%2520%2520%2520%2523%2520never%2520use%2520br-ex1%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Bextra_bridge%257D%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520iface%253D%2524(ip%2520-6%2520route%2520show%2520default%2520%257C%2520grep%2520-v%2520%2522br-ex1%2522%2520%257C%2520grep%2520-v%2520%2522%2524%257Bextra_bridge%257D%2522%2520%257C%2520awk%2520'%257B%2520if%2520(%25244%2520%253D%253D%2520%2522dev%2522)%2520%257B%2520print%2520%25245%253B%2520exit%2520%257D%2520%257D')%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520iface%253D%2524(ip%2520-6%2520route%2520show%2520default%2520%257C%2520grep%2520-v%2520%2522br-ex1%2522%2520%257C%2520awk%2520'%257B%2520if%2520(%25244%2520%253D%253D%2520%2522dev%2522)%2520%257B%2520print%2520%25245%253B%2520exit%2520%257D%2520%257D')%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520%255B%255B%2520-n%2520%2522%2524%257Biface%257D%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520counter%253D%2524((counter%252B1))%250A%2520%2520%2520%2520sleep%25205%250A%2520%2520done%250A%250A%2520%2520%2523%2520if%2520the%2520default%2520interface%2520does%2520not%2520point%2520out%2520of%2520br-ex%2520or%2520br-ex1%250A%2520%2520if%2520%255B%2520%2522%2524%257Biface%257D%2522%2520!%253D%2520%2522br-ex%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524%257Biface%257D%2522%2520!%253D%2520%2522br-ex1%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520determine%2520if%2520an%2520interface%2520default%2520hint%2520exists%2520from%2520a%2520previous%2520run%250A%2520%2520%2520%2520%2523%2520and%2520if%2520the%2520interface%2520has%2520a%2520valid%2520default%2520route%250A%2520%2520%2520%2520iface_default_hint%253D%2524(get_iface_default_hint%2520%2522%2524%257Biface_default_hint_file%257D%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520!%253D%2520%2522%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%2520%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520!%253D%2520%2522%2524%257Biface%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520start%2520wherever%2520count%2520left%2520off%2520in%2520the%2520previous%2520loop%250A%2520%2520%2520%2520%2520%2520%2523%2520allow%2520this%2520for%2520one%2520more%2520iteration%2520than%2520the%2520previous%2520loop%250A%2520%2520%2520%2520%2520%2520while%2520%255B%2520%2524%257Bcounter%257D%2520-le%252012%2520%255D%253B%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520check%2520ipv4%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524(ip%2520route%2520show%2520default%2520dev%2520%2522%2524%257Biface_default_hint%257D%2522)%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520iface%253D%2522%2524%257Biface_default_hint%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520check%2520ipv6%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524(ip%2520-6%2520route%2520show%2520default%2520dev%2520%2522%2524%257Biface_default_hint%257D%2522)%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520iface%253D%2522%2524%257Biface_default_hint%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520break%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520%2520%2520counter%253D%2524((counter%252B1))%250A%2520%2520%2520%2520%2520%2520%2520%2520sleep%25205%250A%2520%2520%2520%2520%2520%2520done%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2523%2520store%2520what%2520was%2520determined%2520was%2520the%2520(new)%2520default%2520interface%2520inside%250A%2520%2520%2520%2520%2523%2520the%2520default%2520hint%2520file%2520for%2520future%2520reference%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Biface%257D%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520write_iface_default_hint%2520%2522%2524%257Biface_default_hint_file%257D%2522%2520%2522%2524%257Biface%257D%2522%250A%2520%2520%2520%2520fi%250A%2520%2520fi%250A%2520%2520echo%2520%2522%2524%257Biface%257D%2522%250A%257D%250A%250A%2523%2520Used%2520to%2520print%2520network%2520state%250Aprint_state()%2520%257B%250A%2520%2520echo%2520%2522Current%2520device%252C%2520connection%252C%2520interface%2520and%2520routing%2520state%253A%2522%250A%2520%2520nmcli%2520-g%2520all%2520device%2520%257C%2520grep%2520-v%2520unmanaged%250A%2520%2520nmcli%2520-g%2520all%2520connection%250A%2520%2520ip%2520-d%2520address%2520show%250A%2520%2520ip%2520route%2520show%250A%2520%2520ip%2520-6%2520route%2520show%250A%257D%250A%250A%2523%2520Setup%2520an%2520exit%2520trap%2520to%2520rollback%2520on%2520error%250Ahandle_exit()%2520%257B%250A%2520%2520e%253D%2524%253F%250A%2520%2520tdir%253D%2524(mktemp%2520-u%2520-d%2520-t%2520%2522configure-ovs-%2524(date%2520%252B%2525Y-%2525m-%2525d-%2525H-%2525M-%2525S)-XXXXXXXXXX%2522)%250A%2520%2520%250A%2520%2520if%2520%255B%2520%2524e%2520-eq%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520print_state%250A%2520%2520%2520%2520%2523%2520remove%2520previous%2520troubleshooting%2520information%250A%2520%2520%2520%2520rm%2520-rf%2520%2522%2524(dirname%2520%2522%2524tdir%2522)%252Fconfigure-ovs-*%2522%250A%2520%2520%2520%2520exit%25200%250A%2520%2520fi%250A%250A%2520%2520echo%2520%2522ERROR%253A%2520configure-ovs%2520exited%2520with%2520error%253A%2520%2524e%2522%250A%2520%2520print_state%250A%250A%2520%2520%2523%2520remove%2520previous%2520troubleshooting%2520information%2520except%2520the%2520oldest%2520one%250A%2520%2520mapfile%2520-t%2520tdirs%2520%253C%2520%253C(compgen%2520-G%2520%2522%2524(dirname%2520%2522%2524tdir%2522)%252Fconfigure-ovs-*%2522)%250A%2520%2520unset%2520-v%2520%2522tdirs%255B0%255D%2522%250A%2520%2520for%2520dir%2520in%2520%2522%2524%257Btdirs%255B%2540%255D%257D%2522%253B%2520do%2520rm%2520-rf%2520%2522%2524dir%2522%253B%2520done%250A%250A%2520%2520%2523%2520copy%2520configuration%2520to%2520tmp%2520for%2520troubleshooting%250A%2520%2520mkdir%2520-p%2520%2522%2524tdir%2522%250A%2520%2520update_nm_conn_run_files%2520br-ex%2520phys0%250A%2520%2520copy_nm_conn_files%2520%2522%2524tdir%2522%250A%2520%2520update_nm_conn_run_files%2520br-ex1%2520phys1%250A%2520%2520copy_nm_conn_files%2520%2522%2524tdir%2522%250A%2520%2520echo%2520%2522Copied%2520OVS%2520configuration%2520to%2520%2524tdir%2520for%2520troubleshooting%2522%250A%250A%2520%2520%2523%2520attempt%2520to%2520restore%2520the%2520previous%2520network%2520state%250A%2520%2520echo%2520%2522Attempting%2520to%2520restore%2520previous%2520configuration...%2522%250A%2520%2520rollback_nm%250A%2520%2520print_state%250A%250A%2520%2520exit%2520%2524e%250A%257D%250A%250A%2523%2520Setup%2520a%2520signal%2520trap%2520to%2520rollback%250Ahandle_termination()%2520%257B%250A%2520%2520echo%2520%2522WARNING%253A%2520configure-ovs%2520has%2520been%2520requested%2520to%2520terminate%252C%2520quitting...%2522%250A%2520%2520%250A%2520%2520%2523%2520by%2520exiting%2520with%2520an%2520error%2520we%2520will%2520cleanup%2520after%2520ourselves%2520in%2520a%250A%2520%2520%2523%2520subsequent%2520call%2520to%2520handle_exit%250A%2520%2520exit%25201%250A%257D%250A%250A%2523%2520main%2520function%250Aconfigure_ovs()%2520%257B%250A%2520%2520set%2520-eu%250A%250A%2520%2520%2523%2520setup%2520traps%2520to%2520handle%2520signals%2520and%2520other%2520abnormal%2520exits%250A%2520%2520trap%2520'handle_termination'%2520TERM%2520INT%250A%2520%2520trap%2520'handle_exit'%2520EXIT%250A%250A%2520%2520%2523%2520this%2520flag%2520tracks%2520if%2520any%2520config%2520change%2520was%2520made%250A%2520%2520nm_config_changed%253D0%250A%250A%2520%2520%2523%2520Check%2520that%2520we%2520are%2520provided%2520a%2520valid%2520NM%2520connection%2520path%250A%2520%2520if%2520%255B%2520%2522%2524NM_CONN_SET_PATH%2522%2520!%253D%2520%2522%2524NM_CONN_CONF_PATH%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524NM_CONN_SET_PATH%2522%2520!%253D%2520%2522%2524NM_CONN_RUN_PATH%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Error%253A%2520Incorrect%2520NM%2520connection%2520path%253A%2520%2524NM_CONN_SET_PATH%2520is%2520not%2520%2524NM_CONN_CONF_PATH%2520nor%2520%2524NM_CONN_RUN_PATH%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%250A%2520%2520%2523%2520Clean%2520up%2520old%2520config%2520on%2520behalf%2520of%2520mtu-migration%250A%2520%2520if%2520!%2520systemctl%2520-q%2520is-enabled%2520mtu-migration%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Cleaning%2520up%2520left%2520over%2520mtu%2520migration%2520configuration%2522%250A%2520%2520%2520%2520rm%2520-rf%2520%252Fetc%252Fcno%252Fmtu-migration%250A%2520%2520fi%250A%250A%2520%2520if%2520!%2520rpm%2520-qa%2520%257C%2520grep%2520-q%2520openvswitch%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522WARNING%253A%2520Openvswitch%2520package%2520is%2520not%2520installed!%2522%250A%2520%2520%2520%2520exit%25201%250A%2520%2520fi%250A%250A%2520%2520%2523%2520print%2520initial%2520state%250A%2520%2520print_state%250A%250A%2520%2520if%2520%255B%2520%2522%25241%2522%2520%253D%253D%2520%2522OVNKubernetes%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520Configures%2520NICs%2520onto%2520OVS%2520bridge%2520%2522br-ex%2522%250A%2520%2520%2520%2520%2523%2520Configuration%2520is%2520either%2520auto-detected%2520or%2520provided%2520through%2520a%2520config%2520file%2520written%2520already%2520in%2520Network%2520Manager%250A%2520%2520%2520%2520%2523%2520key%2520files%2520under%2520%252Fetc%252FNetworkManager%252Fsystem-connections%252F%250A%2520%2520%2520%2520%2523%2520Managing%2520key%2520files%2520is%2520outside%2520of%2520the%2520scope%2520of%2520this%2520script%250A%250A%2520%2520%2520%2520%2523%2520if%2520the%2520interface%2520is%2520of%2520type%2520vmxnet3%2520add%2520multicast%2520capability%2520for%2520that%2520driver%250A%2520%2520%2520%2520%2523%2520History%253A%2520BZ%253A1854355%250A%2520%2520%2520%2520function%2520configure_driver_options%2520%257B%250A%2520%2520%2520%2520%2520%2520intf%253D%25241%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520!%2520-f%2520%2522%252Fsys%252Fclass%252Fnet%252F%2524%257Bintf%257D%252Fdevice%252Fuevent%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Device%2520file%2520doesn't%2520exist%252C%2520skipping%2520setting%2520multicast%2520mode%2522%250A%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520driver%253D%2524(cat%2520%2522%252Fsys%252Fclass%252Fnet%252F%2524%257Bintf%257D%252Fdevice%252Fuevent%2522%2520%257C%2520grep%2520DRIVER%2520%257C%2520awk%2520-F%2520%2522%253D%2522%2520'%257Bprint%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Driver%2520name%2520is%2522%2520%2524driver%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524driver%2522%2520%253D%2520%2522vmxnet3%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520ip%2520link%2520set%2520dev%2520%2522%2524%257Bintf%257D%2522%2520allmulticast%2520on%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%257D%250A%250A%2520%2520%2520%2520ovnk_config_dir%253D'%252Fetc%252Fovnk'%250A%2520%2520%2520%2520ovnk_var_dir%253D'%252Fvar%252Flib%252Fovnk'%250A%2520%2520%2520%2520extra_bridge_file%253D%2522%2524%257Bovnk_config_dir%257D%252Fextra_bridge%2522%250A%2520%2520%2520%2520iface_default_hint_file%253D%2522%2524%257Bovnk_var_dir%257D%252Fiface_default_hint%2522%250A%2520%2520%2520%2520ip_hint_file%253D%2522%252Frun%252Fnodeip-configuration%252Fprimary-ip%2522%250A%2520%2520%2520%2520%2523%2520explicitly%2520specify%2520which%2520interface%2520should%2520be%2520used%2520with%2520the%2520default%2520bridge%250A%2520%2520%2520%2520default_bridge_file%253D%2522%2524%257Bovnk_config_dir%257D%252Fdefault_bridge%2522%250A%250A%2520%2520%2520%2520%2523%2520make%2520sure%2520to%2520create%2520ovnk_config_dir%2520if%2520it%2520does%2520not%2520exist%252C%2520yet%250A%2520%2520%2520%2520mkdir%2520-p%2520%2522%2524%257Bovnk_config_dir%257D%2522%250A%2520%2520%2520%2520%2523%2520make%2520sure%2520to%2520create%2520ovnk_var_dir%2520if%2520it%2520does%2520not%2520exist%252C%2520yet%250A%2520%2520%2520%2520mkdir%2520-p%2520%2522%2524%257Bovnk_var_dir%257D%2522%250A%250A%2520%2520%2520%2520%2523%2520For%2520upgrade%2520scenarios%252C%2520make%2520sure%2520that%2520we%2520stabilize%2520what%2520we%2520already%2520configured%250A%2520%2520%2520%2520%2523%2520before.%2520If%2520we%2520do%2520not%2520have%2520a%2520valid%2520interface%2520hint%252C%2520find%2520the%2520physical%2520interface%250A%2520%2520%2520%2520%2523%2520that's%2520attached%2520to%2520ovs-if-phys0.%250A%2520%2520%2520%2520%2523%2520If%2520we%2520find%2520such%2520an%2520interface%252C%2520write%2520it%2520to%2520the%2520hint%2520file.%250A%2520%2520%2520%2520iface_default_hint%253D%2524(get_iface_default_hint%2520%2522%2524%257Biface_default_hint_file%257D%2522)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Biface_default_hint%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520current_interface%253D%2524(get_bridge_physical_interface%2520ovs-if-phys0)%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Bcurrent_interface%257D%2522%2520!%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520write_iface_default_hint%2520%2522%2524%257Biface_default_hint_file%257D%2522%2520%2522%2524%257Bcurrent_interface%257D%2522%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520delete%2520iface_default_hint_file%2520if%2520it%2520has%2520the%2520same%2520content%2520as%2520extra_bridge_file%250A%2520%2520%2520%2520%2523%2520in%2520that%2520case%252C%2520we%2520must%2520also%2520force%2520a%2520reconfiguration%2520of%2520our%2520network%2520interfaces%250A%2520%2520%2520%2520%2523%2520to%2520make%2520sure%2520that%2520we%2520reconcile%2520this%2520conflict%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524%257Biface_default_hint_file%257D%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%255B%2520-f%2520%2522%2524%257Bextra_bridge_file%257D%2522%2520%255D%2520%2526%2526%250A%2520%2520%2520%2520%2520%2520%255B%2520%2522%2524(cat%2520%2522%2524%257Biface_default_hint_file%257D%2522)%2522%2520%253D%253D%2520%2522%2524(cat%2520%2522%2524%257Bextra_bridge_file%257D%2522)%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522%2524%257Biface_default_hint_file%257D%2520and%2520%2524%257Bextra_bridge_file%257D%2520share%2520the%2520same%2520content%2522%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Deleting%2520file%2520%2524%257Biface_default_hint_file%257D%2520to%2520choose%2520a%2520different%2520interface%2522%250A%2520%2520%2520%2520%2520%2520rm%2520-f%2520%2522%2524%257Biface_default_hint_file%257D%2522%250A%2520%2520%2520%2520%2520%2520rm%2520-f%2520%252Frun%252Fconfigure-ovs-boot-done%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520on%2520every%2520boot%2520we%2520rollback%2520and%2520generate%2520the%2520configuration%2520again%252C%2520to%2520take%250A%2520%2520%2520%2520%2523%2520in%2520any%2520changes%2520that%2520have%2520possibly%2520been%2520applied%2520in%2520the%2520standard%250A%2520%2520%2520%2520%2523%2520configuration%2520sources%250A%2520%2520%2520%2520if%2520%255B%2520!%2520-f%2520%252Frun%252Fconfigure-ovs-boot-done%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520echo%2520%2522Running%2520on%2520boot%252C%2520restoring%2520previous%2520configuration%2520before%2520proceeding...%2522%250A%2520%2520%2520%2520%2520%2520rollback_nm%250A%2520%2520%2520%2520%2520%2520print_state%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520touch%2520%252Frun%252Fconfigure-ovs-boot-done%250A%250A%2520%2520%2520%2520iface%253D%2524(get_default_bridge_interface%2520%2522%2524%257Biface_default_hint_file%257D%2522%2520%2522%2524%257Bextra_bridge_file%257D%2522%2520%2522%2524%257Bip_hint_file%257D%2522%2520%2522%2524%257Bdefault_bridge_file%257D%2522)%250A%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524iface%2522%2520!%253D%2520%2522br-ex%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2523%2520Specified%2520interface%2520is%2520not%2520br-ex.%250A%2520%2520%2520%2520%2520%2520%2523%2520Some%2520deployments%2520use%2520a%2520temporary%2520solution%2520where%2520br-ex%2520is%2520moved%2520out%2520from%2520the%2520default%2520gateway%2520interface%250A%2520%2520%2520%2520%2520%2520%2523%2520and%2520bound%2520to%2520a%2520different%2520nic%2520(https%253A%252F%252Fgithub.com%252Ftrozet%252Fopenshift-ovn-migration).%250A%2520%2520%2520%2520%2520%2520%2523%2520This%2520is%2520now%2520supported%2520through%2520an%2520extra%2520bridge%2520if%2520requested.%2520If%2520that%2520is%2520the%2520case%252C%2520we%2520rollback.%250A%2520%2520%2520%2520%2520%2520%2523%2520We%2520also%2520rollback%2520if%2520it%2520looks%2520like%2520we%2520need%2520to%2520configure%2520things%252C%2520just%2520in%2520case%2520there%2520are%2520any%2520leftovers%250A%2520%2520%2520%2520%2520%2520%2523%2520from%2520previous%2520attempts.%250A%2520%2520%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524extra_bridge_file%2522%2520%255D%2520%257C%257C%2520%255B%2520-z%2520%2522%2524(nmcli%2520connection%2520show%2520--active%2520br-ex%25202%253E%2520%252Fdev%252Fnull)%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Bridge%2520br-ex%2520is%2520not%2520active%252C%2520restoring%2520previous%2520configuration%2520before%2520proceeding...%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520rollback_nm%250A%2520%2520%2520%2520%2520%2520%2520%2520print_state%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520convert_to_bridge%2520%2522%2524iface%2522%2520%2522br-ex%2522%2520%2522phys0%2522%2520%2522%2524%257BBRIDGE_METRIC%257D%2522%250A%250A%2520%2520%2520%2520%2523%2520Check%2520if%2520we%2520need%2520to%2520configure%2520the%2520second%2520bridge%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524extra_bridge_file%2522%2520%255D%2520%2526%2526%2520(!%2520nmcli%2520connection%2520show%2520br-ex1%2520%2526%253E%2520%252Fdev%252Fnull%2520%257C%257C%2520!%2520nmcli%2520connection%2520show%2520ovs-if-phys1%2520%2526%253E%2520%252Fdev%252Fnull)%253B%2520then%250A%2520%2520%2520%2520%2520%2520interface%253D%2524(head%2520-n%25201%2520%2524extra_bridge_file)%250A%2520%2520%2520%2520%2520%2520convert_to_bridge%2520%2522%2524interface%2522%2520%2522br-ex1%2522%2520%2522phys1%2522%2520%2522%2524%257BBRIDGE1_METRIC%257D%2522%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Check%2520if%2520we%2520need%2520to%2520remove%2520the%2520second%2520bridge%250A%2520%2520%2520%2520if%2520%255B%2520!%2520-f%2520%2522%2524extra_bridge_file%2522%2520%255D%2520%2526%2526%2520(nmcli%2520connection%2520show%2520br-ex1%2520%2526%253E%2520%252Fdev%252Fnull%2520%257C%257C%2520nmcli%2520connection%2520show%2520ovs-if-phys1%2520%2526%253E%2520%252Fdev%252Fnull)%253B%2520then%250A%2520%2520%2520%2520%2520%2520remove_ovn_bridges%2520br-ex1%2520phys1%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Remove%2520bridges%2520created%2520by%2520openshift-sdn%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520br0%250A%250A%2520%2520%2520%2520%2523%2520Make%2520sure%2520everything%2520is%2520activated.%2520Do%2520it%2520in%2520a%2520specific%2520order%253A%250A%2520%2520%2520%2520%2523%2520-%2520activate%2520br-ex%2520first%252C%2520due%2520to%2520autoconnect-slaves%2520this%2520will%2520also%250A%2520%2520%2520%2520%2523%2520%2520%2520activate%2520ovs-port-br-ex%252C%2520ovs-port-phys0%2520and%2520ovs-if-phys0.%2520It%2520is%250A%2520%2520%2520%2520%2523%2520%2520%2520important%2520that%2520ovs-if-phys0%2520activates%2520with%2520br-ex%2520to%2520avoid%2520the%250A%2520%2520%2520%2520%2523%2520%2520%2520ovs-if-phys0%2520profile%2520being%2520overridden%2520with%2520a%2520profile%2520generated%2520from%250A%2520%2520%2520%2520%2523%2520%2520%2520kargs.%2520The%2520activation%2520of%2520ovs-if-phys0%252C%2520if%2520a%2520bond%252C%2520might%2520cause%2520the%250A%2520%2520%2520%2520%2523%2520%2520%2520slaves%2520to%2520re-activate%252C%2520but%2520it%2520should%2520be%2520with%2520our%2520profiles%2520since%2520they%250A%2520%2520%2520%2520%2523%2520%2520%2520have%2520higher%2520priority%250A%2520%2520%2520%2520%2523%2520-%2520make%2520sure%2520that%2520ovs-if-phys0%2520and%2520its%2520slaves%252C%2520if%2520any%252C%2520are%2520activated.%250A%2520%2520%2520%2520%2523%2520-%2520finally%2520activate%2520ovs-if-br-ex%2520which%2520holds%2520the%2520IP%2520configuration.%250A%2520%2520%2520%2520connections%253D(br-ex%2520ovs-if-phys0)%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524extra_bridge_file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520connections%252B%253D(br-ex1%2520ovs-if-phys1)%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520while%2520IFS%253D%2520read%2520-r%2520connection%253B%2520do%250A%2520%2520%2520%2520%2520%2520if%2520%255B%255B%2520%2524connection%2520%253D%253D%2520*%2522%2524MANAGED_NM_CONN_SUFFIX%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520connections%252B%253D(%2522%2524connection%2522)%250A%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520done%2520%253C%2520%253C(nmcli%2520-g%2520NAME%2520c)%250A%2520%2520%2520%2520connections%252B%253D(ovs-if-br-ex)%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%2522%2524extra_bridge_file%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520connections%252B%253D(ovs-if-br-ex1)%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520activate_nm_connections%2520%2522%2524%257Bconnections%255B%2540%255D%257D%2522%250A%2520%2520%2520%2520try_to_bind_ipv6_address%250A%2520%2520%2520%2520set_nm_conn_files%250A%2520%2520elif%2520%255B%2520%2522%25241%2522%2520%253D%253D%2520%2522OpenShiftSDN%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2523%2520Revert%2520changes%2520made%2520by%2520%252Fusr%252Flocal%252Fbin%252Fconfigure-ovs.sh%2520during%2520SDN%2520migration.%250A%2520%2520%2520%2520rollback_nm%250A%2520%2520%2520%2520%250A%2520%2520%2520%2520%2523%2520Remove%2520bridges%2520created%2520by%2520ovn-kubernetes%250A%2520%2520%2520%2520ovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520br-int%2520--%2520--if-exists%2520del-br%2520br-local%250A%2520%2520fi%250A%257D%250A%250A%2523%2520Retry%2520configure_ovs%2520until%2520it%2520succeeds.%250A%2523%2520By%2520default%252C%2520retry%2520every%252015%2520minutes%2520to%2520give%2520enough%2520time%2520to%2520gather%250A%2523%2520troubleshooting%2520information%2520in%2520between.%2520Note%2520that%2520configure_ovs%2520has%2520other%250A%2523%2520internal%2520retry%2520mechanisms.%2520This%2520retry%2520is%2520intended%2520to%2520give%2520some%250A%2523%2520self-healing%2520capabilities%2520to%2520temporary%2520but%2520not%2520necessarily%2520short-lived%250A%2523%2520infrastructure%2520problems.%250ARETRY%253D%2522%2524%257BRETRY-15m%257D%2522%250Awhile%2520true%253B%2520do%250A%250A%2520%2520%2523%2520Disable%2520retries%2520if%2520termination%2520signal%2520is%2520received.%2520Note%2520that%2520systemd%250A%2520%2520%2523%2520sends%2520the%2520signals%2520to%2520all%2520processes%2520in%2520the%2520group%2520by%2520default%2520so%2520we%2520expect%250A%2520%2520%2523%2520configure_ovs%2520to%2520get%2520its%2520own%2520signals.%250A%2520%2520trap%2520'echo%2520%2522WARNING%253A%2520termination%2520requested%252C%2520disabling%2520retries%2522%253B%2520RETRY%253D%2522%2522'%2520INT%2520TERM%250A%2520%2520%250A%2520%2520%2523%2520Run%2520configure_ovs%2520in%2520a%2520sub-shell.%2520%250A%2520%2520(%2520configure_ovs%2520%2522%2524%2540%2522%2520)%250A%2520%2520e%253D%2524%253F%250A%250A%2520%2520%2523%2520Handle%2520signals%2520while%2520we%2520sleep%250A%2520%2520trap%2520'handle_termination'%2520INT%2520TERM%250A%2520%2520%250A%2520%2520%2523%2520Exit%2520if%2520succesful%2520and%2520not%2520configured%2520to%2520retry%250A%2520%2520%255B%2520%2522%2524e%2522%2520-eq%25200%2520%255D%2520%257C%257C%2520%255B%2520-z%2520%2522%2524RETRY%2522%2520%255D%2520%2526%2526%2520exit%2520%2522%2524e%2522%250A%2520%2520%250A%2520%2520echo%2520%2522configure-ovs%2520failed%252C%2520will%2520retry%2520after%2520%2524RETRY%2522%250A%2520%2520%2523%2520flag%2520that%2520a%2520retry%2520has%2520happened%250A%2520%2520touch%2520%252Ftmp%252Fconfigure-ovs-retry%250A%2520%2520sleep%2520%2522%2524RETRY%2522%250A%250Adone%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fconfigure-ovs.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520This%2520file%2520is%2520generated%2520by%2520the%2520Machine%2520Config%2520Operator's%2520containerruntimeconfig%2520controller.%250A%2523%250A%2523%2520storage.conf%2520is%2520the%2520configuration%2520file%2520for%2520all%2520tools%250A%2523%2520that%2520share%2520the%2520containers%252Fstorage%2520libraries%250A%2523%2520See%2520man%25205%2520containers-storage.conf%2520for%2520more%2520information%250A%2523%2520The%2520%2522container%2520storage%2522%2520table%2520contains%2520all%2520of%2520the%2520server%2520options.%250A%255Bstorage%255D%250A%250A%2523%2520Default%2520storage%2520driver%252C%2520must%2520be%2520set%2520for%2520proper%2520operation.%250Adriver%2520%253D%2520%2522overlay%2522%250A%250A%2523%2520Temporary%2520storage%2520location%250Arunroot%2520%253D%2520%2522%252Frun%252Fcontainers%252Fstorage%2522%250A%250A%2523%2520Primary%2520Read%252FWrite%2520location%2520of%2520container%2520storage%250Agraphroot%2520%253D%2520%2522%252Fvar%252Flib%252Fcontainers%252Fstorage%2522%250A%250A%255Bstorage.options%255D%250A%2523%2520Storage%2520options%2520to%2520be%2520passed%2520to%2520underlying%2520storage%2520drivers%250A%250A%2523%2520AdditionalImageStores%2520is%2520used%2520to%2520pass%2520paths%2520to%2520additional%2520Read%252FOnly%2520image%2520stores%250A%2523%2520Must%2520be%2520comma%2520separated%2520list.%250Aadditionalimagestores%2520%253D%2520%255B%250A%255D%250A%250A%2523%2520Remap-UIDs%252FGIDs%2520is%2520the%2520mapping%2520from%2520UIDs%252FGIDs%2520as%2520they%2520should%2520appear%2520inside%2520of%250A%2523%2520a%2520container%252C%2520to%2520UIDs%252FGIDs%2520as%2520they%2520should%2520appear%2520outside%2520of%2520the%2520container%252C%2520and%250A%2523%2520the%2520length%2520of%2520the%2520range%2520of%2520UIDs%252FGIDs.%2520%2520Additional%2520mapped%2520sets%2520can%2520be%2520listed%250A%2523%2520and%2520will%2520be%2520heeded%2520by%2520libraries%252C%2520but%2520there%2520are%2520limits%2520to%2520the%2520number%2520of%250A%2523%2520mappings%2520which%2520the%2520kernel%2520will%2520allow%2520when%2520you%2520later%2520attempt%2520to%2520run%2520a%250A%2523%2520container.%250A%2523%250A%2523%2520remap-uids%2520%253D%25200%253A1668442479%253A65536%250A%2523%2520remap-gids%2520%253D%25200%253A1668442479%253A65536%250A%250A%2523%2520Remap-User%252FGroup%2520is%2520a%2520name%2520which%2520can%2520be%2520used%2520to%2520look%2520up%2520one%2520or%2520more%2520UID%252FGID%250A%2523%2520ranges%2520in%2520the%2520%252Fetc%252Fsubuid%2520or%2520%252Fetc%252Fsubgid%2520file.%2520%2520Mappings%2520are%2520set%2520up%2520starting%250A%2523%2520with%2520an%2520in-container%2520ID%2520of%25200%2520and%2520the%2520a%2520host-level%2520ID%2520taken%2520from%2520the%2520lowest%250A%2523%2520range%2520that%2520matches%2520the%2520specified%2520name%252C%2520and%2520using%2520the%2520length%2520of%2520that%2520range.%250A%2523%2520Additional%2520ranges%2520are%2520then%2520assigned%252C%2520using%2520the%2520ranges%2520which%2520specify%2520the%250A%2523%2520lowest%2520host-level%2520IDs%2520first%252C%2520to%2520the%2520lowest%2520not-yet-mapped%2520container-level%2520ID%252C%250A%2523%2520until%2520all%2520of%2520the%2520entries%2520have%2520been%2520used%2520for%2520maps.%2520This%2520setting%2520overrides%2520the%250A%2523%2520Remap-UIDs%252FGIDs%2520setting.%250A%2523%250A%2523%2520remap-user%2520%253D%2520%2522storage%2522%250A%2523%2520remap-group%2520%253D%2520%2522storage%2522%250A%250A%255Bstorage.options.pull_options%255D%250A%2523%2520Options%2520controlling%2520how%2520storage%2520is%2520populated%2520when%2520pulling%2520images.%250A%250A%2523%2520Enable%2520the%2520%2522zstd%253Achunked%2522%2520feature%252C%2520which%2520allows%2520partial%2520pulls%252C%2520reusing%250A%2523%2520content%2520that%2520already%2520exists%2520on%2520the%2520system.%2520This%2520is%2520disabled%2520by%2520default%252C%250A%2523%2520and%2520must%2520be%2520explicitly%2520enabled%2520to%2520be%2520used.%2520For%2520more%2520on%2520zstd%253Achunked%252C%2520see%250A%2523%2520https%253A%252F%252Fgithub.com%252Fcontainers%252Fstorage%252Fblob%252Fmain%252Fdocs%252Fcontainers-storage-zstd-chunked.md%250Aenable_partial_images%2520%253D%2520%2522false%2522%250A%250A%2523%2520Tells%2520containers%252Fstorage%2520to%2520use%2520hard%2520links%2520rather%2520then%2520create%2520new%2520files%2520in%250A%2523%2520the%2520image%252C%2520if%2520an%2520identical%2520file%2520already%2520existed%2520in%2520storage.%250Ause_hard_links%2520%253D%2520%2522false%2522%250A%250A%2523%2520Path%2520to%2520an%2520ostree%2520repository%2520that%2520might%2520have%250A%2523%2520previously%2520pulled%2520content%2520which%2520can%2520be%2520used%2520when%2520attempting%2520to%2520avoid%250A%2523%2520pulling%2520content%2520from%2520the%2520container%2520registry.%250Aostree_repos%2520%253D%2520%2522%2522%250A%250A%255Bstorage.options.overlay%255D%250A%2523%2520Storage%2520Options%2520for%2520overlay%250A%250A%2523%2520Do%2520not%2520create%2520a%2520PRIVATE%2520bind%2520mount%2520on%2520the%2520home%2520directory.%250Askip_mount_home%2520%253D%2520%2522true%2522%250A%250A%2523%2520Size%2520is%2520used%2520to%2520set%2520a%2520maximum%2520size%2520of%2520the%2520container%2520image.%2520%2520Only%2520supported%2520by%250A%2523%2520certain%2520container%2520storage%2520drivers.%250Asize%2520%253D%2520%2522%2522%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fcontainers%2Fstorage.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2CInitial%2520Creation%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20384%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fdocker%2Fcerts.d%2F.create%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520Proxy%2520environment%2520variables%2520will%2520be%2520populated%2520in%2520this%2520file.%2520Properly%250A%2523%2520url%2520encoded%2520passwords%2520with%2520special%2520characters%2520will%2520use%2520'%2525%253CHEX%253E%253CHEX%253E'.%250A%2523%2520Systemd%2520requires%2520that%2520any%2520%2525%2520used%2520in%2520a%2520password%2520be%2520represented%2520as%250A%2523%2520%2525%2525%2520in%2520a%2520unit%2520file%2520since%2520%2525%2520is%2520a%2520prefix%2520for%2520macros%253B%2520this%2520restriction%2520does%2520not%250A%2523%2520apply%2520for%2520environment%2520files.%2520Templates%2520that%2520need%2520the%2520proxy%2520set%2520should%2520use%250A%2523%2520'EnvironmentFile%253D%252Fetc%252Fmco%252Fproxy.env'.%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fmco%2Fproxy.env%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255BManager%255D%250ADefaultEnvironment%253DGODEBUG%253Dx509ignoreCN%253D0%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsystemd%2Fsystem.conf.d%2F10-default-env-godebug.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%2523%2520Workaround%253A%250A%2523%2520https%253A%252F%252Fissues.redhat.com%252Fbrowse%252FOCPBUGS-38779%250A%250Adriver%253D%2524(nmcli%2520-t%2520-m%2520tabular%2520-f%2520general.driver%2520dev%2520show%2520%2522%2524%257BDEVICE_IFACE%257D%2522)%250A%250Aif%2520%255B%255B%2520%2522%25242%2522%2520%253D%253D%2520%2522up%2522%2520%2526%2526%2520%2522%2524%257Bdriver%257D%2522%2520%253D%253D%2520%2522idpf%2522%2520%255D%255D%253B%2520then%250A%2520%2520ethtool%2520-K%2520%2524%257BDEVICE_IFACE%257D%2520tx-checksumming%2520off%250Afi%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20484%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fdispatcher.d%2F99-gcp-disable-idpf-tx-checksum-off%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520Force-load%2520legacy%2520iptables%2520so%2520it%2520is%2520usable%2520from%2520pod%2520network%2520namespaces%250Aip_tables%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fmodules-load.d%2Fiptables.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2CNODE_SIZING_ENABLED%253Dfalse%250ASYSTEM_RESERVED_MEMORY%253D1Gi%250ASYSTEM_RESERVED_CPU%253D500m%250ASYSTEM_RESERVED_ES%253D1Gi%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fnode-sizing-enabled.env%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-e%250ANODE_SIZES_ENV%253D%2524%257BNODE_SIZES_ENV%253A-%252Fetc%252Fnode-sizing.env%257D%250AVERSION_1%253D1%250AVERSION_2%253D2%250ANODE_AUTO_SIZING_VERSION%253D%2524%257BNODE_AUTO_SIZING_VERSION%253A-%2524VERSION_2%257D%250ANODE_AUTO_SIZING_VERSION_FILE%253D%2524%257BNODE_AUTO_SIZING_VERSION_FILE%253A-%252Fetc%252Fnode-sizing-version.json%257D%250Afunction%2520dynamic_memory_sizing%2520%257B%250A%2520%2520%2520%2520total_memory%253D%2524(free%2520-g%257Cawk%2520'%252F%255EMem%253A%252F%257Bprint%2520%25242%257D')%250A%2520%2520%2520%2520%2523%2520total_memory%253D8%2520test%2520the%2520recommended%2520values%2520by%2520modifying%2520this%2520value%250A%2520%2520%2520%2520recommended_systemreserved_memory%253D0%250A%2520%2520%2520%2520if%2520((%2524total_memory%2520%253C%253D%25204))%253B%2520then%2520%2523%252025%2525%2520of%2520the%2520first%25204GB%2520of%2520memory%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524total_memory%25200.25%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D0%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D1%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D%2524((total_memory-4))%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520((%2524total_memory%2520%253C%253D%25204))%253B%2520then%2520%2523%252020%2525%2520of%2520the%2520next%25204GB%2520of%2520memory%2520(up%2520to%25208GB)%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%2520%2524(echo%2520%2524total_memory%25200.20%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D0%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%25200.80%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D%2524((total_memory-4))%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520((%2524total_memory%2520%253C%253D%25208))%253B%2520then%2520%2523%252010%2525%2520of%2520the%2520next%25208GB%2520of%2520memory%2520(up%2520to%252016GB)%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%2520%2524(echo%2520%2524total_memory%25200.10%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D0%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%25200.80%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D%2524((total_memory-8))%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520((%2524total_memory%2520%253C%253D%2520112))%253B%2520then%2520%2523%25206%2525%2520of%2520the%2520next%2520112GB%2520of%2520memory%2520(up%2520to%2520128GB)%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%2520%2524(echo%2520%2524total_memory%25200.06%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D0%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%25206.72%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520total_memory%253D%2524((total_memory-112))%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520if%2520((%2524total_memory%2520%253E%253D%25200))%253B%2520then%2520%2523%25202%2525%2520of%2520any%2520memory%2520above%2520128GB%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%2520%2524(echo%2520%2524total_memory%25200.02%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520recommended_systemreserved_memory%253D%2524(echo%2520%2524recommended_systemreserved_memory%2520%257C%2520awk%2520'%257Bprintf(%2522%2525d%255Cn%2522%252C%25241%2520%252B%25200.5)%257D')%2520%2523%2520Round%2520off%2520so%2520we%2520avoid%2520float%2520conversions%250A%2520%2520%2520%2520echo%2520%2522SYSTEM_RESERVED_MEMORY%253D%2524%257Brecommended_systemreserved_memory%257DGi%2522%253E%253E%2520%2524%257BNODE_SIZES_ENV%257D%250A%257D%250Afunction%2520dynamic_cpu_sizing%2520%257B%250A%2520%2520%2520%2520total_cpu%253D%2524(getconf%2520_NPROCESSORS_ONLN)%250A%2520%2520%2520%2520if%2520%255B%2520%2522%25241%2522%2520-eq%2520%2522%2524VERSION_1%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D0%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((%2524total_cpu%2520%253C%253D%25201))%253B%2520then%2520%2523%25206%2525%2520of%2520the%2520first%2520core%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524total_cpu%25200.06%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D0%250A%2520%2520%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D0.06%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D%2524((total_cpu-1))%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((%2524total_cpu%2520%253C%253D%25201))%253B%2520then%2520%2523%25201%2525%2520of%2520the%2520next%2520core%2520(up%2520to%25202%2520cores)%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524recommended_systemreserved_cpu%2520%2524(echo%2520%2524total_cpu%25200.01%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D0%250A%2520%2520%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524recommended_systemreserved_cpu%25200.01%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D%2524((total_cpu-1))%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((%2524total_cpu%2520%253C%253D%25202))%253B%2520then%2520%2523%25200.5%2525%2520of%2520the%2520next%25202%2520cores%2520(up%2520to%25204%2520cores)%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524recommended_systemreserved_cpu%2520%2524(echo%2520%2524total_cpu%25200.005%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D0%250A%2520%2520%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524recommended_systemreserved_cpu%25200.01%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520total_cpu%253D%2524((total_cpu-2))%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((%2524total_cpu%2520%253E%253D%25200))%253B%2520then%2520%2523%25200.25%2525%2520of%2520any%2520cores%2520above%25204%2520cores%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(echo%2520%2524recommended_systemreserved_cpu%2520%2524(echo%2520%2524total_cpu%25200.0025%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520*%2520%25242%257D')%2520%257C%2520awk%2520'%257Bprint%2520%25241%2520%252B%2520%25242%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520Base%2520allocation%2520for%25201%2520CPU%2520in%2520fractions%2520of%2520a%2520core%2520(60%2520millicores%2520%253D%25200.06%2520CPU%2520core)%250A%2520%2520%2520%2520%2520%2520%2520%2520base_allocation_fraction%253D0.06%250A%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520Increment%2520per%2520additional%2520CPU%2520in%2520fractions%2520of%2520a%2520core%2520(12%2520millicores%2520%253D%25200.012%2520CPU%2520core)%250A%2520%2520%2520%2520%2520%2520%2520%2520increment_per_cpu_fraction%253D0.012%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((total_cpu%2520%253E%25201))%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520Calculate%2520the%2520total%2520system-reserved%2520CPU%2520in%2520fractions%252C%2520starting%2520with%2520the%2520base%2520allocation%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520and%2520adding%2520the%2520incremental%2520fraction%2520for%2520each%2520additional%2520CPU%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(awk%2520-v%2520base%253D%2522%2524base_allocation_fraction%2522%2520-v%2520increment%253D%2522%2524increment_per_cpu_fraction%2522%2520-v%2520cpus%253D%2522%2524total_cpu%2522%2520'BEGIN%2520%257Bprintf%2520%2522%2525.2f%255Cn%2522%252C%2520base%2520%252B%2520increment%2520*%2520(cpus%2520-%25201)%257D')%250A%2520%2520%2520%2520%2520%2520%2520%2520else%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2523%2520For%2520a%2520single%2520CPU%252C%2520use%2520the%2520base%2520allocation%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524base_allocation_fraction%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Enforce%2520minimum%2520threshold%2520of%25200.5%2520CPU%250A%2520%2520%2520%2520recommended_systemreserved_cpu%253D%2524(awk%2520-v%2520val%253D%2522%2524recommended_systemreserved_cpu%2522%2520'BEGIN%2520%257Bif%2520(val%2520%253C%25200.5)%2520print%25200.5%253B%2520else%2520print%2520val%257D')%250A%250A%2520%2520%2520%2520echo%2520%2522SYSTEM_RESERVED_CPU%253D%2524%257Brecommended_systemreserved_cpu%257D%2522%253E%253E%2520%2524%257BNODE_SIZES_ENV%257D%250A%257D%250Afunction%2520dynamic_ephemeral_sizing%2520%257B%250A%2520%2520%2520%2520echo%2520%2522Not%2520implemented%2520yet%2522%250A%257D%250Afunction%2520dynamic_pid_sizing%2520%257B%250A%2520%2520%2520%2520echo%2520%2522Not%2520implemented%2520yet%2522%250A%257D%250Afunction%2520set_memory%2520%257B%250A%2520%2520%2520%2520SYSTEM_RESERVED_MEMORY%253D%25241%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524%257BSYSTEM_RESERVED_MEMORY%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520SYSTEM_RESERVED_MEMORY%253D%25221Gi%2522%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520echo%2520%2522SYSTEM_RESERVED_MEMORY%253D%2524%257BSYSTEM_RESERVED_MEMORY%257D%2522%2520%253E%253E%2520%2524%257BNODE_SIZES_ENV%257D%250A%257D%250Afunction%2520set_cpu%2520%257B%250A%2520%2520%2520%2520SYSTEM_RESERVED_CPU%253D%25241%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524%257BSYSTEM_RESERVED_CPU%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520SYSTEM_RESERVED_CPU%253D%2522500m%2522%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520echo%2520%2522SYSTEM_RESERVED_CPU%253D%2524%257BSYSTEM_RESERVED_CPU%257D%2522%2520%253E%253E%2520%2524%257BNODE_SIZES_ENV%257D%250A%257D%250Afunction%2520set_es%2520%257B%250A%2520%2520%2520%2520SYSTEM_RESERVED_ES%253D%25241%250A%2520%2520%2520%2520if%2520%255B%2520-z%2520%2522%2524%257BSYSTEM_RESERVED_ES%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520SYSTEM_RESERVED_ES%253D%25221Gi%2522%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520echo%2520%2522SYSTEM_RESERVED_ES%253D%2524%257BSYSTEM_RESERVED_ES%257D%2522%2520%253E%253E%2520%2524%257BNODE_SIZES_ENV%257D%250A%257D%250Afunction%2520dynamic_node_sizing%2520%257B%250A%2520%2520%2520%2520rm%2520-f%2520%2524%257BNODE_SIZES_ENV%257D%250A%2520%2520%2520%2520dynamic_memory_sizing%250A%2520%2520%2520%2520dynamic_cpu_sizing%2520%25241%250A%2520%2520%2520%2520set_es%2520%25242%250A%2520%2520%2520%2520%2523dynamic_ephemeral_sizing%250A%2520%2520%2520%2520%2523dynamic_pid_sizing%250A%257D%250Afunction%2520static_node_sizing%2520%257B%250A%2520%2520%2520%2520rm%2520-f%2520%2524%257BNODE_SIZES_ENV%257D%250A%2520%2520%2520%2520set_memory%2520%25241%250A%2520%2520%2520%2520set_cpu%2520%25242%250A%2520%2520%2520%2520set_es%2520%25243%250A%257D%250Afunction%2520create_version_file%2520%257B%250A%2520%2520%2520%2520echo%2520%2522%257B%255C%2522version%255C%2522%253A%2520%25241%257D%2522%2520%253E%2520%25242%250A%257D%250Aif%2520!%2520%255B%2520-f%2520%2524NODE_AUTO_SIZING_VERSION_FILE%2520%255D%253B%2520then%250A%2520%2520%2520%2520create_version_file%2520%2524NODE_AUTO_SIZING_VERSION%2520%2524NODE_AUTO_SIZING_VERSION_FILE%250Afi%250Anew_version%253D%2524(jq%2520.version%2520%2524NODE_AUTO_SIZING_VERSION_FILE)%250Aif%2520%255B%2520%25241%2520%253D%253D%2520%2522true%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520dynamic_node_sizing%2520%2524new_version%2520%25244%250Aelif%2520%255B%2520%25241%2520%253D%253D%2520%2522false%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520static_node_sizing%2520%25242%2520%25243%2520%25244%250Aelse%250A%2520%2520%2520%2520echo%2520%2522Unrecognized%2520command%2520line%2520option.%2520Valid%2520options%2520are%2520%255C%2522true%255C%2522%2520or%2520%255C%2522false%255C%2522%2522%250Afi%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fsbin%2Fdynamic-system-reserved-calc.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520Turning%2520on%2520Accounting%2520helps%2520track%2520down%2520performance%2520issues.%250A%255BManager%255D%250ADefaultCPUAccounting%253Dyes%250ADefaultMemoryAccounting%253Dyes%250ADefaultBlockIOAccounting%253Dyes%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsystemd%2Fsystem.conf.d%2Fkubelet-cgroups.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255BService%255D%250AEnvironment%253D%2522KUBELET_LOG_LEVEL%253D2%2522%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsystemd%2Fsystem%2Fkubelet.service.d%2F20-logging.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520ignore%2520known%2520SDN-managed%2520devices%250A%255Bdevice%255D%250Amatch-device%253Dinterface-name%253Abr-int%253Binterface-name%253Abr-local%253Binterface-name%253Abr-nexthop%253Binterface-name%253Aovn-k8s-*%253Binterface-name%253Ak8s-*%253Binterface-name%253Atun0%253Binterface-name%253Abr0%253Binterface-name%253Apatch-br-*%253Binterface-name%253Abr-ext%253Binterface-name%253Aext-vxlan%253Binterface-name%253Aext%253Binterface-name%253Aint%253Binterface-name%253Avxlan_sys_*%253Binterface-name%253Agenev_sys_*%253Bdriver%253Aveth%250Amanaged%253D0%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fconf.d%2Fsdn.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-eux%250A%250A%2523%2520Clean%2520up%2520old%2520config%2520on%2520behalf%2520of%2520mtu-migration%250Aif%2520!%2520systemctl%2520-q%2520is-enabled%2520mtu-migration%253B%2520then%250A%2520%2520echo%2520%2522Cleaning%2520up%2520left%2520over%2520mtu%2520migration%2520configuration%2522%250A%2520%2520rm%2520-rf%2520%252Fetc%252Fcno%252Fmtu-migration%250Afi%250A%250Asrc_path%253D%2522%252Fetc%252Fnmstate%252Fopenshift%2522%250Adst_path%253D%2522%252Fetc%252Fnmstate%2522%250Ahostname%253D%2524(hostname%2520-s)%250Ahost_file%253D%2522%2524%257Bhostname%257D.yml%2522%250Acluster_file%253D%2522cluster.yml%2522%250Aconfig_file%253D%2522%2522%250Aif%2520%255B%2520-s%2520%2522%2524src_path%252F%2524host_file%2522%2520%255D%253B%2520then%250A%2520%2520config_file%253D%2524host_file%250Aelif%2520%255B%2520-s%2520%2522%2524src_path%252F%2524cluster_file%2522%2520%255D%253B%2520then%250A%2520%2520config_file%253D%2524cluster_file%250Aelse%250A%2520%2520echo%2520%2522No%2520configuration%2520found%2520at%2520%2524src_path%252F%2524host_file%2520or%2520%2524src_path%252F%2524cluster_file%2522%250A%2520%2520exit%25200%250Afi%250A%250Aif%2520%255B%2520-e%2520%2522%2524src_path%252Fapplied%2522%2520%255D%253B%2520then%250A%2520%2520sha_applied%253D%2524(sha256sum%2520%2522%2524src_path%252Fapplied%2522%2520%257C%2520awk%2520'%257Bprint%2520%25241%257D')%250A%2520%2520sha_config%253D%2524(sha256sum%2520%2522%2524src_path%252F%2524config_file%2522%2520%257C%2520awk%2520'%257Bprint%2520%25241%257D')%250A%2520%2520if%2520%255B%2522%2524sha_applied%2522%253D%253D%2522%2524sha_config%2522%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Configuration%2520already%2520applied%252C%2520exiting%2522%250A%2520%2520%2520%2520exit%25200%250A%2520%2520fi%250Afi%250A%250A%2523%2520Handle%2520the%2520case%2520where%2520we're%2520migrating%2520from%2520configure-ovs%250Aovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520br-ex%250A%250A%2523%2520Handle%2520the%2520case%2520where%2520we're%2520migrating%2520from%2520OpenShift%2520SDN%250Aovs-vsctl%2520--timeout%253D30%2520--if-exists%2520del-br%2520br0%250A%250Acp%2520%2522%2524src_path%252F%2524config_file%2522%2520%252Fetc%252Fnmstate%250Acp%2520%2522%2524src_path%252F%2524config_file%2522%2520%2522%2524src_path%252Fapplied%2522%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fnmstate-configuration.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255Bservice%255D%250Akeep_state_file_after_apply%2520%253D%2520true%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fnmstate%2Fnmstate.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%2523%2520Set%2520interface%2520ofport_request%2520to%2520guarantee%2520stable%2520ofport%2520numbers.%2520This%2520is%2520important%2520for%2520flow%2520matches.%250A%2523%2520Otherwise%252C%2520another%2520ofport%2520number%2520is%2520assigned%2520to%2520the%2520interface%2520on%2520every%2520restart%2520of%2520NetworkManager.%250A%2523%2520This%2520script%2520will%2520build%2520an%2520associative%2520array%2520INTERFACE_NAME-%253Eofport_request%2520and%2520will%2520save%2520it%2520to%2520file%2520CONFIGURATION_FILE.%250A%2523%2520When%2520an%2520interface%2520is%2520brought%2520up%252C%2520this%2520will%2520reuse%2520the%2520value%2520from%2520the%2520associative%2520array%2520if%2520such%2520a%2520value%2520exists.%250A%2523%2520Otherwise%252C%2520this%2520will%2520try%2520to%2520use%2520the%2520current%2520ofport%2520value.%2520If%2520the%2520ofport%2520value%2520is%2520already%2520reserved%252C%2520then%250A%2523%2520this%2520uses%2520the%2520lowest%2520available%2520numerical%2520value%252C%2520instead.%250Aset%2520-eux%2520-o%2520pipefail%250Aif%2520%255B%255B%2520%2522OVNKubernetes%2522%2520!%253D%2520%2522OVNKubernetes%2522%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250AINTERFACE_NAME%253D%25241%250AOPERATION%253D%25242%250A%250A%2523%2520Only%2520execute%2520this%2520on%2520pre-up%250Aif%2520%255B%2520%2522%2524%257BOPERATION%257D%2522%2520!%253D%2520%2522pre-up%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520interface's%2520NM%2520uuid%250AINTERFACE_CONNECTION_UUID%253D%2524(nmcli%2520-t%2520-f%2520device%252Ctype%252Cuuid%2520conn%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bif(%25241%253D%253D%2522'%2524%257BINTERFACE_NAME%257D'%2522%2520%2526%2526%2520%25242!~%252F%255Eovs*%252F)%2520print%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BINTERFACE_CONNECTION_UUID%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520interface's%2520slave-type.%2520If%2520this%2520is%2520not%2520an%2520ovs-port%252C%2520then%2520exit%250AINTERFACE_OVS_SLAVE_TYPE%253D%2524(nmcli%2520-t%2520-f%2520connection.slave-type%2520conn%2520show%2520%2522%2524%257BINTERFACE_CONNECTION_UUID%257D%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BINTERFACE_OVS_SLAVE_TYPE%257D%2522%2520!%253D%2520%2522ovs-port%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520This%2520is%2520not%2520necessarily%2520a%2520UUID%2520(can%2520be%2520a%2520name%2520in%2520case%2520of%2520bonds)%2520but%2520this%2520should%2520be%2520unique%250APORT%253D%2524(nmcli%2520-t%2520-f%2520connection.master%2520conn%2520show%2520%2522%2524%257BINTERFACE_CONNECTION_UUID%257D%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BPORT%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520interface's%2520NM%2520uuid%250APORT_CONNECTION_UUID%253D%2524(nmcli%2520-t%2520-f%2520device%252Ctype%252Cuuid%2520conn%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bif(%2520(%25241%253D%253D%2522'%2524%257BPORT%257D'%2522%2520%257C%257C%2520%25243%253D%253D%2522'%2524%257BPORT%257D'%2522)%2520%2526%2526%2520%25242~%252F%255Eovs*%252F)%2520print%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BPORT_CONNECTION_UUID%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520port's%2520slave-type.%2520If%2520this%2520is%2520not%2520an%2520ovs-bridge%252C%2520then%2520exit%250APORT_OVS_SLAVE_TYPE%253D%2524(nmcli%2520-t%2520-f%2520connection.slave-type%2520conn%2520show%2520%2522%2524%257BPORT_CONNECTION_UUID%257D%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BPORT_OVS_SLAVE_TYPE%257D%2522%2520!%253D%2520%2522ovs-bridge%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520port's%2520master.%2520If%2520it%2520doesn't%2520have%2520any%252C%2520assume%2520it's%2520not%2520our%2520bridge%250ABRIDGE_ID%253D%2524(nmcli%2520-t%2520-f%2520connection.master%2520conn%2520show%2520%2522%2524%257BPORT_CONNECTION_UUID%257D%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%250Aif%2520%255B%2520%2522%2524%257BBRIDGE_ID%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Get%2520the%2520bridge%2520name%250ABRIDGE_NAME%253D%2524(nmcli%2520-t%2520-f%2520connection.interface-name%2520conn%2520show%2520%2522%2524%257BBRIDGE_ID%257D%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%2520%257C%257C%2520true%250A%2523%2520Limit%2520this%2520to%2520br-ex%2520and%2520br-ex1%2520only.%2520If%2520one%2520wanted%2520to%2520enable%2520this%2520for%2520all%2520OVS%2520bridges%252C%250A%2523%2520the%2520condition%2520would%2520be%253A%2520if%2520%255B%2520%2522%2524BRIDGE_NAME%2522%2520%253D%253D%2520%2522%2522%2520%255D%253B%2520then%250A%2523%2520OCPBUGS-54682%253A%2520If%2520the%2520condition%2520is%2520not%2520met%2520the%2520first%2520time%2520it%2520will%2520check%2520for%2520br-ex-br%2520to%2520see%2520if%2520there%2520is%2520a%2520K-NMS%2520managed%2520br-ex.%250Aif%2520%255B%2520%2522%2524%257BBRIDGE_NAME%257D%2522%2520!%253D%2520%2522br-ex%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524%257BBRIDGE_NAME%257D%2522%2520!%253D%2520%2522br-ex1%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520BRIDGE_NAME%253D%2524(nmcli%2520-t%2520-f%2520connection.interface-name%2520conn%2520show%2520%2522br-ex-br%2522%2520%257C%2520awk%2520-F%2520'%253A'%2520'%257Bprint%2520%2524NF%257D')%250Afi%250Aif%2520%255B%2520%2522%2524%257BBRIDGE_NAME%257D%2522%2520!%253D%2520%2522br-ex%2522%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524%257BBRIDGE_NAME%257D%2522%2520!%253D%2520%2522br-ex1%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250A%2523%2520Make%2520sure%2520that%2520the%2520interface%2520is%2520plugged%2520into%2520OVS%250A%2523%2520This%2520should%2520always%2520be%2520the%2520case%2520given%2520that%2520we%2520are%2520in%2520pre-up%252C%2520but%2520exit%2520gracefully%2520in%2520the%2520odd%2520case%2520that%2520it's%2520not%250Aif%2520!%2520ovs-vsctl%2520list%2520interface%2520%2522%2524%257BINTERFACE_NAME%257D%2522%2520%253E%252Fdev%252Fnull%25202%253E%25261%253B%2520then%250A%2520%2520%2520%2520exit%25200%250Afi%250A%250ACONFIGURATION_FILE%253D%2522%252Frun%252Fofport_requests.%2524%257BBRIDGE_NAME%257D%2522%250A%250A%2523%2520Declare%2520a%2520new%2520associative%2520array.%2520If%2520CONFIGURATION_FILE%2520exists%252C%2520source%2520entries%2520from%2520there%250Adeclare%2520-A%2520INTERFACES%250Aif%2520%255B%2520-f%2520%2522%2524%257BCONFIGURATION_FILE%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Sourcing%2520configuration%2520file%2520'%2524%257BCONFIGURATION_FILE%257D'%2520with%2520contents%253A%2522%250A%2520%2520%2520%2520cat%2520%2522%2524%257BCONFIGURATION_FILE%257D%2522%250A%2520%2520%2520%2520source%2520%2522%2524%257BCONFIGURATION_FILE%257D%2522%250Afi%250A%250A%2523%2520get_interface_ofport_request%2520will%2520return%250A%2523%2520*%2520either%253A%2520the%2520current%2520ofport%2520assignment%2520for%2520the%2520port%2520if%2520no%2520interface%2520has%2520claimed%2520this%2520ofport%2520number%252C%2520yet%250A%2523%2520*%2520or%253A%2520%2520%2520%2520%2520the%2520lowest%2520available%2520free%2520ofport%2520number%250Afunction%2520get_interface_ofport_request()%2520%257B%250A%2520%2520%2520%2520%2523%2520Build%2520an%2520array%2520that%2520only%2520contains%2520the%2520currently%2520reserved%2520ofport_requests%250A%2520%2520%2520%2520declare%2520-A%2520ofport_requests%250A%2520%2520%2520%2520for%2520interface_name%2520in%2520%2522%2524%257B!INTERFACES%255B%2540%255D%257D%2522%253B%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520ofport_requests%255B%2524%257BINTERFACES%255B%2524interface_name%255D%257D%255D%253D%2524%257BINTERFACES%255B%2524interface_name%255D%257D%250A%2520%2520%2520%2520done%250A%250A%2520%2520%2520%2520%2523%2520Get%2520the%2520current%2520ofport%2520number%2520assignment%250A%2520%2520%2520%2520local%2520current_ofport%253D%2524(ovs-vsctl%2520get%2520Interface%2520%2522%2524%257BINTERFACE_NAME%257D%2522%2520ofport)%250A%250A%2520%2520%2520%2520%2523%2520If%2520the%2520current%2520ofport%2520number%2520is%2520still%2520free%252C%2520use%2520it%250A%2520%2520%2520%2520if%2520!%2520%255B%2520%2522%2524%257Bofport_requests%255B%2524current_ofport%255D%252Ba%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2524current_ofport%250A%2520%2520%2520%2520%2520%2520%2520%2520return%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520If%2520the%2520current%2520ofport%2520number%2520is%2520not%2520free%252C%2520return%2520the%2520lowest%2520free%2520entry%250A%2520%2520%2520%2520i%253D0%250A%2520%2520%2520%2520for%2520i%2520in%2520%257B1..65000%257D%253B%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520!%2520%255B%2520%2522%2524%257Bofport_requests%255B%2524i%255D%252Ba%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2524i%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520return%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520done%250A%250A%2520%2520%2520%2520%2523%2520if%2520we%2520still%2520cannot%2520find%2520an%2520ID%252C%2520exit%2520with%2520an%2520error%250A%2520%2520%2520%2520echo%2520%2522Impossible%2520to%2520find%2520an%2520ofport%2520ID%2520for%2520interface%2520%2524%257BINTERFACE_NAME%257D%2522%2520%253E%25262%250A%2520%2520%2520%2520exit%25201%250A%257D%250A%250A%2523%2520If%2520INTERFACES%255BINTERFACE_NAME%255D%2520exists%252C%2520use%2520that%2520value%250A%2523%2520If%2520INTERFACES%255BINTERFACE_NAME%255D%2520does%2520not%2520exists%252C%2520use%2520the%2520value%2520from%2520get_interface_ofport_request%250Aif%2520!%2520%255B%2520%2522%2524%257BINTERFACES%255B%2524INTERFACE_NAME%255D%252Ba%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520INTERFACES%255B%2524INTERFACE_NAME%255D%253D%2524(get_interface_ofport_request)%250Afi%250A%2523%2520Set%2520ofport_request%2520according%2520to%2520INTERFACES%255BINTERFACE_NAME%255D%250Aovs-vsctl%2520set%2520Interface%2520%2522%2524%257BINTERFACE_NAME%257D%2522%2520ofport_request%253D%2524%257BINTERFACES%255B%2524INTERFACE_NAME%255D%257D%250A%250A%2523%2520Save%2520current%2520state%2520of%2520INTERFACES%2520to%2520CONFIGURATION_FILE%250Adeclare%2520-p%2520INTERFACES%2520%253E%257C%2520%2522%2524%257BCONFIGURATION_FILE%257D%2522%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fdispatcher.d%2Fpre-up.d%2F10-ofport-request.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%250A%2523%2520Extract%2520Podman%2520version%2520and%2520determine%2520the%2520signature%2520policy%250A%252Fusr%252Fbin%252Fpodman%2520-v%2520%257C%2520%252Fbin%252Fawk%2520'%257B%250A%2520%2520%2520%2520split(%25243%252C%2520version%252C%2520%2522-%2522)%253B%250A%2520%2520%2520%2520clean_version%2520%253D%2520version%255B1%255D%253B%250A%250A%2520%2520%2520%2520split(clean_version%252C%2520current%252C%2520%252F%255C.%252F)%253B%250A%2520%2520%2520%2520split(%25224.4.1%2522%252C%2520target%252C%2520%252F%255C.%252F)%253B%250A%250A%2520%2520%2520%2520for%2520(i%2520%253D%25201%253B%2520i%2520%253C%253D%25203%253B%2520i%252B%252B)%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520((current%255Bi%255D%2520%252B%25200)%2520%253C%2520(target%255Bi%255D%2520%252B%25200))%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520print%2520%2522--signature-policy%2520%252Fetc%252Fmachine-config-daemon%252Fpolicy-for-old-podman.json%2522%253B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520exit%253B%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%2520else%2520if%2520((current%255Bi%255D%2520%252B%25200)%2520%253E%2520(target%255Bi%255D%2520%252B%25200))%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520exit%253B%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520%257D%250A%257D'%2520%253E%2520%252Ftmp%252Fpodman_policy_args%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fmachine-config-daemon%2Fgenerate_podman_policy_args.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%257B%2522auths%2522%253A%257B%2522fake%2522%253A%257B%2522auth%2522%253A%2522aWQ6cGFzcwo%253D%2522%257D%257D%257D%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20384%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fvar%2Flib%2Fkubelet%2Fconfig.json%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520Needed%2520by%2520the%2520OpenShift%2520SDN.%2520See%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1758552%250Anet.ipv4.conf.all.arp_announce%2520%253D%25202%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsysctl.d%2Farp.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520See%253A%2520rhbz%25231384746%252C%2520OCPBUGS-24012%250Anet.ipv4.neigh.default.gc_thresh1%253D8192%250Anet.ipv4.neigh.default.gc_thresh2%253D32768%250Anet.ipv4.neigh.default.gc_thresh3%253D65536%250Anet.ipv6.neigh.default.gc_thresh1%253D8192%250Anet.ipv6.neigh.default.gc_thresh2%253D32768%250Anet.ipv6.neigh.default.gc_thresh3%253D65536%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsysctl.d%2Fgc-thresh.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%250Afs.inotify.max_user_watches%2520%253D%252065536%250Afs.inotify.max_user_instances%2520%253D%25208192%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsysctl.d%2Finotify.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2Cvm.unprivileged_userfaultfd%2520%253D%25201%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsysctl.d%2Fenable-userfaultfd.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523%2520Needed%2520for%2520OpenShift%2520Logging%2520(ElasticSearch).%2520See%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1793714%250Avm.max_map_count%2520%253D%2520262144%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fsysctl.d%2Fvm-max-map.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-euo%2520pipefail%250A%250A%2523%2520First%252C%2520we%2520need%2520to%2520wait%2520until%2520DHCP%2520finishes%2520and%2520the%2520node%2520has%2520a%2520non-%2560localhost%2560%250A%2523%2520hostname%2520before%2520%2560kubelet.service%2560%2520starts.%250A%2523%2520That's%2520the%2520%2560--wait%2560%2520argument%2520as%2520used%2520by%2520%2560node-valid-hostname.service%2560.%250A%2523%250A%2523%2520Second%252C%2520on%2520GCP%2520specifically%2520we%2520truncate%2520the%2520hostname%2520if%2520it's%2520%253E63%2520characters.%250A%2523%2520That's%2520%2560gcp-hostname.service%2560.%250A%250A%2523%2520Block%2520indefinitely%2520until%2520the%2520host%2520gets%2520a%2520non-localhost%2520name.%250A%2523%2520Note%2520node-valid-hostname.service%2520uses%2520systemd%2520to%2520abort%2520if%2520this%2520takes%2520too%2520long.%250Await_localhost()%2520%257B%250A%2520%2520%2520%2520echo%2520%2522waiting%2520for%2520non-localhost%2520hostname%2520to%2520be%2520assigned%2522%250A%2520%2520%2520%2520while%2520%255B%255B%2520%2522%2524(%253C%2520%252Fproc%252Fsys%252Fkernel%252Fhostname)%2522%2520%253D~%2520(localhost%257Clocalhost.localdomain)%2520%255D%255D%253B%250A%2520%2520%2520%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520sleep%25201%250A%2520%2520%2520%2520done%250A%250A%2520%2520%2520%2520%2523%2520Some%2520cloud%2520platforms%2520may%2520assign%2520a%2520hostname%2520with%2520a%2520trailing%2520dot.%250A%2520%2520%2520%2520%2523%2520However%252C%2520tools%2520like%2520%2560hostnamectl%2560%2520(used%2520by%2520systemd)%2520do%2520not%2520allow%2520trailing%2520dots%252C%250A%2520%2520%2520%2520%2523%2520so%2520we%2520strip%2520the%2520trailing%2520dot%2520before%2520applying%2520the%2520hostname.%250A%2520%2520%2520%2520HOSTNAME%253D%2522%2524(%253C%252Fproc%252Fsys%252Fkernel%252Fhostname)%2522%250A%2520%2520%2520%2520CLEAN_HOSTNAME%253D%2522%2524%257BHOSTNAME%2525.%257D%2522%2520%250A%2520%2520%2520%2520echo%2520%2522node%2520identified%2520as%2520%2524CLEAN_HOSTNAME%2522%250A%2520%2520%2520%2520echo%2520%2522saving%2520hostname%2520to%2520prevent%2520NetworkManager%2520from%2520ever%2520unsetting%2520it%2522%250A%2520%2520%2520%2520hostnamectl%2520set-hostname%2520--static%2520--transient%2520%2522%2524CLEAN_HOSTNAME%2522%250A%2520%2520%2520%2520exit%25200%250A%257D%250A%250Aset_gcp_hostname()%2520%257B%250A%2520%2520%2520%2520%252Fusr%252Fbin%252Fafterburn%2520--provider%2520gcp%2520--hostname%253D%252Frun%252Fafterburn.hostname%250A%250A%2520%2520%2520%2520local%2520host_name%253D%2524(cat%2520%252Frun%252Fafterburn.hostname)%250A%2520%2520%2520%2520local%2520type_arg%253D%2522transient%2522%250A%250A%2520%2520%2520%2520%2523%2520%252Fetc%252Fhostname%2520is%2520used%2520for%2520static%2520hostnames%2520and%2520is%2520authoritative.%250A%2520%2520%2520%2520%2523%2520This%2520will%2520check%2520to%2520make%2520sure%2520that%2520the%2520static%2520hostname%2520is%2520the%250A%2520%2520%2520%2520%2523%2520less%2520than%2520or%2520equal%2520to%252063%2520characters%2520in%2520length.%250A%2520%2520%2520%2520if%2520%255B%2520-f%2520%252Fetc%252Fhostname%2520%255D%2520%2526%2526%2520%255B%2520%2522%2524(cat%2520%252Fetc%252Fhostname%2520%257C%2520wc%2520-m)%2522%2520-gt%25200%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520etc_name%253D%2522%2524(%253C%2520%252Fetc%252Fhostname)%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520type_arg%253D%2522static%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257Betc_name%257D%2522%2520!%253D%2520%2522%2524%257Bhost_name%257D%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522%252Fetc%252Fhostname%2520is%2520set%2520to%2520%2524%257Betc_name%257D%2520but%2520does%2520not%2520match%2520%2524%257Bhost_name%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522using%2520%252Fetc%252Fhostname%2520as%2520the%2520authoritative%2520name%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520host_name%253D%2522%2524%257Betc_name%257D%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520fi%250A%250A%2520%2520%2520%2520%2523%2520Only%2520mutate%2520the%2520hostname%2520if%2520the%2520length%2520is%2520longer%2520than%252063%2520characters.%2520The%250A%2520%2520%2520%2520%2523%2520hostname%2520will%2520be%2520the%2520lesser%2520of%252063%2520characters%2520after%2520the%2520first%2520dot%2520in%2520the%250A%2520%2520%2520%2520%2523%2520FQDN.%2520%2520This%2520algorithm%2520is%2520only%2520known%2520to%2520work%2520in%2520GCP%252C%2520and%2520hence%2520is%2520only%250A%2520%2520%2520%2520%2523%2520executed%2520in%2520GCP.%250A%2520%2520%2520%2520if%2520%255B%2520%2522%2524%257B%2523host_name%257D%2522%2520-gt%252063%2520%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520alt_name%253D%2524(printf%2520%2522%2524%257Bhost_name%257D%2522%2520%257C%2520cut%2520-f1%2520-d'.'%2520%257C%2520cut%2520-c%2520-63)%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522%2524%257Bhost_name%257D%2520is%2520longer%2520than%252063%2520characters%252C%2520using%2520truncated%2520hostname%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520host_name%253D%2522%2524%257Balt_name%257D%2522%250A%2520%2520%2520%2520fi%250A%2520%2520%2520%2520echo%2520%2522setting%2520%2524%257Btype_arg%257D%2520hostname%2520to%2520%2524%257Bhost_name%257D%2522%250A%2520%2520%2520%2520%252Fbin%252Fhostnamectl%2520%2522--%2524%257Btype_arg%257D%2522%2520set-hostname%2520%2522%2524%257Bhost_name%257D%2522%250A%2520%2520%2520%2520exit%25200%250A%257D%250A%250Aset_openstack_hostname()%2520%257B%250A%2520%2520%2520%2520%2523%2520Read%2520metadata%2520written%2520by%2520afterburn%2520service%250A%2520%2520%2520%2520.%2520%252Frun%252Fmetadata%252Fafterburn%250A%250A%2520%2520%2520%2520%2523%2520node-valid-hostname%2520sets%2520persistent%2520hostname%2520from%2520%252Fproc%252Fsys%252Fkernel%252Fhostname%250A%2520%2520%2520%2520echo%2520%2522%2524AFTERBURN_OPENSTACK_HOSTNAME%2522%2520%253E%2520%252Fproc%252Fsys%252Fkernel%252Fhostname%250A%257D%250A%250Aset_powervs_hostname()%2520%257B%250A%2520%2520%2520%2520%2523%2520Read%2520metadata%2520written%2520by%2520afterburn%2520service%250A%2520%2520%2520%2520.%2520%252Frun%252Fmetadata%252Fafterburn%250A%250A%2520%2520%2520%2520%2523%2520node-valid-hostname%2520sets%2520persistent%2520hostname%2520from%2520%252Fproc%252Fsys%252Fkernel%252Fhostname%250A%2520%2520%2520%2520echo%2520%2522%2524AFTERBURN_POWERVS_LOCAL_HOSTNAME%2522%2520%253E%2520%252Fproc%252Fsys%252Fkernel%252Fhostname%250A%257D%250A%250Aarg%253D%2524%257B1%257D%253B%2520shift%253B%250Acase%2520%2522%2524%257Barg%257D%2522%2520in%250A%2520%2520%2520%2520--wait)%2520wait_localhost%253B%253B%250A%2520%2520%2520%2520--gcp)%2520set_gcp_hostname%253B%253B%250A%2520%2520%2520%2520--openstack)%2520set_openstack_hostname%253B%253B%250A%2520%2520%2520%2520--powervs)%2520set_powervs_hostname%253B%253B%250A%2520%2520%2520%2520*)%2520echo%2520%2522Unhandled%2520arg%2520%2524arg%2522%253B%2520exit%25201%250Aesac%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fmco-hostname%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%250Aset%2520-eou%2520pipefail%250A%250A%2523%2520context%250Aintapi%253D%2524(oc%2520get%2520infrastructures.config.openshift.io%2520cluster%2520-o%2520%2522jsonpath%253D%257B.status.apiServerInternalURI%257D%2522)%250Acontext%253D%2522%2524(oc%2520config%2520current-context)%2522%250A%2523%2520cluster%250Acluster%253D%2522%2524(oc%2520config%2520view%2520-o%2520%2522jsonpath%253D%257B.contexts%255B%253F(%2540.name%253D%253D%255C%2522%2524context%255C%2522)%255D.context.cluster%257D%2522)%2522%250Aserver%253D%2522%2524(oc%2520config%2520view%2520-o%2520%2522jsonpath%253D%257B.clusters%255B%253F(%2540.name%253D%253D%255C%2522%2524cluster%255C%2522)%255D.cluster.server%257D%2522)%2522%250A%2523%2520token%250Aca_crt_data%253D%2522%2524(oc%2520get%2520secret%2520-n%2520openshift-machine-config-operator%2520node-bootstrapper-token%2520-o%2520%2522jsonpath%253D%257B.data.ca%255C.crt%257D%2522%2520%257C%2520base64%2520--decode)%2522%250Anamespace%253D%2522%2524(oc%2520get%2520secret%2520-n%2520openshift-machine-config-operator%2520node-bootstrapper-token%2520%2520-o%2520%2522jsonpath%253D%257B.data.namespace%257D%2522%2520%257C%2520base64%2520--decode)%2522%250Atoken%253D%2522%2524(oc%2520get%2520secret%2520-n%2520openshift-machine-config-operator%2520node-bootstrapper-token%2520-o%2520%2522jsonpath%253D%257B.data.token%257D%2522%2520%257C%2520base64%2520--decode)%2522%250A%250Aexport%2520KUBECONFIG%253D%2522%2524(mktemp)%2522%250Akubectl%2520config%2520set-credentials%2520%2522kubelet%2522%2520--token%253D%2522%2524token%2522%2520%253E%252Fdev%252Fnull%250Aca_crt%253D%2522%2524(mktemp)%2522%253B%2520echo%2520%2522%2524ca_crt_data%2522%2520%253E%2520%2524ca_crt%250Akubectl%2520config%2520set-cluster%2520%2524cluster%2520--server%253D%2522%2524intapi%2522%2520--certificate-authority%253D%2522%2524ca_crt%2522%2520--embed-certs%2520%253E%252Fdev%252Fnull%250Akubectl%2520config%2520set-context%2520kubelet%2520--cluster%253D%2522%2524cluster%2522%2520--user%253D%2522kubelet%2522%2520%253E%252Fdev%252Fnull%250Akubectl%2520config%2520use-context%2520kubelet%2520%253E%252Fdev%252Fnull%250Acat%2520%2522%2524KUBECONFIG%2522%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Frecover-kubeconfig.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fkubelet-plugins%2Fvolume%2Fexec%2F.dummy%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250A%2523%2520Workaround%253A%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1941714%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1935539%250A%2523%2520https%253A%252F%252Fbugzilla.redhat.com%252Fshow_bug.cgi%253Fid%253D1987108%250A%250Adriver%253D%2524(nmcli%2520-t%2520-m%2520tabular%2520-f%2520general.driver%2520dev%2520show%2520%2522%2524%257BDEVICE_IFACE%257D%2522)%250A%250Aif%2520%255B%255B%2520%2522%25242%2522%2520%253D%253D%2520%2522up%2522%2520%2526%2526%2520%2522%2524%257Bdriver%257D%2522%2520%253D%253D%2520%2522vmxnet3%2522%2520%255D%255D%253B%2520then%250A%2520%2520logger%2520-s%2520%252299-vsphere-disable-tx-udp-tnl%2520triggered%2520by%2520%2524%257B2%257D%2520on%2520device%2520%2524%257BDEVICE_IFACE%257D.%2522%250A%2520%2520ethtool%2520-K%2520%2524%257BDEVICE_IFACE%257D%2520tx-udp_tnl-segmentation%2520off%250A%2520%2520ethtool%2520-K%2520%2524%257BDEVICE_IFACE%257D%2520tx-udp_tnl-csum-segmentation%2520off%250A%2520%2520ethtool%2520-K%2520%2524%257BDEVICE_IFACE%257D%2520tx-checksum-ip-generic%2520off%250Afi%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20484%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2FNetworkManager%2Fdispatcher.d%2F99-vsphere-disable-tx-udp-tnl%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-x%250A%250Aif%2520%255B%2520!%2520-e%2520%2522%252Fetc%252Fipsec.d%252Fopenshift.conf%2522%2520%255D%253B%2520then%250A%2520%2520exit%25200%250Afi%250A%250A%2523%2520Modify%2520existing%2520IPsec%2520out%2520connection%2520entries%2520with%2520%2522auto%253Dstart%2522%250A%2523%2520option%2520and%2520restart%2520ipsec%2520systemd%2520service.%2520This%2520helps%2520to%250A%2523%2520establish%2520IKE%2520SAs%2520for%2520the%2520existing%2520IPsec%2520connections%2520with%250A%2523%2520peer%2520nodes.%2520This%2520option%2520will%2520be%2520deleted%2520from%2520connections%250A%2523%2520once%2520ovs-monitor-ipsec%2520process%2520spinned%2520up%2520on%2520the%2520node%2520by%250A%2523%2520ovn-ipsec-host%2520pod%252C%2520but%2520still%2520it%2520won't%2520reestablish%2520IKE%2520SAs%250A%2523%2520again%2520with%2520peer%2520nodes%252C%2520so%2520it%2520shouldn't%2520be%2520a%2520problem.%250A%2523%2520We%2520are%2520updating%2520only%2520out%2520connections%2520with%2520%2522auto%253Dstart%2522%2520to%250A%2523%2520avoid%2520cross%2520stream%2520issue%2520with%2520Libreswan%25205.2.%250A%2523%2520The%2520in%2520connections%2520use%2520default%2520auto%253Droute%2520parameter.%250Aif%2520!%2520grep%2520-q%2520%2522auto%253Dstart%2522%2520%252Fetc%252Fipsec.d%252Fopenshift.conf%253B%2520then%250A%2520%2520sed%2520-i%2520'%252F%255E.*conn%2520ovn.*-out-1%2524%252Fa%255C%2520%2520%2520%2520auto%253Dstart'%2520%252Fetc%252Fipsec.d%252Fopenshift.conf%250Afi%250Achroot%2520%252Fproc%252F1%252Froot%2520ipsec%2520restart%250A%250A%2523%2520Wait%2520for%2520upto%252060s%2520to%2520get%2520IPsec%2520SAs%2520to%2520establish%2520with%2520peer%2520nodes.%250Atimeout%253D60%250Aelapsed%253D0%250Adesiredconn%253D%2522%2522%250Aestablishedsa%253D%2522%2522%250Awhile%2520%255B%255B%2520%2524elapsed%2520-lt%2520%2524timeout%2520%255D%255D%253B%2520do%250A%2520%2520desiredconn%253D%2524(grep%2520-E%2520'%255E%255Cs*conn%255Cs%252B'%2520%252Fetc%252Fipsec.d%252Fopenshift.conf%2520%257C%2520grep%2520-v%2520'%2525default'%2520%257C%2520awk%2520'%257Bprint%2520%25242%257D'%2520%257C%2520tr%2520'%2520'%2520'%255Cn'%2520%257C%2520sort%2520%257C%2520tr%2520'%255Cn'%2520'%2520')%250A%2520%2520establishedsa%253D%2524(ipsec%2520showstates%2520%257C%2520grep%2520ESTABLISHED_CHILD_SA%2520%257C%2520grep%2520-o%2520'%2522%255B%255E%2522%255D*%2522'%2520%257C%2520sed%2520's%252F%2522%252F%252Fg'%2520%257C%2520tr%2520'%2520'%2520'%255Cn'%2520%257C%2520sort%2520%257C%2520uniq%2520%257C%2520tr%2520'%255Cn'%2520'%2520')%250A%2520%2520if%2520%255B%2520%2522%2524desiredconn%2522%2520%253D%253D%2520%2522%2524establishedsa%2522%2520%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522IPsec%2520SAs%2520are%2520established%2520for%2520desired%2520connections%2520after%2520%2524%257Belapsed%257Ds%2522%250A%2520%2520%2520%2520break%250A%2520%2520else%250A%2520%2520%2520%2520echo%2520%2522IPsec%2520SAs%2520are%2520not%2520established%2520yet%252C%2520total%2520waited%2520time%2520%2524%257Belapsed%257Ds%2522%250A%2520%2520%2520%2520sleep%25202s%250A%2520%2520fi%250A%2520%2520elapsed%253D%2524((elapsed%2520%252B%25202))%250Adone%250A%250Aif%2520%255B%255B%2520%2524elapsed%2520-ge%2520%2524timeout%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Timed%2520out%2520waiting%252C%2520some%2520connections%2520are%2520not%2520established%252C%2520desired%2520conns%2520%2524desiredconn%252C%2520established%2520conns%2520%2524establishedsa%2522%250Afi%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fipsec-connect-wait.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fbash%250Aset%2520-eux%250A%250Aif%2520%255B%2520!%2520-e%2520%252Fetc%252Fnmstate%252Fopenshift%252Fapplied%2520%255D%253B%2520then%250A%2520%2520%2523%2520No%2520need%2520to%2520do%2520this%2520if%2520no%2520NMState%2520configuration%2520was%2520applied%250A%2520%2520exit%25200%250Afi%250A%250A%2523%2520This%2520logic%2520is%2520borrowed%2520from%2520configure-ovs.sh%250A%2523%2520TODO%253A%2520Find%2520a%2520platform-agnostic%2520way%2520to%2520do%2520this.%2520It%2520won't%2520work%2520on%2520platforms%2520where%250A%2523%2520nodeip-configuration%2520is%2520not%2520used.%250Aip%253D%2524(cat%2520%252Frun%252Fnodeip-configuration%252Fprimary-ip)%250Aif%2520%255B%255B%2520%2522%2524%257Bip%257D%2522%2520%253D%253D%2520%2522%2522%2520%255D%255D%253B%2520then%250A%2520%2520echo%2520%2522No%2520ip%2520to%2520bind%2520was%2520found%2522%250A%2520%2520exit%25201%250Afi%250Awhile%2520%253A%250Ado%250A%2520%2520random_port%253D%2524(shuf%2520-i%252050000-60000%2520-n%25201)%250A%2520%2520echo%2520%2522Trying%2520to%2520bind%2520%2524%257Bip%257D%2520on%2520port%2520%2524%257Brandom_port%257D%2522%250A%2520%2520exit_code%253D%2524(timeout%25202s%2520nc%2520-l%2520%2522%2524%257Bip%257D%2522%2520%2524%257Brandom_port%257D%253B%2520echo%2520%2524%253F)%250A%2520%2520if%2520%255B%255B%2520exit_code%2520-eq%2520124%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520echo%2520%2522Address%2520bound%2520successfully%2522%250A%2520%2520%2520%2520exit%25200%250A%2520%2520fi%250A%2520%2520sleep%252010%250Adone%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fwait-for-primary-ip.sh%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2Cunqualified-search-registries%2520%253D%2520%255B'registry.access.redhat.com'%252C%2520'docker.io'%255D%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fcontainers%2Fregistries.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%255Bcrio%255D%250Ainternal_wipe%2520%253D%2520true%250Ainternal_repair%2520%253D%2520true%250A%250A%255Bcrio.api%255D%250Astream_address%2520%253D%2520%2522127.0.0.1%2522%250Astream_port%2520%253D%2520%25220%2522%250A%250A%255Bcrio.runtime%255D%250Aselinux%2520%253D%2520true%250Aconmon%2520%253D%2520%2522%2522%250Aconmon_cgroup%2520%253D%2520%2522pod%2522%250Adefault_env%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522NSS_SDB_USE_CACHE%253Dno%2522%252C%250A%255D%250Adefault_runtime%2520%253D%2520%2522crun%2522%250Alog_level%2520%253D%2520%2522info%2522%250Acgroup_manager%2520%253D%2520%2522systemd%2522%250Adefault_sysctls%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522net.ipv4.ping_group_range%253D0%25202147483647%2522%252C%250A%255D%250Ahooks_dir%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522%252Fetc%252Fcontainers%252Foci%252Fhooks.d%2522%252C%250A%2520%2520%2520%2520%2522%252Frun%252Fcontainers%252Foci%252Fhooks.d%2522%252C%250A%2520%2520%2520%2520%2522%252Fusr%252Fshare%252Fcontainers%252Foci%252Fhooks.d%2522%252C%250A%255D%250Amanage_ns_lifecycle%2520%253D%2520true%250Aabsent_mount_sources_to_reject%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522%252Fetc%252Fhostname%2522%252C%250A%255D%250Adrop_infra_ctr%2520%253D%2520true%250A%250A%255Bcrio.runtime.runtimes.runc%255D%250Aruntime_root%2520%253D%2520%2522%252Frun%252Frunc%2522%250Aallowed_annotations%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522io.containers.trace-syscall%2522%252C%250A%2520%2520%2520%2520%2522io.kubernetes.cri-o.Devices%2522%252C%250A%2520%2520%2520%2520%2522io.kubernetes.cri-o.LinkLogs%2522%252C%250A%255D%250A%250A%255Bcrio.runtime.runtimes.crun%255D%250Aruntime_root%2520%253D%2520%2522%252Frun%252Fcrun%2522%250Aallowed_annotations%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522io.containers.trace-syscall%2522%252C%250A%2520%2520%2520%2520%2522io.kubernetes.cri-o.Devices%2522%252C%250A%2520%2520%2520%2520%2522io.kubernetes.cri-o.LinkLogs%2522%252C%250A%255D%250A%2523%2520Based%2520on%2520https%253A%252F%252Fgithub.com%252Fcontainers%252Fcrun%252Fblob%252F27d7dd3a0%252FREADME.md%253Fplain%253D1%2523L48%250Acontainer_min_memory%2520%253D%2520%2522512KiB%2522%250Adefault_annotations%2520%253D%2520%257B%2522run.oci.systemd.subgroup%2522%2520%253D%2520%2522%2522%257D%250A%250A%255Bcrio.runtime.workloads.openshift-builder%255D%250Aactivation_annotation%2520%253D%2520%2522io.openshift.builder%2522%250Aallowed_annotations%2520%253D%2520%255B%250A%2520%2520%2522io.kubernetes.cri-o.userns-mode%2522%252C%250A%2520%2520%2522io.kubernetes.cri-o.Devices%2522%250A%255D%250A%255Bcrio.runtime.workloads.openshift-builder.resources%255D%250A%250A%255Bcrio.image%255D%250Aglobal_auth_file%2520%253D%2520%2522%252Fvar%252Flib%252Fkubelet%252Fconfig.json%2522%250Apause_image%2520%253D%2520%2522quay.io%252Fokd%252Fscos-content%2540sha256%253A058d0e796625c199c05985db1f376ddec0314db80902e0d6af5a1a9700986602%2522%250Apause_image_auth_file%2520%253D%2520%2522%252Fvar%252Flib%252Fkubelet%252Fconfig.json%2522%250Apause_command%2520%253D%2520%2522%252Fusr%252Fbin%252Fpod%2522%250Aoci_artifact_mount_support%2520%253D%2520false%250A%250A%255Bcrio.network%255D%250Anetwork_dir%2520%253D%2520%2522%252Fetc%252Fkubernetes%252Fcni%252Fnet.d%252F%2522%250Aplugin_dirs%2520%253D%2520%255B%250A%2520%2520%2520%2520%2522%252Fvar%252Flib%252Fcni%252Fbin%2522%252C%250A%255D%250A%250A%255Bcrio.metrics%255D%250Aenable_metrics%2520%253D%2520true%250Ametrics_host%2520%253D%2520%2522127.0.0.1%2522%250Ametrics_port%2520%253D%25209537%250Ametrics_collectors%2520%253D%2520%255B%250A%2520%2520%2522operations%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522operations_total%2522%250A%2520%2520%2522operations_latency_microseconds_total%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522operations_latency_seconds_total%2522%250A%2520%2520%2522operations_latency_microseconds%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522operations_latency_seconds%2522%250A%2520%2520%2522operations_errors%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522operations_errors_total%2522%250A%2520%2520%2522image_pulls_layer_size%2522%252C%250A%2520%2520%2522containers_oom_total%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522containers_oom_count_total%2522%250A%2520%2520%2522containers_oom%2522%252C%250A%2520%2520%2523%2520Drop%2520metrics%2520with%2520excessive%2520label%2520cardinality.%250A%2520%2520%2523%2520%2522image_pulls_by_digest%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_pulls_bytes_total%2522%250A%2520%2520%2523%2520%2522image_pulls_by_name%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_pulls_bytes_total%2522%250A%2520%2520%2523%2520%2522image_pulls_by_name_skipped%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_pulls_skipped_bytes_total%2522%250A%2520%2520%2523%2520%2522image_pulls_failures%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_pulls_failure_total%2522%250A%2520%2520%2523%2520%2522image_pulls_successes%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_pulls_success_total%2522%250A%2520%2520%2523%2520%2522image_layer_reuse%2522%252C%2520%2523%2520DEPRECATED%253A%2520in%2520favour%2520of%2520%2522image_layer_reuse_total%2522%250A%2520%2520%2522operations_total%2522%252C%250A%2520%2520%2522operations_latency_seconds_total%2522%252C%250A%2520%2520%2522operations_latency_seconds%2522%252C%250A%2520%2520%2522operations_errors_total%2522%252C%250A%2520%2520%2522image_pulls_bytes_total%2522%252C%250A%2520%2520%2522image_pulls_skipped_bytes_total%2522%252C%250A%2520%2520%2522image_pulls_success_total%2522%252C%250A%2520%2520%2522image_pulls_failure_total%2522%252C%250A%2520%2520%2522image_layer_reuse_total%2522%252C%250A%2520%2520%2522containers_oom_count_total%2522%252C%250A%2520%2520%2522processes_defunct%2522%250A%255D%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fcrio%2Fcrio.conf.d%2F00-default%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%257B%250A%2520%2520%2520%2520%2522default%2522%253A%2520%255B%250A%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522type%2522%253A%2520%2522insecureAcceptAnything%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520%255D%252C%250A%2520%2520%2520%2520%2522transports%2522%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522docker-daemon%2522%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522%2522%253A%2520%255B%257B%2522type%2522%253A%2522insecureAcceptAnything%2522%257D%255D%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%257D%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fmachine-config-daemon%2Fpolicy-for-old-podman.json%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%257B%250A%2520%2520%2520%2520%2522default%2522%253A%2520%255B%250A%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522type%2522%253A%2520%2522insecureAcceptAnything%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520%255D%252C%250A%2520%2520%2520%2520%2522transports%2522%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522docker-daemon%2522%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522%2522%253A%2520%255B%257B%2522type%2522%253A%2522insecureAcceptAnything%2522%257D%255D%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520%2520%2520%2520%2520%257D%250A%257D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fcontainers%2Fpolicy.json%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fcloud.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2Cauthorization%253A%250A%2520%2520static%253A%250A%2520%2520%2520%2520-%2520resourceRequest%253A%2520false%250A%2520%2520%2520%2520%2520%2520path%253A%2520%252Fmetrics%250A%2520%2520%2520%2520%2520%2520verb%253A%2520get%250A%2520%2520%2520%2520%2520%2520user%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520name%253A%2520system%253Aserviceaccount%253Aopenshift-monitoring%253Aprometheus-k8s%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fcrio-metrics-proxy.cfg%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2CapiVersion%253A%2520v1%250Akind%253A%2520Pod%250Ametadata%253A%250A%2520%2520name%253A%2520kube-rbac-proxy-crio%250A%2520%2520namespace%253A%2520openshift-machine-config-operator%250A%2520%2520labels%253A%250A%2520%2520%2520%2520k8s-app%253A%2520kube-rbac-proxy-crio%250A%2520%2520annotations%253A%250A%2520%2520%2520%2520target.workload.openshift.io%252Fmanagement%253A%2520'%257B%2522effect%2522%253A%2520%2522PreferredDuringScheduling%2522%257D'%250A%2520%2520%2520%2520openshift.io%252Frequired-scc%253A%2520privileged%250Aspec%253A%250A%2520%2520volumes%253A%250A%2520%2520-%2520name%253A%2520etc-kube%250A%2520%2520%2520%2520hostPath%253A%250A%2520%2520%2520%2520%2520%2520path%253A%2520%2522%252Fetc%252Fkubernetes%2522%250A%2520%2520-%2520name%253A%2520var-lib-kubelet%250A%2520%2520%2520%2520hostPath%253A%250A%2520%2520%2520%2520%2520%2520path%253A%2520%2522%252Fvar%252Flib%252Fkubelet%2522%250A%2520%2520hostNetwork%253A%2520true%250A%2520%2520priorityClassName%253A%2520system-cluster-critical%250A%2520%2520initContainers%253A%250A%2520%2520-%2520name%253A%2520setup%250A%2520%2520%2520%2520terminationMessagePolicy%253A%2520FallbackToLogsOnError%250A%2520%2520%2520%2520image%253A%2520quay.io%252Fokd%252Fscos-content%2540sha256%253Aaa36c472584a0c689573eda62e425ebb25452b2a33c5254287950407d4f67f69%250A%2520%2520%2520%2520imagePullPolicy%253A%2520IfNotPresent%250A%2520%2520%2520%2520volumeMounts%253A%250A%2520%2520%2520%2520-%2520name%253A%2520var-lib-kubelet%250A%2520%2520%2520%2520%2520%2520mountPath%253A%2520%2522%252Fvar%2522%250A%2520%2520%2520%2520%2520%2520mountPropagation%253A%2520HostToContainer%250A%2520%2520%2520%2520command%253A%2520%255B'%252Fbin%252Fbash'%252C%2520'-ec'%255D%250A%2520%2520%2520%2520args%253A%250A%2520%2520%2520%2520-%2520%257C%250A%2520%2520%2520%2520%2520%2520echo%2520-n%2520%2522Waiting%2520for%2520kubelet%2520key%2520and%2520certificate%2520to%2520be%2520available%2522%250A%2520%2520%2520%2520%2520%2520while%2520%255B%2520-n%2520%2522%2524(test%2520-e%2520%252Fvar%252Flib%252Fkubelet%252Fpki%252Fkubelet-server-current.pem)%2522%2520%255D%2520%253B%2520do%250A%2520%2520%2520%2520%2520%2520%2520%2520echo%2520-n%2520%2522.%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520sleep%25201%250A%2520%2520%2520%2520%2520%2520%2520%2520((%2520tries%2520%252B%253D%25201%2520))%250A%2520%2520%2520%2520%2520%2520%2520%2520if%2520%255B%255B%2520%2522%2524%257Btries%257D%2522%2520-gt%252010%2520%255D%255D%253B%2520then%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520echo%2520%2522Timed%2520out%2520waiting%2520for%2520kubelet%2520key%2520and%2520cert.%2522%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520exit%25201%250A%2520%2520%2520%2520%2520%2520%2520%2520fi%250A%2520%2520%2520%2520%2520%2520done%250A%2520%2520%2520%2520securityContext%253A%250A%2520%2520%2520%2520%2520%2520privileged%253A%2520true%250A%2520%2520%2520%2520resources%253A%250A%2520%2520%2520%2520%2520%2520requests%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520memory%253A%252050Mi%250A%2520%2520%2520%2520%2520%2520%2520%2520cpu%253A%25205m%250A%2520%2520containers%253A%250A%2520%2520-%2520name%253A%2520kube-rbac-proxy-crio%250A%2520%2520%2520%2520image%253A%2520quay.io%252Fokd%252Fscos-content%2540sha256%253Aaa36c472584a0c689573eda62e425ebb25452b2a33c5254287950407d4f67f69%250A%2520%2520%2520%2520securityContext%253A%250A%2520%2520%2520%2520%2520%2520privileged%253A%2520true%250A%2520%2520%2520%2520ports%253A%250A%2520%2520%2520%2520-%2520containerPort%253A%25209637%250A%2520%2520%2520%2520args%253A%250A%2520%2520%2520%2520-%2520--secure-listen-address%253D%253A9637%250A%2520%2520%2520%2520-%2520--config-file%253D%252Fetc%252Fkubernetes%252Fcrio-metrics-proxy.cfg%250A%2520%2520%2520%2520-%2520--client-ca-file%253D%252Fetc%252Fkubernetes%252Fkubelet-ca.crt%250A%2520%2520%2520%2520-%2520--logtostderr%253Dtrue%250A%2520%2520%2520%2520-%2520--kubeconfig%253D%252Fvar%252Flib%252Fkubelet%252Fkubeconfig%250A%2520%2520%2520%2520-%2520--tls-cipher-suites%253DTLS_AES_128_GCM_SHA256%252CTLS_AES_256_GCM_SHA384%252CTLS_CHACHA20_POLY1305_SHA256%252CTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256%252CTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256%252CTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384%252CTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384%252CTLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256%252CTLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256%2520%250A%2520%2520%2520%2520-%2520--tls-min-version%253DVersionTLS12%250A%2520%2520%2520%2520-%2520--upstream%253Dhttp%253A%252F%252F127.0.0.1%253A9537%250A%2520%2520%2520%2520-%2520--tls-cert-file%253D%252Fvar%252Flib%252Fkubelet%252Fpki%252Fkubelet-server-current.pem%250A%2520%2520%2520%2520-%2520--tls-private-key-file%253D%252Fvar%252Flib%252Fkubelet%252Fpki%252Fkubelet-server-current.pem%250A%2520%2520%2520%2520resources%253A%250A%2520%2520%2520%2520%2520%2520requests%253A%250A%2520%2520%2520%2520%2520%2520%2520%2520cpu%253A%252020m%250A%2520%2520%2520%2520%2520%2520%2520%2520memory%253A%252050Mi%250A%2520%2520%2520%2520terminationMessagePolicy%253A%2520FallbackToLogsOnError%250A%2520%2520%2520%2520volumeMounts%253A%250A%2520%2520%2520%2520-%2520name%253A%2520etc-kube%250A%2520%2520%2520%2520%2520%2520mountPath%253A%2520%2522%252Fetc%252Fkubernetes%2522%250A%2520%2520%2520%2520%2520%2520mountPropagation%253A%2520HostToContainer%250A%2520%2520%2520%2520%2520%2520readOnly%253A%2520true%250A%2520%2520%2520%2520-%2520name%253A%2520var-lib-kubelet%250A%2520%2520%2520%2520%2520%2520mountPath%253A%2520%2522%252Fvar%252Flib%252Fkubelet%2522%250A%2520%2520%2520%2520%2520%2520mountPropagation%253A%2520HostToContainer%250A%2520%2520%2520%2520%2520%2520readOnly%253A%2520true%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fmanifests%2Fcriometricsproxy.yaml%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3Atext%2Fplain%3Bcharset%3Dutf-8%3Bbase64%2CYXBpVmVyc2lvbjoga3ViZWxldC5jb25maWcuazhzLmlvL3YxYmV0YTEKYXV0aGVudGljYXRpb246CiAgYW5vbnltb3VzOgogICAgZW5hYmxlZDogZmFsc2UKICB3ZWJob29rOgogICAgY2FjaGVUVEw6IDBzCiAgeDUwOToKICAgIGNsaWVudENBRmlsZTogL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQtY2EuY3J0CmF1dGhvcml6YXRpb246CiAgd2ViaG9vazoKICAgIGNhY2hlQXV0aG9yaXplZFRUTDogMHMKICAgIGNhY2hlVW5hdXRob3JpemVkVFRMOiAwcwpjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKY2dyb3VwUm9vdDogLwpjbHVzdGVyRE5TOgotIDE3Mi4zMC4wLjEwCmNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKY29udGFpbmVyTG9nTWF4U2l6ZTogNTBNaQpjb250YWluZXJSdW50aW1lRW5kcG9pbnQ6ICIiCmNwdU1hbmFnZXJSZWNvbmNpbGVQZXJpb2Q6IDBzCmNyYXNoTG9vcEJhY2tPZmY6IHt9CmVuYWJsZVN5c3RlbUxvZ1F1ZXJ5OiB0cnVlCmV2aWN0aW9uUHJlc3N1cmVUcmFuc2l0aW9uUGVyaW9kOiAwcwpmYWlsU3dhcE9uOiB0cnVlCmZlYXR1cmVHYXRlczoKICBBV1NDbHVzdGVySG9zdGVkRE5TOiBmYWxzZQogIEFXU0NsdXN0ZXJIb3N0ZWRETlNJbnN0YWxsOiBmYWxzZQogIEFXU0RlZGljYXRlZEhvc3RzOiBmYWxzZQogIEFXU0R1YWxTdGFja0luc3RhbGw6IGZhbHNlCiAgQVdTU2VydmljZUxCTmV0d29ya1NlY3VyaXR5R3JvdXA6IGZhbHNlCiAgQWRkaXRpb25hbFJvdXRpbmdDYXBhYmlsaXRpZXM6IHRydWUKICBBZG1pbk5ldHdvcmtQb2xpY3k6IHRydWUKICBBbGliYWJhUGxhdGZvcm06IHRydWUKICBBdXRvbWF0ZWRFdGNkQmFja3VwOiBmYWxzZQogIEF6dXJlQ2x1c3Rlckhvc3RlZEROU0luc3RhbGw6IGZhbHNlCiAgQXp1cmVEZWRpY2F0ZWRIb3N0czogZmFsc2UKICBBenVyZUR1YWxTdGFja0luc3RhbGw6IGZhbHNlCiAgQXp1cmVNdWx0aURpc2s6IGZhbHNlCiAgQXp1cmVXb3JrbG9hZElkZW50aXR5OiB0cnVlCiAgQm9vdEltYWdlU2tld0VuZm9yY2VtZW50OiBmYWxzZQogIEJvb3RjTm9kZU1hbmFnZW1lbnQ6IGZhbHNlCiAgQnVpbGRDU0lWb2x1bWVzOiB0cnVlCiAgQ0JPUlNlcnZpbmdBbmRTdG9yYWdlOiBmYWxzZQogIENQTVNNYWNoaW5lTmFtZVByZWZpeDogdHJ1ZQogIENSRENvbXBhdGliaWxpdHlSZXF1aXJlbWVudE9wZXJhdG9yOiBmYWxzZQogIENsaWVudHNBbGxvd0NCT1I6IGZhbHNlCiAgQ2xpZW50c1ByZWZlckNCT1I6IGZhbHNlCiAgQ2x1c3RlckFQSUluc3RhbGw6IGZhbHNlCiAgQ2x1c3RlckFQSUluc3RhbGxJQk1DbG91ZDogZmFsc2UKICBDbHVzdGVyQVBJTWFjaGluZU1hbmFnZW1lbnQ6IGZhbHNlCiAgQ2x1c3RlckFQSU1hY2hpbmVNYW5hZ2VtZW50VlNwaGVyZTogZmFsc2UKICBDbHVzdGVyTW9uaXRvcmluZ0NvbmZpZzogZmFsc2UKICBDbHVzdGVyVmVyc2lvbk9wZXJhdG9yQ29uZmlndXJhdGlvbjogZmFsc2UKICBDb25zb2xlUGx1Z2luQ29udGVudFNlY3VyaXR5UG9saWN5OiB0cnVlCiAgRE5TTmFtZVJlc29sdmVyOiBmYWxzZQogIER1YWxSZXBsaWNhOiBmYWxzZQogIER5YW5taWNTZXJ2aWNlRW5kcG9pbnRJQk1DbG91ZDogZmFsc2UKICBFdGNkQmFja2VuZFF1b3RhOiBmYWxzZQogIEV2ZW50VFRMOiBmYWxzZQogIEV2ZW50ZWRQTEVHOiBmYWxzZQogIEV4YW1wbGU6IGZhbHNlCiAgRXhhbXBsZTI6IGZhbHNlCiAgRXh0ZXJuYWxPSURDOiB0cnVlCiAgRXh0ZXJuYWxPSURDV2l0aFVJREFuZEV4dHJhQ2xhaW1NYXBwaW5nczogdHJ1ZQogIEV4dGVybmFsU25hcHNob3RNZXRhZGF0YTogZmFsc2UKICBHQ1BDbHVzdGVySG9zdGVkRE5TOiBmYWxzZQogIEdDUENsdXN0ZXJIb3N0ZWRETlNJbnN0YWxsOiB0cnVlCiAgR0NQQ3VzdG9tQVBJRW5kcG9pbnRzOiBmYWxzZQogIEdDUEN1c3RvbUFQSUVuZHBvaW50c0luc3RhbGw6IGZhbHNlCiAgR0NQRHVhbFN0YWNrSW5zdGFsbDogZmFsc2UKICBHYXRld2F5QVBJOiB0cnVlCiAgR2F0ZXdheUFQSUNvbnRyb2xsZXI6IHRydWUKICBIaWdobHlBdmFpbGFibGVBcmJpdGVyOiB0cnVlCiAgSHlwZXJTaGlmdE9ubHlEeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uOiBmYWxzZQogIEltYWdlTW9kZVN0YXR1c1JlcG9ydGluZzogZmFsc2UKICBJbWFnZVN0cmVhbUltcG9ydE1vZGU6IHRydWUKICBJbWFnZVZvbHVtZTogdHJ1ZQogIEluZ3Jlc3NDb250cm9sbGVyRHluYW1pY0NvbmZpZ3VyYXRpb25NYW5hZ2VyOiBmYWxzZQogIEluc2lnaHRzQ29uZmlnOiBmYWxzZQogIEluc2lnaHRzT25EZW1hbmREYXRhR2F0aGVyOiBmYWxzZQogIElycmVjb25jaWxhYmxlTWFjaGluZUNvbmZpZzogZmFsc2UKICBLTVNFbmNyeXB0aW9uUHJvdmlkZXI6IGZhbHNlCiAgS01TdjE6IHRydWUKICBNYWNoaW5lQVBJTWlncmF0aW9uOiBmYWxzZQogIE1hY2hpbmVBUElPcGVyYXRvckRpc2FibGVNYWNoaW5lSGVhbHRoQ2hlY2tDb250cm9sbGVyOiBmYWxzZQogIE1hY2hpbmVDb25maWdOb2RlczogdHJ1ZQogIE1hbmFnZWRCb290SW1hZ2VzOiB0cnVlCiAgTWFuYWdlZEJvb3RJbWFnZXNBV1M6IHRydWUKICBNYW5hZ2VkQm9vdEltYWdlc0F6dXJlOiB0cnVlCiAgTWFuYWdlZEJvb3RJbWFnZXNDUE1TOiBmYWxzZQogIE1hbmFnZWRCb290SW1hZ2VzdlNwaGVyZTogdHJ1ZQogIE1heFVuYXZhaWxhYmxlU3RhdGVmdWxTZXQ6IGZhbHNlCiAgTWV0cmljc0NvbGxlY3Rpb25Qcm9maWxlczogdHJ1ZQogIE1pbmltdW1LdWJlbGV0VmVyc2lvbjogZmFsc2UKICBNaXhlZENQVXNBbGxvY2F0aW9uOiBmYWxzZQogIE11bHRpQXJjaEluc3RhbGxBenVyZTogZmFsc2UKICBNdWx0aURpc2tTZXR1cDogZmFsc2UKICBNdXRhYmxlQ1NJTm9kZUFsbG9jYXRhYmxlQ291bnQ6IGZhbHNlCiAgTXV0YXRpbmdBZG1pc3Npb25Qb2xpY3k6IGZhbHNlCiAgTmV0d29ya0RpYWdub3N0aWNzQ29uZmlnOiB0cnVlCiAgTmV0d29ya0xpdmVNaWdyYXRpb246IHRydWUKICBOZXR3b3JrU2VnbWVudGF0aW9uOiB0cnVlCiAgTmV3T0xNOiB0cnVlCiAgTmV3T0xNQm94Q3V0dGVyUnVudGltZTogZmFsc2UKICBOZXdPTE1DYXRhbG9nZEFQSVYxTWV0YXM6IGZhbHNlCiAgTmV3T0xNT3duU2luZ2xlTmFtZXNwYWNlOiBmYWxzZQogIE5ld09MTVByZWZsaWdodFBlcm1pc3Npb25DaGVja3M6IGZhbHNlCiAgTmV3T0xNV2ViaG9va1Byb3ZpZGVyT3BlbnNoaWZ0U2VydmljZUNBOiB0cnVlCiAgTm9SZWdpc3RyeUNsdXN0ZXJJbnN0YWxsOiBmYWxzZQogIE51dGFuaXhNdWx0aVN1Ym5ldHM6IGZhbHNlCiAgT1NTdHJlYW1zOiBmYWxzZQogIE9WTk9ic2VydmFiaWxpdHk6IGZhbHNlCiAgT25QcmVtRE5TUmVjb3JkczogZmFsc2UKICBPcGVuU2hpZnRQb2RTZWN1cml0eUFkbWlzc2lvbjogZmFsc2UKICBQaW5uZWRJbWFnZXM6IHRydWUKICBQcmVjb25maWd1cmVkVUROQWRkcmVzc2VzOiB0cnVlCiAgUHJvY01vdW50VHlwZTogdHJ1ZQogIFByb3Zpc2lvbmluZ1JlcXVlc3RBdmFpbGFibGU6IGZhbHNlCiAgUm91dGVBZHZlcnRpc2VtZW50czogdHJ1ZQogIFJvdXRlRXh0ZXJuYWxDZXJ0aWZpY2F0ZTogdHJ1ZQogIFNFTGludXhNb3VudDogZmFsc2UKICBTZXJ2aWNlQWNjb3VudFRva2VuTm9kZUJpbmRpbmc6IHRydWUKICBTaG9ydENlcnRSb3RhdGlvbjogZmFsc2UKICBTaWduYXR1cmVTdG9yZXM6IGZhbHNlCiAgU2lnc3RvcmVJbWFnZVZlcmlmaWNhdGlvbjogdHJ1ZQogIFNpZ3N0b3JlSW1hZ2VWZXJpZmljYXRpb25QS0k6IHRydWUKICBTdG9yYWdlUGVyZm9ybWFudFNlY3VyaXR5UG9saWN5OiB0cnVlCiAgVHJhbnNsYXRlU3RyZWFtQ2xvc2VXZWJzb2NrZXRSZXF1ZXN0czogZmFsc2UKICBVcGdyYWRlU3RhdHVzOiB0cnVlCiAgVXNlck5hbWVzcGFjZXNQb2RTZWN1cml0eVN0YW5kYXJkczogdHJ1ZQogIFVzZXJOYW1lc3BhY2VzU3VwcG9ydDogdHJ1ZQogIFZTcGhlcmVDb25maWd1cmFibGVNYXhBbGxvd2VkQmxvY2tWb2x1bWVzUGVyTm9kZTogZmFsc2UKICBWU3BoZXJlSG9zdFZNR3JvdXBab25hbDogZmFsc2UKICBWU3BoZXJlTWl4ZWROb2RlRW52OiBmYWxzZQogIFZTcGhlcmVNdWx0aURpc2s6IHRydWUKICBWU3BoZXJlTXVsdGlOZXR3b3JrczogdHJ1ZQogIFZvbHVtZUF0dHJpYnV0ZXNDbGFzczogdHJ1ZQogIFZvbHVtZUdyb3VwU25hcHNob3Q6IGZhbHNlCmZpbGVDaGVja0ZyZXF1ZW5jeTogMHMKaHR0cENoZWNrRnJlcXVlbmN5OiAwcwppbWFnZU1heGltdW1HQ0FnZTogMHMKaW1hZ2VNaW5pbXVtR0NBZ2U6IDBzCmtpbmQ6IEt1YmVsZXRDb25maWd1cmF0aW9uCmt1YmVBUElCdXJzdDogMTAwCmt1YmVBUElRUFM6IDUwCmxvZ2dpbmc6CiAgZmx1c2hGcmVxdWVuY3k6IDAKICBvcHRpb25zOgogICAganNvbjoKICAgICAgaW5mb0J1ZmZlclNpemU6ICIwIgogICAgdGV4dDoKICAgICAgaW5mb0J1ZmZlclNpemU6ICIwIgogIHZlcmJvc2l0eTogMAptYXhQb2RzOiAyNTAKbWVtb3J5U3dhcDoKICBzd2FwQmVoYXZpb3I6IE5vU3dhcApub2RlU3RhdHVzUmVwb3J0RnJlcXVlbmN5OiA1bTBzCm5vZGVTdGF0dXNVcGRhdGVGcmVxdWVuY3k6IDEwcwpwb2RQaWRzTGltaXQ6IDQwOTYKcHJvdGVjdEtlcm5lbERlZmF1bHRzOiB0cnVlCnJvdGF0ZUNlcnRpZmljYXRlczogdHJ1ZQpydW50aW1lUmVxdWVzdFRpbWVvdXQ6IDBzCnNlcmlhbGl6ZUltYWdlUHVsbHM6IGZhbHNlCnNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQpzaHV0ZG93bkdyYWNlUGVyaW9kOiAwcwpzaHV0ZG93bkdyYWNlUGVyaW9kQ3JpdGljYWxQb2RzOiAwcwpzdGF0aWNQb2RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCnN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dDogMHMKc3luY0ZyZXF1ZW5jeTogMHMKc3lzdGVtQ2dyb3VwczogL3N5c3RlbS5zbGljZQp0bHNDaXBoZXJTdWl0ZXM6Ci0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgotIFRMU19BRVNfMjU2X0dDTV9TSEEzODQKLSBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2Ci0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2Ci0gVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgotIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAotIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKLSBUTFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2CnRsc01pblZlcnNpb246IFZlcnNpb25UTFMxMgp2b2x1bWVTdGF0c0FnZ1BlcmlvZDogMHMK%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20420%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fetc%2Fkubernetes%2Fkubelet.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source%22%3A%20%22data%3A%2C%2523!%252Fbin%252Fsh%250Aif%2520%255B%2520-x%2520%252Fusr%252Fbin%252Fkubensenter%2520%255D%253B%2520then%250A%2520%2520exec%2520%252Fusr%252Fbin%252Fkubensenter%2520%2522%2524%2540%2522%250Aelse%250A%2520%2520exec%2520%2522%2524%2540%2522%250Afi%250A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20493%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22overwrite%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22path%22%3A%20%22%2Fusr%2Flocal%2Fbin%2Fkubenswrapper%22%0A%20%20%20%20%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%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22systemd%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22units%22%3A%20%5B%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DCleans%20NetworkManager%20state%20generated%20by%20dracut%5Cn%23%20Removal%20of%20this%20file%20signals%20firstboot%20completion%5CnConditionPathExists%3D!%2Fetc%2Fignition-machine-config-encapsulated.json%5Cn%23%20This%20is%20opt-in%20for%20some%20deployment%20types%2C%20and%20opt-out%20for%20others.%5CnConditionPathExists%3D%2Fvar%2Flib%2Fmco%2Fnm-clean-initrd-state%5CnWants%3Dnetwork-pre.target%5CnBefore%3Dnetwork-pre.target%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5Cn%23%20Remove%20any%20existing%20state%20possibly%20generated%20NM%20run%20by%20dracut.%20We%20want%20NM%20to%5Cn%23%20consider%20all%20profiles%20autoconnect%20priority%20when%20it%20starts%20instead%20of%5Cn%23%20remembering%20which%20profile%20was%20a%20device%20activated%20with%20when%20NM%20is%20run%20by%5Cn%23%20dracut.%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fnm-clean-initrd-state.sh%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dnetwork-online.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22NetworkManager-clean-initrd-state.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%23%20vim%3Aset%20ft%3Dsystemd%20%3A%5Cn%23%5Cn%23%20This%20drop-in%20will%20enable%20any%20service%20built%20with%20this%5Cn%23%20github.com%2Fcontainers%2Fkubemntns%20library%20to%20properly%20join%20the%20mount%20namespace%5Cn%23%20managed%20by%20kubens.service%5Cn%23%5Cn%5Cn%5BUnit%5D%5CnAfter%3Dkubens.service%5Cn%5Cn%5BService%5D%5CnEnvironmentFile%3D-%2Frun%2Fkubens%2Fenv%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2201-kubens.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-default-env.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BService%5D%5CnEnvironment%3D%5C%22ENABLE_PROFILE_UNIX_SOCKET%3Dtrue%5C%22%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-profile-unix-socket.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnAfter%3Dkubelet-dependencies.target%5CnRequires%3Dkubelet-dependencies.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2205-mco-ordering.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BService%5D%5CnEnvironment%3D%5C%22GODEBUG%3Dx509ignoreCN%3D0%2Cmadvdontneed%3D1%5C%22%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-default-madv.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22crio.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnConditionPathExists%3D%2Fenoent%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22mco-disabled.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22docker.socket%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DThe%20firstboot%20OS%20update%20has%20completed%5CnDocumentation%3Dhttps%3A%2F%2Fgithub.com%2Fopenshift%2Fmachine-config-operator%2F%5CnRequires%3Dbasic.target%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Ddefault.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22firstboot-osupdate.target%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnAfter%3Dovs-configuration.service%5CnBefore%3Dcrio.service%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2201-after-configure-ovs.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22ipsec.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DDynamically%20sets%20the%20system%20reserved%20for%20the%20kubelet%5CnWants%3Dnetwork-online.target%5CnAfter%3Dnetwork-online.target%20firstboot-osupdate.target%5CnBefore%3Dkubelet-dependencies.target%5Cn%5Cn%5BService%5D%5Cn%23%20Need%20oneshot%20to%20delay%20kubelet%5CnType%3Doneshot%5CnRemainAfterExit%3Dyes%5CnEnvironmentFile%3D%2Fetc%2Fnode-sizing-enabled.env%5CnExecStart%3D%2Fbin%2Fbash%20%2Fusr%2Flocal%2Fsbin%2Fdynamic-system-reserved-calc.sh%20%24%7BNODE_SIZING_ENABLED%7D%20%24%7BSYSTEM_RESERVED_MEMORY%7D%20%24%7BSYSTEM_RESERVED_CPU%7D%20%24%7BSYSTEM_RESERVED_ES%7D%5Cn%5BInstall%5D%5CnRequiredBy%3Dkubelet-dependencies.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22kubelet-auto-node-size.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DDependencies%20necessary%20to%20run%20kubelet%5CnDocumentation%3Dhttps%3A%2F%2Fgithub.com%2Fopenshift%2Fmachine-config-operator%2F%5CnRequires%3Dbasic.target%20network-online.target%5CnWants%3DNetworkManager-wait-online.service%20crio-wipe.service%5CnWants%3Drpc-statd.service%20chrony-wait.service%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22kubelet-dependencies.target%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DKubernetes%20Kubelet%5CnRequires%3Dcrio.service%20kubelet-dependencies.target%5CnAfter%3Dkubelet-dependencies.target%5CnAfter%3Dostree-finalize-staged.service%5Cn%5Cn%5BService%5D%5CnType%3Dnotify%5CnExecStartPre%3D%2Fbin%2Fmkdir%20--parents%20%2Fetc%2Fkubernetes%2Fmanifests%5CnExecStartPre%3D-%2Fusr%2Fsbin%2Frestorecon%20-ri%20%2Fvar%2Flib%2Fkubelet%2Fpod-resources%20%2Fusr%2Flocal%2Fbin%2Fkubenswrapper%20%2Fusr%2Fbin%2Fkubensenter%5CnEnvironment%3D%5C%22KUBELET_NODE_IP%3D0.0.0.0%5C%22%5CnEnvironmentFile%3D%2Fetc%2Fos-release%5CnEnvironmentFile%3D-%2Fetc%2Fkubernetes%2Fkubelet-workaround%5CnEnvironmentFile%3D-%2Fetc%2Fkubernetes%2Fkubelet-env%5CnEnvironmentFile%3D%2Fetc%2Fnode-sizing.env%5Cn%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fkubenswrapper%20%5C%5C%5Cn%20%20%20%20%2Fusr%2Fbin%2Fkubelet%20%5C%5C%5Cn%20%20%20%20%20%20--config%3D%2Fetc%2Fkubernetes%2Fkubelet.conf%20%5C%5C%5Cn%20%20%20%20%20%20--bootstrap-kubeconfig%3D%2Fetc%2Fkubernetes%2Fkubeconfig%20%5C%5C%5Cn%20%20%20%20%20%20--kubeconfig%3D%2Fvar%2Flib%2Fkubelet%2Fkubeconfig%20%5C%5C%5Cn%20%20%20%20%20%20--container-runtime-endpoint%3D%2Fvar%2Frun%2Fcrio%2Fcrio.sock%20%5C%5C%5Cn%20%20%20%20%20%20--runtime-cgroups%3D%2Fsystem.slice%2Fcrio.service%20%5C%5C%5Cn%20%20%20%20%20%20--node-labels%3Dnode-role.kubernetes.io%2Fcontrol-plane%2Cnode-role.kubernetes.io%2Fmaster%2Cnode.openshift.io%2Fos_id%3D%24%7BID%7D%2C%24%7BCUSTOM_KUBELET_LABELS%7D%20%5C%5C%5Cn%20%20%20%20%20%20--node-ip%3D%24%7BKUBELET_NODE_IP%7D%20%5C%5C%5Cn%20%20%20%20%20%20--minimum-container-ttl-duration%3D6m0s%20%5C%5C%5Cn%20%20%20%20%20%20--cloud-provider%3D%20%5C%5C%5Cn%20%20%20%20%20%20--volume-plugin-dir%3D%2Fetc%2Fkubernetes%2Fkubelet-plugins%2Fvolume%2Fexec%20%5C%5C%5Cn%20%20%20%20%20%20%20%5C%5C%5Cn%20%20%20%20%20%20--hostname-override%3D%24%7BKUBELET_NODE_NAME%7D%20%5C%5C%5Cn%20%20%20%20%20%20--provider-id%3D%24%7BKUBELET_PROVIDERID%7D%20%5C%5C%5Cn%20%20%20%20%20%20--register-with-taints%3Dnode-role.kubernetes.io%2Fmaster%3D%3ANoSchedule%20%5C%5C%5Cn%20%20%20%20%20%20--pod-infra-container-image%3Dquay.io%2Fokd%2Fscos-content%40sha256%3A058d0e796625c199c05985db1f376ddec0314db80902e0d6af5a1a9700986602%20%5C%5C%5Cn%20%20%20%20%20%20--system-reserved%3Dcpu%3D%24%7BSYSTEM_RESERVED_CPU%7D%2Cmemory%3D%24%7BSYSTEM_RESERVED_MEMORY%7D%2Cephemeral-storage%3D%24%7BSYSTEM_RESERVED_ES%7D%20%5C%5C%5Cn%20%20%20%20%20%20--v%3D%24%7BKUBELET_LOG_LEVEL%7D%5Cn%5CnRestart%3Dalways%5CnRestartSec%3D10%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dmulti-user.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%23%20vim%3Aset%20ft%3Dsystemd%20%3A%5Cn%23%5Cn%23%20This%20drop-in%20will%20enable%20any%20service%20built%20with%20this%5Cn%23%20github.com%2Fcontainers%2Fkubemntns%20library%20to%20properly%20join%20the%20mount%20namespace%5Cn%23%20managed%20by%20kubens.service%5Cn%23%5Cn%5Cn%5BUnit%5D%5CnAfter%3Dkubens.service%5Cn%5Cn%5BService%5D%5CnEnvironmentFile%3D-%2Frun%2Fkubens%2Fenv%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2201-kubens.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-default-env.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BService%5D%5CnEnvironment%3D%5C%22GODEBUG%3Dx509ignoreCN%3D0%2Cmadvdontneed%3D1%5C%22%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-default-madv.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22kubelet.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DManages%20a%20mount%20namespace%20for%20kubernetes-specific%20mounts%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnRemainAfterExit%3Dyes%5CnRuntimeDirectory%3Dkubens%5CnEnvironment%3DRUNTIME_DIRECTORY%3D%25t%2Fkubens%5CnEnvironment%3DBIND_POINT%3D%25t%2Fkubens%2Fmnt%5CnEnvironment%3DENVFILE%3D%25t%2Fkubens%2Fenv%5Cn%5Cn%23%20Set%20up%20the%20runtime%20directory%20as%20an%20unbindable%20mountpoint%5CnExecStartPre%3Dbash%20-c%20%5C%22findmnt%20%24%7BRUNTIME_DIRECTORY%7D%20%7C%7C%20mount%20--make-unbindable%20--bind%20%24%7BRUNTIME_DIRECTORY%7D%20%24%7BRUNTIME_DIRECTORY%7D%5C%22%5Cn%23%20Ensure%20the%20bind%20point%20exists%5CnExecStartPre%3Dtouch%20%24%7BBIND_POINT%7D%5Cn%23%20Use%20'unshare'%20to%20create%20the%20new%20mountpoint%2C%20then%20'mount%20--make-rshared'%20so%20it%20cascades%20internally%5CnExecStart%3Dunshare%20--mount%3D%24%7BBIND_POINT%7D%20--propagation%20slave%20mount%20--make-rshared%20%2F%5Cn%23%20Finally%2C%20set%20an%20env%20pointer%20for%20ease-of-use%5CnExecStartPost%3Dbash%20-c%20'echo%20%5C%22KUBENSMNT%3D%24%7BBIND_POINT%7D%5C%22%20%5Cu003e%20%5C%22%24%7BENVFILE%7D%5C%22'%5Cn%5Cn%23%20On%20stop%2C%20a%20recursive%20unmount%20cleans%20up%20the%20namespace%20and%20bind-mounted%20unbindable%20parent%20directory%5CnExecStop%3Dumount%20-R%20%24%7BRUNTIME_DIRECTORY%7D%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dmulti-user.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22kubens.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DMachine%20Config%20Daemon%20Firstboot%5Cn%23%20Make%20sure%20it%20runs%20only%20on%20OSTree%20booted%20system%5CnConditionPathExists%3D%2Frun%2Fostree-booted%5Cn%23%20Removal%20of%20this%20file%20signals%20firstboot%20completion%5CnConditionPathExists%3D%2Fetc%2Fignition-machine-config-encapsulated.json%5CnAfter%3Dmachine-config-daemon-pull.service%5CnBefore%3Dkubelet-dependencies.target%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnRemainAfterExit%3Dyes%5Cn%23%20Disable%20existing%20repos%20(if%20any)%20so%20that%20OS%20extensions%20would%20use%20embedded%20RPMs%20only%5CnExecStartPre%3D-%2Fusr%2Fbin%2Fsh%20-c%20%5C%22sed%20-i%20's%2Fenabled%3D1%2Fenabled%3D0%2F'%20%2Fetc%2Fyum.repos.d%2F*.repo%5C%22%5Cn%23%20Run%20this%20via%20podman%20because%20we%20want%20to%20use%20the%20nmstatectl%20binary%20in%20our%20container%5CnExecStart%3D%2Fusr%2Fbin%2Fpodman%20run%20--rm%20--privileged%20--net%3Dhost%20-v%20%2F%3A%2Frootfs%20%20--entrypoint%20machine-config-daemon%20'quay.io%2Fokd%2Fscos-content%40sha256%3A5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038'%20firstboot-complete-machineconfig%20--persist-nics%5CnExecStart%3D%2Fusr%2Fbin%2Fpodman%20run%20--rm%20--privileged%20--pid%3Dhost%20--net%3Dhost%20-v%20%2F%3A%2Frootfs%20%20--entrypoint%20machine-config-daemon%20'quay.io%2Fokd%2Fscos-content%40sha256%3A5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038'%20firstboot-complete-machineconfig%5Cn%5BInstall%5D%5CnRequiredBy%3Dfirstboot-osupdate.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22machine-config-daemon-firstboot.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DMachine%20Config%20Daemon%20Pull%5Cn%23%20Make%20sure%20it%20runs%20only%20on%20OSTree%20booted%20system%5CnConditionPathExists%3D%2Frun%2Fostree-booted%5Cn%23%20This%20%5C%22stamp%20file%5C%22%20is%20unlinked%20when%20we%20complete%5Cn%23%20machine-config-daemon-firstboot.service%5CnConditionPathExists%3D%2Fetc%2Fignition-machine-config-encapsulated.json%5Cn%23%20Run%20after%20crio-wipe%20so%20the%20pulled%20MCD%20image%20is%20protected%20against%20a%20corrupted%20storage%20from%20a%20forced%20shutdown%5CnWants%3Dcrio-wipe.service%20NetworkManager-wait-online.service%5CnAfter%3Dcrio-wipe.service%20NetworkManager-wait-online.service%20network.service%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnRemainAfterExit%3Dyes%5CnExecStartPre%3D%2Fetc%2Fmachine-config-daemon%2Fgenerate_podman_policy_args.sh%5CnExecStart%3D%2Fbin%2Fsh%20-c%20%5C%22while%20!%20%2Fusr%2Fbin%2Fpodman%20pull%20%24(cat%20%2Ftmp%2Fpodman_policy_args)%20--authfile%3D%2Fvar%2Flib%2Fkubelet%2Fconfig.json%20'quay.io%2Fokd%2Fscos-content%40sha256%3A5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038'%3B%20do%20sleep%201%3B%20done%5C%22%5Cn%5Cn%5BInstall%5D%5CnRequiredBy%3Dmachine-config-daemon-firstboot.service%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22machine-config-daemon-pull.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DApplies%20per-node%20NMState%20network%20configuration%5CnRequires%3Dopenvswitch.service%5CnWants%3DNetworkManager-wait-online.service%5CnAfter%3DNetworkManager-wait-online.service%20openvswitch.service%20network.service%20nodeip-configuration.service%5CnBefore%3Dnmstate.service%20kubelet-dependencies.target%20ovs-configuration.service%20node-valid-hostname.service%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5Cn%23%20Would%20prefer%20to%20do%20Restart%3Don-failure%20instead%20of%20this%20bash%20retry%20loop%2C%20but%5Cn%23%20the%20version%20of%20systemd%20we%20have%20right%20now%20doesn't%20support%20it.%20It%20should%20be%5Cn%23%20available%20in%20systemd%20v244%20and%20higher.%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fnmstate-configuration.sh%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dnetwork-online.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22nmstate-configuration.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DApply%20nmstate%20on-disk%20state%5CnDocumentation%3Dman%3Anmstate.service(8)%20https%3A%2F%2Fwww.nmstate.io%5CnAfter%3DNetworkManager-wait-online.service%5CnBefore%3Dnetwork-online.target%5CnWants%3DNetworkManager-wait-online.service%5CnRequires%3DNetworkManager.service%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnExecStart%3D%2Fusr%2Fbin%2Fnmstatectl%20service%5CnRemainAfterExit%3Dyes%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3DNetworkManager.service%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22nmstate.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DWait%20for%20a%20non-localhost%20hostname%5CnBefore%3Dkubelet-dependencies.target%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnRemainAfterExit%3Dyes%5CnUser%3Droot%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fmco-hostname%20--wait%5Cn%5Cn%23%20Wait%20up%20to%205min%20for%20the%20node%20to%20get%20a%20non-localhost%20name%5CnTimeoutSec%3D300%5Cn%5Cn%5BInstall%5D%5Cn%23%20TODO%3A%20Change%20this%20to%20RequiredBy%20after%20we%20fix%20https%3A%2F%2Fgithub.com%2Fopenshift%2Fmachine-config-operator%2Fpull%2F3865%23issuecomment-1746963115%5CnWantedBy%3Dkubelet-dependencies.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22node-valid-hostname.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DWrites%20IP%20address%20configuration%20so%20that%20kubelet%20and%20crio%20services%20select%20a%20valid%20node%20IP%5CnWants%3DNetworkManager-wait-online.service%5CnAfter%3DNetworkManager-wait-online.service%20firstboot-osupdate.target%5CnBefore%3Dkubelet-dependencies.target%20ovs-configuration.service%5Cn%5Cn%5BService%5D%5Cn%23%20Need%20oneshot%20to%20delay%20kubelet%5CnType%3Doneshot%5CnSyslogIdentifier%3Dnodeip-configuration%5Cn%23%20Would%20prefer%20to%20do%20Restart%3Don-failure%20instead%20of%20this%20bash%20retry%20loop%2C%20but%5Cn%23%20the%20version%20of%20systemd%20we%20have%20right%20now%20doesn't%20support%20it.%20It%20should%20be%5Cn%23%20available%20in%20systemd%20v244%20and%20higher.%5CnExecStart%3D%2Fbin%2Fbash%20-c%20%5C%22%20%5C%5C%5Cn%20%20until%20%5C%5C%5Cn%20%20%2Fusr%2Fbin%2Fpodman%20run%20--rm%20%5C%5C%5Cn%20%20--authfile%20%2Fvar%2Flib%2Fkubelet%2Fconfig.json%20%5C%5C%5Cn%20%20--env%20'ENABLE_NODEIP_DEBUG%3Dtrue'%20%5C%5C%5Cn%20%20--net%3Dhost%20%5C%5C%5Cn%20%20--security-opt%20label%3Ddisable%20%5C%5C%5Cn%20%20--volume%20%2Fetc%2Fsystemd%2Fsystem%3A%2Fetc%2Fsystemd%2Fsystem%20%5C%5C%5Cn%20%20--volume%20%2Frun%2Fnodeip-configuration%3A%2Frun%2Fnodeip-configuration%20%5C%5C%5Cn%20%20quay.io%2Fokd%2Fscos-content%40sha256%3A408f2dea5ba91ea0cd8c8d7d38854fd4eee47db15ac78725bdd26009c67b18da%20%5C%5C%5Cn%20%20node-ip%20%5C%5C%5Cn%20%20set%20%5C%5C%5Cn%20%20--retry-on-failure%20%5C%5C%5Cn%20%20--network-type%20OVNKubernetes%20%5C%5C%5Cn%20%20%24%7BNODEIP_HINT%3A-%24%7BKUBELET_NODEIP_HINT%3A-%7D%7D%3B%20%5C%5C%5Cn%20%20do%20%5C%5C%5Cn%20%20sleep%205%3B%20%5C%5C%5Cn%20%20done%5C%22%5CnExecStart%3D%2Fbin%2Fsystemctl%20daemon-reload%5CnExecStartPre%3D%2Fbin%2Fmkdir%20-p%20%2Frun%2Fnodeip-configuration%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5CnEnvironmentFile%3D-%2Fetc%2Fdefault%2Fnodeip-configuration%5Cn%5Cn%5BInstall%5D%5CnRequiredBy%3Dkubelet-dependencies.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22nodeip-configuration.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22openvswitch.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5Cn%23%20Kdump%20will%20generate%20it's%20initramfs%20based%20on%20the%20running%20state%20when%20kdump.service%20run%5Cn%23%20If%20OVS%20has%20already%20run%2C%20the%20kdump%20fails%20to%20gather%20a%20working%20network%20config%2C%5Cn%23%20which%20prevent%20network%20log%20exports%2C%20sush%20as%20SSH.%5Cn%23%20See%20https%3A%2F%2Fissues.redhat.com%2Fbrowse%2FOCPBUGS-28239%5CnAfter%3Dkdump.service%5CnDescription%3DConfigures%20OVS%20with%20proper%20host%20networking%20configuration%5Cn%23%20This%20service%20is%20used%20to%20move%20a%20physical%20NIC%20into%20OVS%20and%20reconfigure%20OVS%20to%20use%20the%20host%20IP%5CnRequires%3Dopenvswitch.service%5CnWants%3DNetworkManager-wait-online.service%5CnAfter%3Dfirstboot-osupdate.target%5CnAfter%3DNetworkManager-wait-online.service%20openvswitch.service%20network.service%20nodeip-configuration.service%20nmstate.service%5CnBefore%3Dkubelet-dependencies.target%20node-valid-hostname.service%5Cn%5Cn%5BService%5D%5Cn%23%20Need%20oneshot%20to%20delay%20kubelet%5CnType%3Doneshot%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fconfigure-ovs.sh%20OVNKubernetes%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5Cn%5BInstall%5D%5CnRequiredBy%3Dkubelet-dependencies.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22ovs-configuration.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BService%5D%5CnRestart%3Dalways%5CnExecStartPre%3D-%2Fbin%2Fsh%20-c%20'%2Fusr%2Fbin%2Fchown%20-R%20%3A%24%24%7BOVS_USER_ID%23%23*%3A%7D%20%2Fvar%2Flib%2Fopenvswitch'%5CnExecStartPre%3D-%2Fbin%2Fsh%20-c%20'%2Fusr%2Fbin%2Fchown%20-R%20%3A%24%24%7BOVS_USER_ID%23%23*%3A%7D%20%2Fetc%2Fopenvswitch'%5CnExecStartPre%3D-%2Fbin%2Fsh%20-c%20'%2Fusr%2Fbin%2Fchown%20-R%20%3A%24%24%7BOVS_USER_ID%23%23*%3A%7D%20%2Frun%2Fopenvswitch'%5CnExecStartPost%3D-%2Fusr%2Fbin%2Fovs-appctl%20vlog%2Fset%20syslog%3Ainfo%5CnExecReload%3D-%2Fusr%2Fbin%2Fovs-appctl%20vlog%2Fset%20syslog%3Ainfo%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-ovs-vswitchd-restart.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22ovs-vswitchd.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BService%5D%5CnRestart%3Dalways%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-ovsdb-restart.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22ovsdb-server.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%2210-mco-default-env.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%23%20See%20https%3A%2F%2Fgithub.com%2Fopenshift%2Fmachine-config-operator%2Fissues%2F1897%5Cn%5BService%5D%5CnNice%3D10%5CnIOSchedulingClass%3Dbest-effort%5CnIOSchedulingPriority%3D6%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22mco-controlplane-nice.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22rpm-ostreed.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DEnsure%20IKE%20SA%20established%20for%20existing%20IPsec%20connections.%5CnAfter%3Dipsec.service%5CnBefore%3Dkubelet-dependencies.target%20node-valid-hostname.service%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnExecStart%3D%2Fusr%2Flocal%2Fbin%2Fipsec-connect-wait.sh%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dipsec.service%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22wait-for-ipsec-connect.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DEnsure%20primary%20IP%20is%20assigned%20and%20usable%5CnRequires%3Dnmstate.service%5CnAfter%3Dnmstate.service%5CnBefore%3Dkubelet-dependencies.target%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5Cn%23%20Would%20prefer%20to%20do%20Restart%3Don-failure%20instead%20of%20this%20bash%20retry%20loop%2C%20but%5Cn%23%20the%20version%20of%20systemd%20we%20have%20right%20now%20doesn't%20support%20it.%20It%20should%20be%5Cn%23%20available%20in%20systemd%20v244%20and%20higher.%5CnExecStart%3D%2Fbin%2Fbash%20-c%20%5C%22%20%5C%5C%5Cn%20%20until%20%5C%5C%5Cn%20%20%2Fusr%2Flocal%2Fbin%2Fwait-for-primary-ip.sh%3B%20%5C%5C%5Cn%20%20do%20%5C%5C%5Cn%20%20sleep%2010%3B%20%5C%5C%5Cn%20%20done%5C%22%5CnStandardOutput%3Djournal%2Bconsole%5CnStandardError%3Djournal%2Bconsole%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dnetwork-online.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22wait-for-primary-ip.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22dropins%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnConditionPathExists%3D%2Fenoent%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22mco-disabled.conf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22zincati.service%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%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%20%20%20%20%22contents%22%3A%20%22%5BUnit%5D%5CnDescription%3DKubernetes%20Kubelet%20After%20Reboot%20Cleanup%5CnBefore%3Dkubelet.service%5Cn%5Cn%5BService%5D%5CnType%3Doneshot%5CnExecStart%3D%2Fbin%2Frm%20-f%20%2Fvar%2Flib%2Fkubelet%2Fcpu_manager_state%5CnExecStart%3D%2Fbin%2Frm%20-f%20%2Fvar%2Flib%2Fkubelet%2Fmemory_manager_state%5CnExecStart%3D-%2Fbin%2Frm%20-f%20%2Fvar%2Flib%2Fkubelet%2Fdra_manager_state%5Cn%5Cn%5BInstall%5D%5CnWantedBy%3Dmulti-user.target%5Cn%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22enabled%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22kubelet-cleanup.service%22%0A%20%20%20%20%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%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22kernelArguments%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22systemd.unified_cgroup_hierarchy%3D1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22cgroup_no_v1%3D%5C%22all%5C%22%22%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22extensions%22%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%22fips%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%22kernelType%22%3A%20%22default%22%0A%20%20%20%20%7D%0A%7D"
        },
        "mode": 420
      },
      {
        "overwrite": true,
        "path": "/etc/ignition-machine-config-encapsulated.json",
        "contents": {
          "source": "data:,%7B%22kind%22%3A%22MachineConfig%22%2C%22apiVersion%22%3A%22machineconfiguration.openshift.io%2Fv1%22%2C%22metadata%22%3A%7B%22name%22%3A%22rendered-master-4c3e25bed87fd10dc43ca0407f833c85%22%2C%22annotations%22%3A%7B%22machineconfiguration.openshift.io%2Fgenerated-by-controller-version%22%3A%22f20ca236ffead6b7603c4f42a35c49fbed328bc3%22%2C%22machineconfiguration.openshift.io%2Frelease-image-version%22%3A%22%22%7D%2C%22ownerReferences%22%3A%5B%7B%22apiVersion%22%3A%22machineconfiguration.openshift.io%2Fv1%22%2C%22kind%22%3A%22MachineConfigPool%22%2C%22name%22%3A%22master%22%2C%22uid%22%3A%22%22%2C%22controller%22%3Atrue%2C%22blockOwnerDeletion%22%3Atrue%7D%5D%7D%2C%22spec%22%3A%7B%22osImageURL%22%3A%22quay.io%2Fokd%2Fscos-content%40sha256%3Af76b028281a1e5dbd9b985a37685dbda610c8c7fee4ebcd24f74d89aba4b482f%22%2C%22baseOSExtensionsContainerImage%22%3A%22quay.io%2Fokd%2Fscos-content%40sha256%3Aa9928f8fafa2ed2e17ae9bbc051bfbff2a9afe0bd1067d728b98966db12f7e26%22%2C%22config%22%3A%7B%22ignition%22%3A%7B%22version%22%3A%223.5.0%22%7D%7D%2C%22kernelArguments%22%3A%5B%22systemd.unified_cgroup_hierarchy%3D1%22%2C%22cgroup_no_v1%3D%5C%22all%5C%22%22%5D%2C%22extensions%22%3A%5B%5D%2C%22fips%22%3Afalse%2C%22kernelType%22%3A%22default%22%7D%7D"
        },
        "mode": 420
      },
      {
        "path": "/etc/hosts",
        "mode": 420,
        "overwrite": true,
        "contents": {
          "source": "data:text/plain;base64,MTI3LjAuMC4xICAgbG9jYWxob3N0IGxvY2FsaG9zdC5sb2NhbGRvbWFpbgo6OjEgICAgICAgICBsb2NhbGhvc3QgbG9jYWxob3N0LmxvY2FsZG9tYWluCjE3Mi4yNC4xLjYgIGFwaS5va2QubG9jYWwgYXBpLWludC5va2QubG9jYWwKMTcyLjI0LjEuNSAgYm9vdHN0cmFwLm9rZC5sb2NhbAoxNzIuMjQuMS43ICBtYXN0ZXItMC5va2QubG9jYWwgZXRjZC0wLm9rZC5sb2NhbAoxNzIuMjQuMS44ICBtYXN0ZXItMS5va2QubG9jYWwgZXRjZC0xLm9rZC5sb2NhbAoxNzIuMjQuMS45ICBtYXN0ZXItMi5va2QubG9jYWwgZXRjZC0yLm9rZC5sb2NhbAoxNzIuMjQuMS4xMCB3b3JrZXItMC5va2QubG9jYWwKMTcyLjI0LjEuMTEgd29ya2VyLTEub2tkLmxvY2FsCg=="
        }
      }
    ]
  },
  "systemd": {
    "units": [
      {
        "contents": "[Unit]\nDescription=Cleans NetworkManager state generated by dracut\n# Removal of this file signals firstboot completion\nConditionPathExists=!/etc/ignition-machine-config-encapsulated.json\n# This is opt-in for some deployment types, and opt-out for others.\nConditionPathExists=/var/lib/mco/nm-clean-initrd-state\nWants=network-pre.target\nBefore=network-pre.target\n\n[Service]\nType=oneshot\n# Remove any existing state possibly generated NM run by dracut. We want NM to\n# consider all profiles autoconnect priority when it starts instead of\n# remembering which profile was a device activated with when NM is run by\n# dracut.\nExecStart=/usr/local/bin/nm-clean-initrd-state.sh\nStandardOutput=journal+console\nStandardError=journal+console\n\n[Install]\nWantedBy=network-online.target\n",
        "enabled": true,
        "name": "NetworkManager-clean-initrd-state.service"
      },
      {
        "dropins": [
          {
            "contents": "# vim:set ft=systemd :\n#\n# This drop-in will enable any service built with this\n# github.com/containers/kubemntns library to properly join the mount namespace\n# managed by kubens.service\n#\n\n[Unit]\nAfter=kubens.service\n\n[Service]\nEnvironmentFile=-/run/kubens/env\n",
            "name": "01-kubens.conf"
          },
          {
            "name": "10-mco-default-env.conf"
          },
          {
            "contents": "[Service]\nEnvironment=\"ENABLE_PROFILE_UNIX_SOCKET=true\"\n",
            "name": "10-mco-profile-unix-socket.conf"
          },
          {
            "contents": "[Unit]\nAfter=kubelet-dependencies.target\nRequires=kubelet-dependencies.target\n",
            "name": "05-mco-ordering.conf"
          },
          {
            "contents": "[Service]\nEnvironment=\"GODEBUG=x509ignoreCN=0,madvdontneed=1\"\n",
            "name": "10-mco-default-madv.conf"
          }
        ],
        "name": "crio.service"
      },
      {
        "dropins": [
          {
            "contents": "[Unit]\nConditionPathExists=/enoent\n",
            "name": "mco-disabled.conf"
          }
        ],
        "name": "docker.socket"
      },
      {
        "contents": "[Unit]\nDescription=The firstboot OS update has completed\nDocumentation=https://github.com/openshift/machine-config-operator/\nRequires=basic.target\n\n[Install]\nWantedBy=default.target\n",
        "enabled": true,
        "name": "firstboot-osupdate.target"
      },
      {
        "dropins": [
          {
            "contents": "[Unit]\nAfter=ovs-configuration.service\nBefore=crio.service\n",
            "name": "01-after-configure-ovs.conf"
          }
        ],
        "name": "ipsec.service"
      },
      {
        "contents": "[Unit]\nDescription=Dynamically sets the system reserved for the kubelet\nWants=network-online.target\nAfter=network-online.target firstboot-osupdate.target\nBefore=kubelet-dependencies.target\n\n[Service]\n# Need oneshot to delay kubelet\nType=oneshot\nRemainAfterExit=yes\nEnvironmentFile=/etc/node-sizing-enabled.env\nExecStart=/bin/bash /usr/local/sbin/dynamic-system-reserved-calc.sh ${NODE_SIZING_ENABLED} ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES}\n[Install]\nRequiredBy=kubelet-dependencies.target\n",
        "enabled": true,
        "name": "kubelet-auto-node-size.service"
      },
      {
        "contents": "[Unit]\nDescription=Dependencies necessary to run kubelet\nDocumentation=https://github.com/openshift/machine-config-operator/\nRequires=basic.target network-online.target\nWants=NetworkManager-wait-online.service crio-wipe.service\nWants=rpc-statd.service chrony-wait.service\n",
        "name": "kubelet-dependencies.target"
      },
      {
        "contents": "[Unit]\nDescription=Kubernetes Kubelet\nRequires=crio.service kubelet-dependencies.target\nAfter=kubelet-dependencies.target\nAfter=ostree-finalize-staged.service\n\n[Service]\nType=notify\nExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests\nExecStartPre=-/usr/sbin/restorecon -ri /var/lib/kubelet/pod-resources /usr/local/bin/kubenswrapper /usr/bin/kubensenter\nEnvironment=\"KUBELET_NODE_IP=0.0.0.0\"\nEnvironmentFile=/etc/os-release\nEnvironmentFile=-/etc/kubernetes/kubelet-workaround\nEnvironmentFile=-/etc/kubernetes/kubelet-env\nEnvironmentFile=/etc/node-sizing.env\n\nExecStart=/usr/local/bin/kubenswrapper \\\n    /usr/bin/kubelet \\\n      --config=/etc/kubernetes/kubelet.conf \\\n      --bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \\\n      --kubeconfig=/var/lib/kubelet/kubeconfig \\\n      --container-runtime-endpoint=/var/run/crio/crio.sock \\\n      --runtime-cgroups=/system.slice/crio.service \\\n      --node-labels=node-role.kubernetes.io/control-plane,node-role.kubernetes.io/master,node.openshift.io/os_id=${ID},${CUSTOM_KUBELET_LABELS} \\\n      --node-ip=${KUBELET_NODE_IP} \\\n      --minimum-container-ttl-duration=6m0s \\\n      --cloud-provider= \\\n      --volume-plugin-dir=/etc/kubernetes/kubelet-plugins/volume/exec \\\n       \\\n      --hostname-override=${KUBELET_NODE_NAME} \\\n      --provider-id=${KUBELET_PROVIDERID} \\\n      --register-with-taints=node-role.kubernetes.io/master=:NoSchedule \\\n      --pod-infra-container-image=quay.io/okd/scos-content@sha256:058d0e796625c199c05985db1f376ddec0314db80902e0d6af5a1a9700986602 \\\n      --system-reserved=cpu=${SYSTEM_RESERVED_CPU},memory=${SYSTEM_RESERVED_MEMORY},ephemeral-storage=${SYSTEM_RESERVED_ES} \\\n      --v=${KUBELET_LOG_LEVEL}\n\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n",
        "dropins": [
          {
            "contents": "# vim:set ft=systemd :\n#\n# This drop-in will enable any service built with this\n# github.com/containers/kubemntns library to properly join the mount namespace\n# managed by kubens.service\n#\n\n[Unit]\nAfter=kubens.service\n\n[Service]\nEnvironmentFile=-/run/kubens/env\n",
            "name": "01-kubens.conf"
          },
          {
            "name": "10-mco-default-env.conf"
          },
          {
            "contents": "[Service]\nEnvironment=\"GODEBUG=x509ignoreCN=0,madvdontneed=1\"\n",
            "name": "10-mco-default-madv.conf"
          }
        ],
        "enabled": true,
        "name": "kubelet.service"
      },
      {
        "contents": "[Unit]\nDescription=Manages a mount namespace for kubernetes-specific mounts\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nRuntimeDirectory=kubens\nEnvironment=RUNTIME_DIRECTORY=%t/kubens\nEnvironment=BIND_POINT=%t/kubens/mnt\nEnvironment=ENVFILE=%t/kubens/env\n\n# Set up the runtime directory as an unbindable mountpoint\nExecStartPre=bash -c \"findmnt ${RUNTIME_DIRECTORY} || mount --make-unbindable --bind ${RUNTIME_DIRECTORY} ${RUNTIME_DIRECTORY}\"\n# Ensure the bind point exists\nExecStartPre=touch ${BIND_POINT}\n# Use 'unshare' to create the new mountpoint, then 'mount --make-rshared' so it cascades internally\nExecStart=unshare --mount=${BIND_POINT} --propagation slave mount --make-rshared /\n# Finally, set an env pointer for ease-of-use\nExecStartPost=bash -c 'echo \"KUBENSMNT=${BIND_POINT}\" > \"${ENVFILE}\"'\n\n# On stop, a recursive unmount cleans up the namespace and bind-mounted unbindable parent directory\nExecStop=umount -R ${RUNTIME_DIRECTORY}\n\n[Install]\nWantedBy=multi-user.target\n",
        "enabled": false,
        "name": "kubens.service"
      },
      {
        "contents": "[Unit]\nDescription=Machine Config Daemon Firstboot\n# Make sure it runs only on OSTree booted system\nConditionPathExists=/run/ostree-booted\n# Removal of this file signals firstboot completion\nConditionPathExists=/etc/ignition-machine-config-encapsulated.json\nAfter=machine-config-daemon-pull.service\nBefore=kubelet-dependencies.target\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\n# Disable existing repos (if any) so that OS extensions would use embedded RPMs only\nExecStartPre=-/usr/bin/sh -c \"sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/*.repo\"\n# Run this via podman because we want to use the nmstatectl binary in our container\nExecStart=/usr/bin/podman run --rm --privileged --net=host -v /:/rootfs  --entrypoint machine-config-daemon 'quay.io/okd/scos-content@sha256:5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038' firstboot-complete-machineconfig --persist-nics\nExecStart=/usr/bin/podman run --rm --privileged --pid=host --net=host -v /:/rootfs  --entrypoint machine-config-daemon 'quay.io/okd/scos-content@sha256:5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038' firstboot-complete-machineconfig\n[Install]\nRequiredBy=firstboot-osupdate.target\n",
        "enabled": true,
        "name": "machine-config-daemon-firstboot.service"
      },
      {
        "contents": "[Unit]\nDescription=Machine Config Daemon Pull\n# Make sure it runs only on OSTree booted system\nConditionPathExists=/run/ostree-booted\n# This \"stamp file\" is unlinked when we complete\n# machine-config-daemon-firstboot.service\nConditionPathExists=/etc/ignition-machine-config-encapsulated.json\n# Run after crio-wipe so the pulled MCD image is protected against a corrupted storage from a forced shutdown\nWants=crio-wipe.service NetworkManager-wait-online.service\nAfter=crio-wipe.service NetworkManager-wait-online.service network.service\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nExecStartPre=/etc/machine-config-daemon/generate_podman_policy_args.sh\nExecStart=/bin/sh -c \"while ! /usr/bin/podman pull $(cat /tmp/podman_policy_args) --authfile=/var/lib/kubelet/config.json 'quay.io/okd/scos-content@sha256:5737fff16b5177686d959a19ae43ce60f09b508326257398f9bcc33b2c23d038'; do sleep 1; done\"\n\n[Install]\nRequiredBy=machine-config-daemon-firstboot.service\n",
        "enabled": true,
        "name": "machine-config-daemon-pull.service"
      },
      {
        "contents": "[Unit]\nDescription=Applies per-node NMState network configuration\nRequires=openvswitch.service\nWants=NetworkManager-wait-online.service\nAfter=NetworkManager-wait-online.service openvswitch.service network.service nodeip-configuration.service\nBefore=nmstate.service kubelet-dependencies.target ovs-configuration.service node-valid-hostname.service\n\n[Service]\nType=oneshot\n# Would prefer to do Restart=on-failure instead of this bash retry loop, but\n# the version of systemd we have right now doesn't support it. It should be\n# available in systemd v244 and higher.\nExecStart=/usr/local/bin/nmstate-configuration.sh\nStandardOutput=journal+console\nStandardError=journal+console\n\n[Install]\nWantedBy=network-online.target\n",
        "enabled": true,
        "name": "nmstate-configuration.service"
      },
      {
        "contents": "[Unit]\nDescription=Apply nmstate on-disk state\nDocumentation=man:nmstate.service(8) https://www.nmstate.io\nAfter=NetworkManager-wait-online.service\nBefore=network-online.target\nWants=NetworkManager-wait-online.service\nRequires=NetworkManager.service\n\n[Service]\nType=oneshot\nExecStart=/usr/bin/nmstatectl service\nRemainAfterExit=yes\n\n[Install]\nWantedBy=NetworkManager.service\n",
        "enabled": true,
        "name": "nmstate.service"
      },
      {
        "contents": "[Unit]\nDescription=Wait for a non-localhost hostname\nBefore=kubelet-dependencies.target\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nUser=root\nExecStart=/usr/local/bin/mco-hostname --wait\n\n# Wait up to 5min for the node to get a non-localhost name\nTimeoutSec=300\n\n[Install]\n# TODO: Change this to RequiredBy after we fix https://github.com/openshift/machine-config-operator/pull/3865#issuecomment-1746963115\nWantedBy=kubelet-dependencies.target\n",
        "enabled": true,
        "name": "node-valid-hostname.service"
      },
      {
        "contents": "[Unit]\nDescription=Writes IP address configuration so that kubelet and crio services select a valid node IP\nWants=NetworkManager-wait-online.service\nAfter=NetworkManager-wait-online.service firstboot-osupdate.target\nBefore=kubelet-dependencies.target ovs-configuration.service\n\n[Service]\n# Need oneshot to delay kubelet\nType=oneshot\nSyslogIdentifier=nodeip-configuration\n# Would prefer to do Restart=on-failure instead of this bash retry loop, but\n# the version of systemd we have right now doesn't support it. It should be\n# available in systemd v244 and higher.\nExecStart=/bin/bash -c \" \\\n  until \\\n  /usr/bin/podman run --rm \\\n  --authfile /var/lib/kubelet/config.json \\\n  --env 'ENABLE_NODEIP_DEBUG=true' \\\n  --net=host \\\n  --security-opt label=disable \\\n  --volume /etc/systemd/system:/etc/systemd/system \\\n  --volume /run/nodeip-configuration:/run/nodeip-configuration \\\n  quay.io/okd/scos-content@sha256:408f2dea5ba91ea0cd8c8d7d38854fd4eee47db15ac78725bdd26009c67b18da \\\n  node-ip \\\n  set \\\n  --retry-on-failure \\\n  --network-type OVNKubernetes \\\n  ${NODEIP_HINT:-${KUBELET_NODEIP_HINT:-}}; \\\n  do \\\n  sleep 5; \\\n  done\"\nExecStart=/bin/systemctl daemon-reload\nExecStartPre=/bin/mkdir -p /run/nodeip-configuration\nStandardOutput=journal+console\nStandardError=journal+console\n\nEnvironmentFile=-/etc/default/nodeip-configuration\n\n[Install]\nRequiredBy=kubelet-dependencies.target\n",
        "enabled": true,
        "name": "nodeip-configuration.service"
      },
      {
        "enabled": true,
        "name": "openvswitch.service"
      },
      {
        "contents": "[Unit]\n# Kdump will generate it's initramfs based on the running state when kdump.service run\n# If OVS has already run, the kdump fails to gather a working network config,\n# which prevent network log exports, sush as SSH.\n# See https://issues.redhat.com/browse/OCPBUGS-28239\nAfter=kdump.service\nDescription=Configures OVS with proper host networking configuration\n# This service is used to move a physical NIC into OVS and reconfigure OVS to use the host IP\nRequires=openvswitch.service\nWants=NetworkManager-wait-online.service\nAfter=firstboot-osupdate.target\nAfter=NetworkManager-wait-online.service openvswitch.service network.service nodeip-configuration.service nmstate.service\nBefore=kubelet-dependencies.target node-valid-hostname.service\n\n[Service]\n# Need oneshot to delay kubelet\nType=oneshot\nExecStart=/usr/local/bin/configure-ovs.sh OVNKubernetes\nStandardOutput=journal+console\nStandardError=journal+console\n\n[Install]\nRequiredBy=kubelet-dependencies.target\n",
        "enabled": true,
        "name": "ovs-configuration.service"
      },
      {
        "dropins": [
          {
            "contents": "[Service]\nRestart=always\nExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /var/lib/openvswitch'\nExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /etc/openvswitch'\nExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /run/openvswitch'\nExecStartPost=-/usr/bin/ovs-appctl vlog/set syslog:info\nExecReload=-/usr/bin/ovs-appctl vlog/set syslog:info\n",
            "name": "10-ovs-vswitchd-restart.conf"
          }
        ],
        "name": "ovs-vswitchd.service"
      },
      {
        "dropins": [
          {
            "contents": "[Service]\nRestart=always\n",
            "name": "10-ovsdb-restart.conf"
          }
        ],
        "enabled": true,
        "name": "ovsdb-server.service"
      },
      {
        "dropins": [
          {
            "name": "10-mco-default-env.conf"
          },
          {
            "contents": "# See https://github.com/openshift/machine-config-operator/issues/1897\n[Service]\nNice=10\nIOSchedulingClass=best-effort\nIOSchedulingPriority=6\n",
            "name": "mco-controlplane-nice.conf"
          }
        ],
        "name": "rpm-ostreed.service"
      },
      {
        "contents": "[Unit]\nDescription=Ensure IKE SA established for existing IPsec connections.\nAfter=ipsec.service\nBefore=kubelet-dependencies.target node-valid-hostname.service\n\n[Service]\nType=oneshot\nExecStart=/usr/local/bin/ipsec-connect-wait.sh\nStandardOutput=journal+console\nStandardError=journal+console\n\n[Install]\nWantedBy=ipsec.service\n",
        "enabled": true,
        "name": "wait-for-ipsec-connect.service"
      },
      {
        "contents": "[Unit]\nDescription=Ensure primary IP is assigned and usable\nRequires=nmstate.service\nAfter=nmstate.service\nBefore=kubelet-dependencies.target\n\n[Service]\nType=oneshot\n# Would prefer to do Restart=on-failure instead of this bash retry loop, but\n# the version of systemd we have right now doesn't support it. It should be\n# available in systemd v244 and higher.\nExecStart=/bin/bash -c \" \\\n  until \\\n  /usr/local/bin/wait-for-primary-ip.sh; \\\n  do \\\n  sleep 10; \\\n  done\"\nStandardOutput=journal+console\nStandardError=journal+console\n\n[Install]\nWantedBy=network-online.target\n",
        "enabled": true,
        "name": "wait-for-primary-ip.service"
      },
      {
        "dropins": [
          {
            "contents": "[Unit]\nConditionPathExists=/enoent\n",
            "name": "mco-disabled.conf"
          }
        ],
        "name": "zincati.service"
      },
      {
        "contents": "[Unit]\nDescription=Kubernetes Kubelet After Reboot Cleanup\nBefore=kubelet.service\n\n[Service]\nType=oneshot\nExecStart=/bin/rm -f /var/lib/kubelet/cpu_manager_state\nExecStart=/bin/rm -f /var/lib/kubelet/memory_manager_state\nExecStart=-/bin/rm -f /var/lib/kubelet/dra_manager_state\n\n[Install]\nWantedBy=multi-user.target\n",
        "enabled": true,
        "name": "kubelet-cleanup.service"
      }
    ]
  }
}
