docs: def installFS(rh, vaddr, mode, fileSystem, diskType):
      """
      Install a filesystem on a virtual machine's dasd.
  
      Input:
         Request Handle:
            userid - Userid that owns the disk
         Virtual address as known to the owning system.
         Access mode to use to get the disk.
         Disk Type - 3390 or 9336
  
      Output:
         Dictionary containing the following:
            overallRC - overall return code, 0: success, non-zero: failure
            rc        - RC returned from SMCLI if overallRC = 0.
            rs        - RS returned from SMCLI if overallRC = 0.
            errno     - Errno returned from SMCLI if overallRC = 0.
            response  - Output of the SMCLI command.
      """
  
      rh.printSysLog("Enter vmUtils.installFS, userid: " + rh.userid +
          ", vaddr: " + str(vaddr) + ", mode: " + mode + ", file system: " +
          fileSystem + ", disk type: " + diskType)
  
      results = {
                'overallRC': 0,
                'rc': 0,
                'rs': 0,
                'errno': 0,
               }
  
      out = ''
      diskAccessed = False
  
      # Get access to the disk.
      cmd = ["sudo",
             "/opt/zthin/bin/linkdiskandbringonline",
             rh.userid,
             vaddr,
             mode]
      strCmd = ' '.join(cmd)
      rh.printSysLog("Invoking: " + strCmd)
      try:
          out = subprocess.check_output(cmd, close_fds=True)
          if isinstance(out, bytes):
              out = bytes.decode(out)
          diskAccessed = True
      except CalledProcessError as e:
          rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
              e.returncode, e.output))
          results = msgs.msg['0415'][0]
          results['rs'] = e.returncode
          rh.updateResults(results)
      except Exception as e:
          # All other exceptions.
          results = msgs.msg['0421'][0]
          rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
              type(e).__name__, str(e)))
  
      if results['overallRC'] == 0:
          """
          sample output:
          linkdiskandbringonline maint start time: 2017-03-03-16:20:48.011
          Success: Userid maint vdev 193 linked at ad35 device name dasdh
          linkdiskandbringonline exit time: 2017-03-03-16:20:52.150
          """
          match = re.search('Success:(.+?)\n', out)
          if match:
              parts = match.group(1).split()
              if len(parts) > 9:
                  device = "/dev/" + parts[9]
              else:
                  strCmd = ' '.join(cmd)
                  rh.printLn("ES", msgs.msg['0416'][1] % (modId,
                      'Success:', 10, strCmd, out))
                  results = msgs.msg['0416'][0]
                  rh.updateResults(results)
          else:
              strCmd = ' '.join(cmd)
              rh.printLn("ES", msgs.msg['0417'][1] % (modId,
                  'Success:', strCmd, out))
              results = msgs.msg['0417'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0 and diskType == "3390":
          # dasdfmt the disk
          cmd = ["sudo",
              "/sbin/dasdfmt",
              "-y",
              "-b", "4096",
              "-d", "cdl",
              "-f", device]
          strCmd = ' '.join(cmd)
          rh.printSysLog("Invoking: " + strCmd)
          try:
              out = subprocess.check_output(cmd, close_fds=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              strCmd = " ".join(cmd)
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0 and diskType == "3390":
          # Settle the devices so we can do the partition.
          strCmd = ("which udevadm &> /dev/null && " +
              "udevadm settle || udevsettle")
          rh.printSysLog("Invoking: " + strCmd)
          try:
              subprocess.check_output(
                  strCmd,
                  stderr=subprocess.STDOUT,
                  close_fds=True,
                  shell=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              strCmd = " ".join(cmd)
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0 and diskType == "3390":
          # Prepare the partition with fdasd
          cmd = ["sudo", "/sbin/fdasd", "-a", device]
          strCmd = ' '.join(cmd)
          rh.printSysLog("Invoking: " + strCmd)
          try:
              out = subprocess.check_output(cmd,
                  stderr=subprocess.STDOUT, close_fds=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0 and diskType == "9336":
          # Delete the existing partition in case the disk already
          # has a partition in it.
          cmd = "sudo /sbin/fdisk " + device + " << EOF\nd\nw\nEOF"
          rh.printSysLog("Invoking: /sbin/fdsik " + device +
              " << EOF\\nd\\nw\\nEOF ")
          try:
              out = subprocess.check_output(cmd,
                  stderr=subprocess.STDOUT,
                  close_fds=True,
                  shell=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, cmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, cmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0 and diskType == "9336":
          # Prepare the partition with fdisk
          cmd = "sudo /sbin/fdisk " + device + " << EOF\nn\np\n1\n\n\nw\nEOF"
          rh.printSysLog("Invoking: sudo /sbin/fdisk " + device +
              " << EOF\\nn\\np\\n1\\n\\n\\nw\\nEOF")
          try:
              out = subprocess.check_output(cmd,
                  stderr=subprocess.STDOUT,
                  close_fds=True,
                  shell=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, cmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, cmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0:
          # Settle the devices so we can do the partition.
          strCmd = ("which udevadm &> /dev/null && " +
              "udevadm settle || udevsettle")
          rh.printSysLog("Invoking: " + strCmd)
          try:
              subprocess.check_output(
                  strCmd,
                  stderr=subprocess.STDOUT,
                  close_fds=True,
                  shell=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              strCmd = " ".join(cmd)
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      if results['overallRC'] == 0:
          # Install the file system into the disk.
          device = device + "1"       # Point to first partition
          if fileSystem != 'swap':
              if fileSystem == 'xfs':
                  cmd = ["sudo", "mkfs.xfs", "-f", device]
              else:
                  cmd = ["sudo", "mkfs", "-F", "-t", fileSystem, device]
              strCmd = ' '.join(cmd)
              rh.printSysLog("Invoking: " + strCmd)
              try:
                  out = subprocess.check_output(cmd,
                      stderr=subprocess.STDOUT, close_fds=True)
                  if isinstance(out, bytes):
                      out = bytes.decode(out)
                  rh.printLn("N", "File system: " + fileSystem +
                      " is installed.")
              except CalledProcessError as e:
                  rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                      e.returncode, e.output))
                  results = msgs.msg['0415'][0]
                  results['rs'] = e.returncode
                  rh.updateResults(results)
              except Exception as e:
                  # All other exceptions.
                  rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                      type(e).__name__, str(e)))
                  results = msgs.msg['0421'][0]
                  rh.updateResults(results)
          else:
              rh.printLn("N", "File system type is swap. No need to install " +
                  "a filesystem.")
  
      if diskAccessed:
          # Give up the disk.
          cmd = ["sudo", "/opt/zthin/bin/offlinediskanddetach",
                 rh.userid,
                 vaddr]
          strCmd = ' '.join(cmd)
          rh.printSysLog("Invoking: " + strCmd)
          try:
              out = subprocess.check_output(cmd, close_fds=True)
              if isinstance(out, bytes):
                  out = bytes.decode(out)
          except CalledProcessError as e:
              rh.printLn("ES", msgs.msg['0415'][1] % (modId, strCmd,
                  e.returncode, e.output))
              results = msgs.msg['0415'][0]
              results['rs'] = e.returncode
              rh.updateResults(results)
          except Exception as e:
              # All other exceptions.
              rh.printLn("ES", msgs.msg['0421'][1] % (modId, strCmd,
                  type(e).__name__, str(e)))
              results = msgs.msg['0421'][0]
              rh.updateResults(results)
  
      rh.printSysLog("Exit vmUtils.installFS, rc: " + str(results['rc']))
      return results