docs: def eval_master_func(opts):
      '''
      Evaluate master function if master type is 'func'
      and save it result in opts['master']
      '''
      if '__master_func_evaluated' not in opts:
          # split module and function and try loading the module
          mod_fun = opts['master']
          mod, fun = mod_fun.split('.')
          try:
              master_mod = salt.loader.raw_mod(opts, mod, fun)
              if not master_mod:
                  raise KeyError
              # we take whatever the module returns as master address
              opts['master'] = master_mod[mod_fun]()
              # Check for valid types
              if not isinstance(opts['master'], (six.string_types, list)):
                  raise TypeError
              opts['__master_func_evaluated'] = True
          except KeyError:
              log.error('Failed to load module %s', mod_fun)
              sys.exit(salt.defaults.exitcodes.EX_GENERIC)
          except TypeError:
              log.error('%s returned from %s is not a string', opts['master'], mod_fun)
              sys.exit(salt.defaults.exitcodes.EX_GENERIC)
          log.info('Evaluated master from module: %s', mod_fun)