code: def add_source(self, label, source_type, **kwargs):
          
          self._sources[label] = get_source(label, source_type, **kwargs)
docs: Add a source to the spec.
  
          Sources should have a unique label. This will help tracing where your
          configurations are coming from if you turn up the log-level.
  
          The keyword arguments are significant. Different sources require
          different keyword arguments. Required keys for each source_type are
          listed below, for a detailed list of all possible arguments, see the
          individual source's documentation.
  
          source_type: dict
              required keyword arguments:
                  - data - A dictionary
  
          source_type: environment
              No required keyword arguments.
  
          source_type: etcd
              required keyword arguments:
                  - client - A client from the python-etcd package.
  
          source_type: json
              required keyword arguments:
                  - filename - A JSON file.
                  - data - A string representation of JSON
  
          source_type: kubernetes
              required keyword arguments:
                  - client - A client from the kubernetes package
                  - name - The name of the ConfigMap to load
  
          source_type: yaml
              required keyword arguments:
                  - filename - A YAML file.
  
          Args:
              label (str): A label for the source.
              source_type (str): A source type, available source types depend
              on the packages installed. See ``yapconf.ALL_SUPPORTED_SOURCES``
              for a complete list.