contents:
  source: data:,%23!%2Fusr%2Fbin%2Fenv%20bash%0A%0Ainit()%20%7B%0A%20%20ASSET_BIN%3D%24%7BASSET_DIR%7D%2Fbin%0A%20%20if%20%5B%20!%20-d%20%22%24ASSET_BIN%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22Creating%20asset%20directory%20%24%7BASSET_DIR%7D%22%0A%20%20%20%20for%20dir%20in%20%7Bbin%2Ctmp%2Cshared%2Cbackup%2Ctemplates%2Crestore%2Cmanifests%7D%3B%20do%0A%20%20%20%20%20%20%2Fusr%2Fbin%2Fmkdir%20-p%20%24%7BASSET_DIR%7D%2F%24%7Bdir%7D%0A%20%20%20%20done%0A%20%20fi%0A%7D%0A%0A%23%20download%20and%20test%20etcdctl%20from%20upstream%20release%20assets%0Adl_etcdctl()%20%7B%0A%20%20GOOGLE_URL%3Dhttps%3A%2F%2Fstorage.googleapis.com%2Fetcd%0A%20%20DOWNLOAD_URL%3D%24%7BGOOGLE_URL%7D%0A%0A%20%20echo%20%22Downloading%20etcdctl%20binary..%22%0A%20%20curl%20-s%20-L%20%24%7BDOWNLOAD_URL%7D%2F%24%7BETCD_VERSION%7D%2Fetcd-%24%7BETCD_VERSION%7D-linux-amd64.tar.gz%20-o%20%24ASSET_DIR%2Ftmp%2Fetcd-%24%7BETCD_VERSION%7D-linux-amd64.tar.gz%20%5C%0A%20%20%20%20%26%26%20tar%20-xzf%20%24ASSET_DIR%2Ftmp%2Fetcd-%24%7BETCD_VERSION%7D-linux-amd64.tar.gz%20-C%20%24ASSET_DIR%2Fshared%20--strip-components%3D1%20%5C%0A%20%20%20%20%26%26%20mv%20%24ASSET_DIR%2Fshared%2Fetcdctl%20%24ASSET_DIR%2Fbin%20%5C%0A%20%20%20%20%26%26%20rm%20%24ASSET_DIR%2Fshared%2Fetcd%20%5C%0A%20%20%20%20%26%26%20ETCDCTL_API%3D3%20%24ASSET_DIR%2Fbin%2Fetcdctl%20version%0A%7D%0A%0A%23backup%20etcd%20client%20certs%0Abackup_etcd_client_certs()%20%7B%0A%20%20echo%20%22Trying%20to%20backup%20etcd%20client%20certs..%22%0A%20%20if%20%5B%20-f%20%22%24ASSET_DIR%2Fbackup%2Fetcd-ca-bundle.crt%22%20%5D%20%26%26%20%5B%20-f%20%22%24ASSET_DIR%2Fbackup%2Fetcd-client.crt%22%20%5D%20%26%26%20%5B%20-f%20%22%24ASSET_DIR%2Fbackup%2Fetcd-client.key%22%20%5D%3B%20then%0A%20%20%20%20%20echo%20%22etcd%20client%20certs%20already%20backed%20up%20and%20available%20%24ASSET_DIR%2Fbackup%2F%22%0A%20%20else%0A%20%20%20%20for%20i%20in%20%7B1..10%7D%3B%20do%0A%20%20%20%20%20%20%20%20SECRET_DIR%3D%22%24%7BCONFIG_FILE_DIR%7D%2Fstatic-pod-resources%2Fkube-apiserver-pod-%24%7Bi%7D%2Fsecrets%2Fetcd-client%22%0A%20%20%20%20%20%20%20%20CONFIGMAP_DIR%3D%22%24%7BCONFIG_FILE_DIR%7D%2Fstatic-pod-resources%2Fkube-apiserver-pod-%24%7Bi%7D%2Fconfigmaps%2Fetcd-serving-ca%22%0A%20%20%20%20%20%20%20%20if%20%5B%20-f%20%22%24CONFIGMAP_DIR%2Fca-bundle.crt%22%20%5D%20%26%26%20%5B%20-f%20%22%24SECRET_DIR%2Ftls.crt%22%20%5D%20%26%26%20%5B%20-f%20%22%24SECRET_DIR%2Ftls.key%22%20%5D%3B%20then%0A%20%20%20%20%20%20%20%20%20%20cp%20%24CONFIGMAP_DIR%2Fca-bundle.crt%20%24ASSET_DIR%2Fbackup%2Fetcd-ca-bundle.crt%0A%20%20%20%20%20%20%20%20%20%20cp%20%24SECRET_DIR%2Ftls.crt%20%24ASSET_DIR%2Fbackup%2Fetcd-client.crt%0A%20%20%20%20%20%20%20%20%20%20cp%20%24SECRET_DIR%2Ftls.key%20%24ASSET_DIR%2Fbackup%2Fetcd-client.key%0A%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20echo%20%22%24SECRET_DIR%20does%20not%20contain%20etcd%20client%20certs%2C%20trying%20next%20source%20..%22%0A%20%20%20%20%20%20%20%20fi%0A%20%20%20%20done%0A%20%20%20fi%0A%7D%0A%0A%23%20backup%20current%20etcd-member%20pod%20manifest%0Abackup_manifest()%20%7B%0A%20%20if%20%5B%20-e%20%22%24%7BASSET_DIR%7D%2Fbackup%2Fetcd-member.yaml%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22etcd-member.yaml%20found%20in%20%24%7BASSET_DIR%7D%2Fbackup%2F%22%0A%20%20else%0A%20%20%20%20echo%20%22Backing%20up%20%24%7BETCD_MANIFEST%7D%20to%20%24%7BASSET_DIR%7D%2Fbackup%2F%22%0A%20%20%20%20cp%20%24%7BETCD_MANIFEST%7D%20%24%7BASSET_DIR%7D%2Fbackup%2F%0A%20%20fi%0A%7D%0A%0A%23%20backup%20etcd.conf%0Abackup_etcd_conf()%20%7B%0A%20%20if%20%5B%20-e%20%22%24%7BASSET_DIR%7D%2Fbackup%2Fetcd.conf%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22etcd.conf%20backup%20upready%20exists%20%24ASSET_DIR%2Fbackup%2Fetcd.conf%22%0A%20%20else%0A%20%20%20%20echo%20%22Backing%20up%20%2Fetc%2Fetcd%2Fetcd.conf%20to%20%24%7BASSET_DIR%7D%2Fbackup%2F%22%0A%20%20%20%20cp%20%2Fetc%2Fetcd%2Fetcd.conf%20%24%7BASSET_DIR%7D%2Fbackup%2F%0A%20%20fi%0A%7D%0A%0Abackup_data_dir()%20%7B%0A%20%20if%20%5B%20-f%20%22%24ASSET_DIR%2Fbackup%2Fetcd%2Fmember%2Fsnap%2Fdb%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22etcd%20data-dir%20backup%20found%20%24ASSET_DIR%2Fbackup%2Fetcd..%22%0A%20%20elif%20%5B%20!%20-f%20%22%24%7BETCD_DATA_DIR%7D%2Fmember%2Fsnap%2Fdb%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22Local%20etcd%20snapshot%20file%20not%20found%2C%20backup%20skipped..%22%0A%20%20else%0A%20%20%20%20echo%20%22Backing%20up%20etcd%20data-dir..%22%0A%20%20%20%20cp%20-rap%20%24%7BETCD_DATA_DIR%7D%20%24ASSET_DIR%2Fbackup%2F%0A%20%20fi%0A%7D%0A%0Asnapshot_data_dir()%20%7B%0A%20%20ETCDCTL_API%3D3%20%24%7BETCDCTL%7D%20%5C%0A%20%20%20%20--cert%20%24ASSET_DIR%2Fbackup%2Fetcd-client.crt%20%5C%0A%20%20%20%20--key%20%24ASSET_DIR%2Fbackup%2Fetcd-client.key%20%5C%0A%20%20%20%20--cacert%20%24ASSET_DIR%2Fbackup%2Fetcd-ca-bundle.crt%20%5C%0A%20%20%20%20snapshot%20save%20%24%7BSNAPSHOT_FILE%7D%0A%7D%0A%0A%23%20backup%20etcd%20peer%2C%20server%20and%20metric%20certs%0Abackup_certs()%20%7B%0A%20%20COUNT%3D%24(ls%20%24ETCD_STATIC_RESOURCES%2Fsystem%5C%3Aetcd-*%202%3E%2Fdev%2Fnull%20%7C%20wc%20-l)%0A%20%20BACKUP_COUNT%3D%24(ls%20%24ASSET_DIR%2Fbackup%2Fsystem%5C%3Aetcd-*%202%3E%2Fdev%2Fnull%20%7C%20wc%20-l)%0A%0A%20%20if%20%5B%20%22%24BACKUP_COUNT%22%20-gt%201%20%5D%3B%20then%0A%20%20%20%20echo%20%22etcd%20TLS%20certificate%20backups%20found%20in%20%24ASSET_DIR%2Fbackup..%22%0A%20%20elif%20%5B%20%22%24COUNT%22%20-eq%200%20%5D%3B%20then%0A%20%20%20%20echo%20%22etcd%20TLS%20certificates%20not%20found%2C%20backup%20skipped..%22%0A%20%20else%0A%20%20%20%20echo%20%22Backing%20up%20etcd%20certificates..%22%0A%20%20%20%20cp%20%24ETCD_STATIC_RESOURCES%2Fsystem%5C%3Aetcd-*%20%24ASSET_DIR%2Fbackup%2F%0A%20%20fi%0A%7D%0A%0A%23%20stop%20etcd%20by%20moving%20the%20manifest%20out%20of%20%2Fetcd%2Fkubernetes%2Fmanifests%0A%23%20we%20wait%20for%20all%20etcd%20containers%20to%20die.%0Astop_etcd()%20%7B%0A%20%20echo%20%22Stopping%20etcd..%22%0A%0A%20%20if%20%5B%20!%20-d%20%22%24MANIFEST_STOPPED_DIR%22%20%5D%3B%20then%0A%20%20%20%20mkdir%20%24MANIFEST_STOPPED_DIR%0A%20%20fi%0A%0A%20%20if%20%5B%20-e%20%22%24ETCD_MANIFEST%22%20%5D%3B%20then%0A%20%20%20%20mv%20%24ETCD_MANIFEST%20%24MANIFEST_STOPPED_DIR%0A%20%20fi%0A%0A%20%20for%20name%20in%20%7Betcd-member%2Cetcd-metric%7D%0A%20%20do%0A%20%20%20%20while%20%5B%20!%20-z%20%22%24(crictl%20pods%20-name%20%24name%20--state%20Ready%20-q)%22%20%5D%3B%20do%0A%20%20%20%20%20%20echo%20%22Waiting%20for%20%24name%20to%20stop%22%0A%20%20%20%20%20%20sleep%2010%0A%20%20%20%20done%0A%20%20done%0A%7D%0A%0Aremove_data_dir()%20%7B%0A%20%20echo%20%22Removing%20etcd%20data-dir%20%24%7BETCD_DATA_DIR%7D%22%0A%20%20rm%20-rf%20%24%7BETCD_DATA_DIR%7D%0A%7D%0A%0Aremove_certs()%20%7B%0A%20%20COUNT%3D%24(ls%20%24ETCD_STATIC_RESOURCES%2Fsystem%5C%3Aetcd-*%202%3E%2Fdev%2Fnull%20%7C%20wc%20-l)%0A%20%20if%20%5B%20%22%24COUNT%22%20-gt%201%20%5D%3B%20then%0A%20%20%20%20%20echo%20%22Removing%20etcd%20certs..%22%0A%20%20%20%20%20rm%20-f%20%24ETCD_STATIC_RESOURCES%2Fsystem%5C%3Aetcd-*%0A%20%20fi%0A%7D%0A%0Arestore_snapshot()%20%7B%0A%20%20HOSTNAME%3D%24(hostname)%0A%20%20HOSTDOMAIN%3D%24(hostname%20-d)%0A%20%20ETCD_NAME%3Detcd-member-%24%7BHOSTNAME%7D.%24%7BHOSTDOMAIN%7D%0A%20%20if%20%5B%20-z%20%22%24%7BETCD_CONNSTRING%7D%22%20%5D%3B%20then%0A%20%20%20%20ETCD_CONNSTRING%3D%22%24%7BETCD_NAME%7D%3Dhttps%3A%2F%2F%24%7BETCD_DNS_NAME%7D%3A2380%22%0A%20%20fi%0A%0A%20%20source%20%2Frun%2Fetcd%2Fenvironment%0A%0A%20%20if%20%5B%20!%20-f%20%22%24SNAPSHOT_FILE%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22Snapshot%20file%20not%20found%2C%20restore%20failed%3A%20%24SNAPSHOT_FILE.%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%0A%20%20sleep%202%0A%0A%20%20echo%20%22Restoring%20etcd%20member%20%24ETCD_NAME%20from%20snapshot..%22%0A%0A%20%20env%20ETCDCTL_API%3D3%20%24%7BETCDCTL%7D%20snapshot%20restore%20%24SNAPSHOT_FILE%20%5C%0A%20%20%20%20--name%20%24ETCD_NAME%20%5C%0A%20%20%20%20--initial-cluster%20%24%7BETCD_CONNSTRING%7D%20%5C%0A%20%20%20%20--initial-cluster-token%20etcd-cluster-1%20%5C%0A%20%20%20%20--skip-hash-check%3Dtrue%20%5C%0A%20%20%20%20--initial-advertise-peer-urls%20https%3A%2F%2F%24%7BETCD_IPV4_ADDRESS%7D%3A2380%20%5C%0A%20%20%20%20--data-dir%20%24ETCD_DATA_DIR%0A%7D%0A%0Apatch_manifest()%20%7B%0A%20%20echo%20%22Patching%20etcd-member%20manifest..%22%0A%20%20cp%20%24ASSET_DIR%2Fbackup%2Fetcd-member.yaml%20%24ASSET_DIR%2Ftmp%2Fetcd-member.yaml.template%0A%20%20sed%20-i%20%2F'%20'--discovery-srv%2Fd%20%24ASSET_DIR%2Ftmp%2Fetcd-member.yaml.template%0A%20%20mv%20%24ASSET_DIR%2Ftmp%2Fetcd-member.yaml.template%20%24MANIFEST_STOPPED_DIR%2Fetcd-member.yaml%0A%7D%0A%0A%23%20generate%20a%20kubeconf%20like%20file%20for%20the%20cert%20agent%20to%20consume%20and%20contact%20signer.%0Agen_config()%20%7B%0A%20%20CA%3D%24(base64%20%24ASSET_DIR%2Fbackup%2Fetcd-ca-bundle.crt%20%7C%20tr%20-d%20'%5Cn')%0A%20%20CERT%3D%24(base64%20%24ASSET_DIR%2Fbackup%2Fetcd-client.crt%20%7C%20tr%20-d%20'%5Cn')%0A%20%20KEY%3D%24(base64%20%24ASSET_DIR%2Fbackup%2Fetcd-client.key%20%7C%20tr%20-d%20'%5Cn')%0A%0A%20%20cat%20%3E%20%24ETCD_STATIC_RESOURCES%2F.recoveryconfig%20%3C%3C%20EOF%0Aclusters%3A%0A-%20cluster%3A%0A%20%20%20%20certificate-authority-data%3A%20%24%7BCA%7D%0A%20%20%20%20server%3A%20https%3A%2F%2F%24%7BRECOVERY_SERVER_IP%7D%3A9943%0A%20%20name%3A%20%24%7BCLUSTER_NAME%7D%0Acontexts%3A%0A-%20context%3A%0A%20%20%20%20cluster%3A%20%24%7BCLUSTER_NAME%7D%0A%20%20%20%20user%3A%20kubelet%0A%20%20name%3A%20kubelet%0Acurrent-context%3A%20kubelet%0Apreferences%3A%20%7B%7D%0Ausers%3A%0A-%20name%3A%20kubelet%0A%20%20user%3A%0A%20%20%20%20client-certificate-data%3A%20%24%7BCERT%7D%0A%20%20%20%20client-key-data%3A%20%24%7BKEY%7D%0AEOF%0A%7D%0A%0A%23%20add%20member%20cluster%0Aetcd_member_add()%20%7B%0A%20%20source%20%20%2Frun%2Fetcd%2Fenvironment%0A%20%20HOSTNAME%3D%24(hostname)%0A%20%20HOSTDOMAIN%3D%24(hostname%20-d)%0A%20%20ETCD_NAME%3Detcd-member-%24%7BHOSTNAME%7D.%24%7BHOSTDOMAIN%7D%0A%0A%20%20if%20%5B%20-d%20%22%24ETCD_DATA_DIR%22%20%5D%3B%20then%0A%20%20%20%20rm%20-rf%20%24ETCD_DATA_DIR%0A%20%20fi%0A%0A%20%20echo%20%22Updating%20etcd%20membership..%22%0A%0A%20%20RESPONSE%3D%24(env%20ETCDCTL_API%3D3%20%24ETCDCTL%20--cert%20%24ASSET_DIR%2Fbackup%2Fetcd-client.crt%20--key%20%24ASSET_DIR%2Fbackup%2Fetcd-client.key%20--cacert%20%24ASSET_DIR%2Fbackup%2Fetcd-ca-bundle.crt%20%5C%0A%20%20%20%20--endpoints%20%24%7BRECOVERY_SERVER_IP%7D%3A2379%20member%20add%20%24ETCD_NAME%20--peer-urls%3Dhttps%3A%2F%2F%24%7BETCD_DNS_NAME%7D%3A2380)%0A%0A%20%20%20if%20%5B%20%24%3F%20-eq%200%20%5D%3B%20then%0A%20%20%20%20%20echo%20%22%24RESPONSE%22%0A%20%20%20%20%20APPEND_CONF%3D%24(echo%20%22%24RESPONSE%22%20%7C%20sed%20-e%20'1%2C2d')%0A%20%20%20%20%20echo%20-e%20%22%5Cn%5Cn%23%5Brecover%5D%5Cn%24APPEND_CONF%22%20%3E%3E%20%24ETCD_CONFIG%0A%20%20%20else%0A%20%20%20%20%20echo%20%22%24RESPONSE%22%0A%20%20%20%20%20exit%201%0A%20%20%20fi%0A%7D%0A%0Astart_etcd()%20%7B%0A%20%20echo%20%22Starting%20etcd..%22%0A%20%20mv%20%24%7BMANIFEST_STOPPED_DIR%7D%2Fetcd-member.yaml%20%24MANIFEST_DIR%0A%7D%0A%0Adownload_cert_recover_template()%20%7B%0A%20%20curl%20-s%20https%3A%2F%2Fraw.githubusercontent.com%2Fhexfusion%2Fopenshift-recovery%2Fmaster%2Fmanifests%2Fetcd-generate-certs.yaml.template%20-o%20%24ASSET_DIR%2Ftemplates%2Fetcd-generate-certs.yaml.template%0A%7D%0A%0Apopulate_template()%20%7B%0A%20%20FIND%3D%22%241%22%0A%20%20REPLACE%3D%22%242%22%0A%20%20TEMPLATE%3D%22%243%22%0A%20%20OUT%3D%22%244%22%0A%0A%20%20echo%20%22Populating%20template%20%24TEMPLATE%22%0A%0A%20%20if%20%5B%20-z%20%22%24FIND%22%20%5D%20%7C%7C%20%5B%20-z%20%22%24REPLACE%22%20%5D%20%7C%7C%20%5B%20-z%20%22%24TEMPLATE%22%20%5D%20%7C%7C%20%5B%20-z%20%22%24OUT%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22populate_template%20requires%204%20arguments%20FIND%2C%20REPLACE%2C%20TEMPLATE%20and%20OUT%22%0A%20%20%20%20exit%201%0A%20%20elif%20%5B%20!%20-f%20%22%24TEMPLATE%22%20%5D%3B%20then%0A%20%20%20%20echo%20%22template%20%24TEMPLATE%20does%20not%20exist%22%0A%20%20%20%20exit%201%0A%20%20fi%0A%0A%20%20TMP_FILE%3D%24(date%20%2B%22%25m-%25d-%25Y-%25H%25M%22)%0A%20%20cp%20%24TEMPLATE%20%22%24ASSET_DIR%2Ftmp%2F%24%7BTMP_FILE%7D%22%0A%0A%20%20sed%20-i%20%22s%7C%24%7BFIND%7D%7C%24%7BREPLACE%7D%7C%22%20%22%24ASSET_DIR%2Ftmp%2F%24%7BTMP_FILE%7D%22%0A%20%20mv%20%22%24ASSET_DIR%2Ftmp%2F%24%7BTMP_FILE%7D%22%20%22%24OUT%22%0A%7D%0A%0Astart_cert_recover()%20%7B%0A%20%20echo%20%22Starting%20etcd%20client%20cert%20recovery%20agent..%22%0A%20%20mv%20%24%7BMANIFEST_STOPPED_DIR%7D%2Fetcd-generate-certs.yaml%20%24MANIFEST_DIR%0A%7D%0A%0Averify_certs()%20%7B%0A%20%20while%20%5B%20%22%24(ls%20%24ETCD_STATIC_RESOURCES%20%7C%20wc%20-l)%22%20-lt%209%20%20%5D%3B%20do%0A%20%20%20%20echo%20%22Waiting%20for%20certs%20to%20generate..%22%0A%20%20%20%20sleep%2010%0A%20%20done%0A%7D%0A%0Astop_cert_recover()%20%7B%0A%20%20echo%20%22Stopping%20cert%20recover..%22%0A%0A%20%20if%20%5B%20-f%20%22%24%7BCONFIG_FILE_DIR%7D%2Fmanifests%2Fetcd-generate-certs.yaml%22%20%5D%3B%20then%0A%20%20%20%20mv%20%24%7BCONFIG_FILE_DIR%7D%2Fmanifests%2Fetcd-generate-certs.yaml%20%24MANIFEST_STOPPED_DIR%0A%20%20fi%0A%0A%20%20for%20name%20in%20%7Bgenerate-env%2Cgenerate-certs%7D%3B%20do%0A%20%20%20%20while%20%5B%20!%20-z%20%22%24(crictl%20pods%20-name%20%24name%20--state%20Ready%20-q)%22%20%5D%3B%20do%0A%20%20%20%20%20%20echo%20%22Waiting%20for%20%24name%20to%20stop%22%0A%20%20%20%20%20%20sleep%2010%0A%20%20%20%20done%0A%20%20done%0A%7D%0A%0Astop_static_pods()%20%7B%0A%20%20echo%20%22Stopping%20all%20static%20pods..%22%0A%0A%20%20if%20%5B%20!%20-d%20%22%24MANIFEST_STOPPED_DIR%22%20%5D%3B%20then%0A%20%20%20%20mkdir%20%24MANIFEST_STOPPED_DIR%0A%20%20fi%0A%0A%20%20find%20%24%7BMANIFEST_DIR%7D%20-maxdepth%201%20-type%20f%20-printf%20%22%25f%5Cn%22%20%3E%20%24STOPPED_STATIC_PODS%0A%0A%20%20while%20read%20STATIC_POD%3B%20do%0A%20%20%20%20echo%20%22..stopping%20%24STATIC_POD%22%0A%20%20%20%20mv%20%24%7BMANIFEST_DIR%7D%2F%24%7BSTATIC_POD%7D%20%24MANIFEST_STOPPED_DIR%0A%20%20done%20%3C%24STOPPED_STATIC_PODS%0A%7D%0A%0Astart_static_pods()%20%7B%0A%20%20echo%20%22Starting%20static%20pods..%22%0A%20%20while%20read%20STATIC_POD%3B%20do%0A%20%20%20%20echo%20%22..starting%20%24STATIC_POD%22%0A%20%20%20%20mv%20%24%7BMANIFEST_STOPPED_DIR%7D%2F%24%7BSTATIC_POD%7D%20%24MANIFEST_DIR%0A%20%20done%20%3C%24STOPPED_STATIC_PODS%0A%7D%0A%0Astop_kubelet()%20%7B%0A%20%20echo%20%22Stopping%20kubelet..%22%0A%20%20systemctl%20stop%20kubelet.service%0A%7D%0A%0Astart_kubelet()%20%7B%0A%20%20echo%20%22Starting%20kubelet..%22%0A%20%20systemctl%20start%20kubelet.service%0A%7D%0A%0Astop_all_containers()%20%7B%0A%20%20echo%20%22Stopping%20all%20containers..%22%0A%20%20crictl%20ps%20-q%20%7C%20xargs%20-r%20crictl%20stop%0A%7D%0A
  verification: {}
filesystem: root
mode: 420
path: /usr/local/bin/openshift-recovery-tools
