autotest: Check servo-host by ping before check if it labstation.

When we create servo_topology we can fail if servo_host is not sshable.
Move init topology for late step if labstation will come back during
repair.

BUG=b:166680257
TEST=run local test agains the bad labstation

./server/autoserv -s --host-info-subdir host_info_store -m chromeos6-row7-rack13-host7 --lab True --local-only-host-info True -R -r /tr/
./server/autoserv -s --host-info-subdir host_info_store -m             chromeos6-row1-rack19-host17 --lab True --local-only-host-info True -R -r /tr/

Change-Id: I54fd18f876b5bc83a8ca52ebef10b8d7107f902c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2561561
Tested-by: Otabek Kasimov <otabek@google.com>
Reviewed-by: Gregory Nisbet <gregorynisbet@google.com>
Reviewed-by: Garry Wang <xianuowang@chromium.org>
Commit-Queue: Otabek Kasimov <otabek@google.com>
diff --git a/server/hosts/servo_host.py b/server/hosts/servo_host.py
index fac2990..d127071 100644
--- a/server/hosts/servo_host.py
+++ b/server/hosts/servo_host.py
@@ -208,9 +208,6 @@
         self.servo_setup = servo_setup
         self.additional_servod_args = additional_servod_args
 
-        if self.is_servo_topology_supported():
-            self._topology = servo_topology.ServoTopology(self)
-
         # The location of the log files on the servo host for this instance.
         self.remote_log_dir = '%s_%s' % (self.SERVOD_LOG_PREFIX,
                                          self.servo_port)
@@ -340,7 +337,8 @@
             self._servo_state = servo_constants.SERVO_STATE_WORKING
             self.record('INFO', None, None,
                         'ServoHost verify set servo_state as WORKING')
-            if self._topology:
+            if self.is_servo_topology_supported():
+                self._topology = servo_topology.ServoTopology(self)
                 self._topology.generate()
         except Exception as e:
             if not self.is_localhost():
@@ -578,7 +576,8 @@
             # reboot request created by this servo because it passed repair.
             if self.is_labstation():
                 self.withdraw_reboot_request()
-            if self._topology:
+            if self.is_servo_topology_supported():
+                self._topology = servo_topology.ServoTopology(self)
                 self._topology.generate()
         except Exception as e:
             if not self.is_localhost():
@@ -1453,6 +1452,9 @@
 
     def is_servo_topology_supported(self):
         """Check if servo_topology is supported."""
+        if not self.is_up_fast():
+            logging.info('Servo-Host is not reachable.')
+            return False
         if not self.is_labstation():
             logging.info('Servo-topology supported only for labstation.')
             return False