docs: def restart_on_change(restart_map, stopstart=False, restart_functions=None):
      """Restart services based on configuration files changing
  
      This function is used a decorator, for example::
  
          @restart_on_change({
              '/etc/ceph/ceph.conf': [ 'cinder-api', 'cinder-volume' ]
              '/etc/apache/sites-enabled/*': [ 'apache2' ]
              })
          def config_changed():
              pass  # your code here
  
      In this example, the cinder-api and cinder-volume services
      would be restarted if /etc/ceph/ceph.conf is changed by the
      ceph_client_changed function. The apache2 service would be
      restarted if any file matching the pattern got changed, created
      or removed. Standard wildcards are supported, see documentation
      for the 'glob' module for more information.
  
      @param restart_map: {path_file_name: [service_name, ...]
      @param stopstart: DEFAULT false; whether to stop, start OR restart
      @param restart_functions: nonstandard functions to use to restart services
                                {svc: func, ...}
      @returns result from decorated function
      """
      def wrap(f):
          @functools.wraps(f)
          def wrapped_f(*args, **kwargs):
              return restart_on_change_helper(
                  (lambda: f(*args, **kwargs)), restart_map, stopstart,
                  restart_functions)
          return wrapped_f
      return wrap