meta-google: gbmc-bridge: add coordinated powercycle flag

This is for enabling/disabling coordinated powercycle on specific platforms.

Change-Id: I8db76adfb1584b014c5273d28906f9bdeadd8e58
Signed-off-by: Yuxiao Zhang <yuxiaozhang@google.com>
diff --git a/meta-google/recipes-google/networking/gbmc-bridge.bb b/meta-google/recipes-google/networking/gbmc-bridge.bb
index 3c51c16..44d0ff0 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge.bb
+++ b/meta-google/recipes-google/networking/gbmc-bridge.bb
@@ -25,7 +25,7 @@
   file://gbmc-br-gw-src.sh \
   file://gbmc-br-nft.sh \
   file://gbmc-br-dhcp.sh \
-  file://50-gbmc-psu-hardreset.sh \
+  file://50-gbmc-psu-hardreset.sh.in \
   file://gbmc-br-dhcp.service \
   file://gbmc-br-dhcp-term.sh \
   file://gbmc-br-dhcp-term.service \
@@ -76,6 +76,9 @@
 # system of multiple network endpoints.
 GBMC_ULA_PREFIX = "fdb5:0481:10ce:0"
 
+# coordinated powercycle
+GBMC_COORDINATED_POWERCYCLE ?= "true"
+
 def mac_to_eui64(mac):
   if not mac:
     return ''
@@ -148,6 +151,8 @@
   install -m0644 ${WORKDIR}/gbmc-br-dhcp-term.service ${D}${systemd_system_unitdir}/
   install -m0644 ${WORKDIR}/gbmc-br-load-ip.service ${D}${systemd_system_unitdir}/
   install -d -m0755 ${D}${datadir}/gbmc-br-dhcp
+
+  sed 's,@COORDINATED_POWERCYCLE@,${GBMC_COORDINATED_POWERCYCLE},' ${WORKDIR}/50-gbmc-psu-hardreset.sh.in >${WORKDIR}/50-gbmc-psu-hardreset.sh
   install -m0644 ${WORKDIR}/50-gbmc-psu-hardreset.sh ${D}${datadir}/gbmc-br-dhcp/
 
   install -m0644 ${WORKDIR}/gbmc-br-lib.sh ${D}${datadir}/
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh b/meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh.in
similarity index 76%
rename from meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh
rename to meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh.in
index ace4ac5..1a5e055 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh
+++ b/meta-google/recipes-google/networking/gbmc-bridge/50-gbmc-psu-hardreset.sh.in
@@ -17,6 +17,8 @@
 
 gbmc_psu_hardreset_needed=
 
+COORDINATED_POWERCYCLE=@COORDINATED_POWERCYCLE@
+
 gbmc_psu_hardreset_hook() {
   # We don't always need a powercycle, allow skipping
   if [ -z "${gbmc_psu_hardreset_needed-}" ]; then
@@ -24,8 +26,13 @@
     return 0
   fi
 
-  echo "Powercycling" >&2
-  update-dhcp-status 'POWERCYCLE' "netboot powercycle"
+  if [ "${COORDINATED_POWERCYCLE}" == "true" ]; then
+    echo "Requesting powercyce" >&2
+    update-dhcp-status 'POWERCYCLE' "netboot powercycle" || return
+  else
+    echo "Powercycling" >&2
+    systemctl start gbmc-psu-hardreset.target || return
+  fi
 
   # Ensure that we don't continue the DHCP process while waiting for the
   # powercycle.