From a8ca51d73d74c89dd035a34a0e49283a5f4d4c70 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Tue, 19 Apr 2016 11:49:07 +0200 Subject: [PATCH] oem-exoscale: make DHCP address retrieval more resilient When retrievent the DHCP IP address (to get user data), two steps were used: the first one waited for one lease file to become present and the second one extracted and validated the server IP address. If for some reason the second step failed, an empty IP was provided (and notably, coreos-setup-environment.service never finishes correctly). To avoid that, we combine the two steps into a loop: for each available lease file, extract the IP and validate it. If it succeeds, return it. If not continue. If nothing was found, restart the same process after sleeping a bit. --- .../oem-exoscale/files/exoscale-dhcp | 28 +++++++++---------- ...0.0.4.ebuild => oem-exoscale-0.0.5.ebuild} | 0 2 files changed, 13 insertions(+), 15 deletions(-) rename sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/{oem-exoscale-0.0.4.ebuild => oem-exoscale-0.0.5.ebuild} (100%) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/files/exoscale-dhcp b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/files/exoscale-dhcp index 06b29fb855..72615f76e4 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/files/exoscale-dhcp +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/files/exoscale-dhcp @@ -2,22 +2,20 @@ get_dhcp_ip() { local leases_dir="/run/systemd/netif/leases" + local found=0 while true; do - if [[ "$(find "${leases_dir}" -type f -size +1c)" ]]; then - break - fi + for leasefile in $(find "${leases_dir}" -type f -size +1c); do + dhcp_server_ip=$(cat $leasefile | awk -F= '/SERVER_ADDRESS/ { print $2 }') + if [[ -n "${dhcp_server_ip}" ]]; then + metadata_url="http://${dhcp_server_ip}/latest/meta-data/" + if curl --fail -s "${metadata_url}" >/dev/null; then + echo $dhcp_server_ip + found=1 + break + fi + fi + done + [[ $found -eq 0 ]] || break sleep .5 done - - for leasefile in "${leases_dir}/"*; do - dhcp_server_ip=$(cat $leasefile | awk -F= '/SERVER_ADDRESS/ { print $2 }') - if [[ -n "${dhcp_server_ip}" ]]; then - metadata_url="http://${dhcp_server_ip}/latest/meta-data/" - curl --fail -s "${metadata_url}" >/dev/null - if [[ $? -eq 0 ]]; then - echo $dhcp_server_ip - break - fi - fi - done } diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/oem-exoscale-0.0.4.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/oem-exoscale-0.0.5.ebuild similarity index 100% rename from sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/oem-exoscale-0.0.4.ebuild rename to sdk_container/src/third_party/coreos-overlay/coreos-base/oem-exoscale/oem-exoscale-0.0.5.ebuild