code: def tree(self, path):
          '''
          .. versionadded:: 2014.7.0
  
          Recurse through etcd and return all values
          '''
          ret = {}
          try:
              items = self.read(path)
          except (etcd.EtcdKeyNotFound, ValueError):
              return None
          except etcd.EtcdConnectionFailed:
              log.error("etcd: failed to perform 'tree' operation on path %s due to connection error", path)
              return None
  
          for item in items.children:
              comps = six.text_type(item.key).split('/')
              if item.dir is True:
                  if item.key == path:
                      continue
                  ret[comps[-1]] = self.tree(item.key)
              else:
                  ret[comps[-1]] = item.value
          return ref tree(self, path):
          '''
          .. versionadded:: 2014.7.0
  
          Recurse through etcd and return all values
          '''
          ret = {}
          try:
              items = self.read(path)
          except (etcd.EtcdKeyNotFound, ValueError):
              return None
          except etcd.EtcdConnectionFailed:
              log.error("etcd: failed to perform 'tree' operation on path %s due to connection error", path)
              return None
  
          for item in items.children:
              comps = six.text_type(item.key).split('/')
              if item.dir is True:
                  if item.key == path:
                      continue
                  ret[comps[-1]] = self.tree(item.key)
              else:
                  ret[comps[-1]] = item.value
          return ret
docs: .. versionadded:: 2014.7.0
  
          Recurse through etcd and return all values