docs: def prompt_cfg(self, msg, sec, name, ispass=False):
  		"""Prompt for a config value, optionally saving it to the user-level
  		cfg. Only runs if we are in an interactive mode.
  
  		@param msg:    Message to display to user.
  		@param sec:    Section of config to add to.
  		@param name:   Config item name.
  		@param ispass: If True, hide the input from the terminal.
  		               Default: False.
  
  		@type msg:     string
  		@type sec:     string
  		@type name:    string
  		@type ispass:  boolean
  
  		@return: the value entered by the user
  		@rtype:  string
  		"""
  		shutit_global.shutit_global_object.yield_to_draw()
  		cfgstr        = '[%s]/%s' % (sec, name)
  		config_parser = self.config_parser
  		usercfg       = os.path.join(self.host['shutit_path'], 'config')
  
  		self.log('\nPROMPTING FOR CONFIG: %s' % (cfgstr,),transient=True,level=logging.INFO)
  		self.log('\n' + msg + '\n',transient=True,level=logging.INFO)
  
  		if not shutit_global.shutit_global_object.determine_interactive():
  			self.fail('ShutIt is not in a terminal so cannot prompt for values.', throw_exception=False) # pragma: no cover
  
  		if config_parser.has_option(sec, name):
  			whereset = config_parser.whereset(sec, name)
  			if usercfg == whereset:
  				self.fail(cfgstr + ' has already been set in the user config, edit ' + usercfg + ' directly to change it', throw_exception=False) # pragma: no cover
  			for subcp, filename, _ in reversed(config_parser.layers):
  				# Is the config file loaded after the user config file?
  				if filename == whereset:
  					self.fail(cfgstr + ' is being set in ' + filename + ', unable to override on a user config level', throw_exception=False) # pragma: no cover
  				elif filename == usercfg:
  					break
  		else:
  			# The item is not currently set so we're fine to do so
  			pass
  		if ispass:
  			val = getpass.getpass('>> ')
  		else:
  			val = shutit_util.util_raw_input(prompt='>> ')
  		is_excluded = (
  			config_parser.has_option('save_exclude', sec) and
  			name in config_parser.get('save_exclude', sec).split()
  		)
  		# TODO: ideally we would remember the prompted config item for this invocation of shutit
  		if not is_excluded:
  			usercp = [
  				subcp for subcp, filename, _ in config_parser.layers
  				if filename == usercfg
  			][0]
  			if shutit_util.util_raw_input(prompt=shutit_util.colorise('32', 'Do you want to save this to your user settings? y/n: '),default='y') == 'y':
  				sec_toset, name_toset, val_toset = sec, name, val
  			else:
  				# Never save it
  				if config_parser.has_option('save_exclude', sec):
  					excluded = config_parser.get('save_exclude', sec).split()
  				else:
  					excluded = []
  				excluded.append(name)
  				excluded = ' '.join(excluded)
  				sec_toset, name_toset, val_toset = 'save_exclude', sec, excluded
  			if not usercp.has_section(sec_toset):
  				usercp.add_section(sec_toset)
  			usercp.set(sec_toset, name_toset, val_toset)
  			usercp.write(open(usercfg, 'w'))
  			config_parser.reload()
  		return val