code: def nodes(self) -> List[str]:
          
          if self._scenario_version == 1 and 'range' in self._config:
              range_config = self._config['range']
  
              try:
                  start, stop = range_config['first'], range_config['last'] + 1
              except KeyError:
                  raise MissingNodesConfiguration(
                      'Setting "range" must be a dict containing keys "first" and "last",'
                      ' whose values are integers!',
                  )
  
              try:
                  template = range_config['template']
              except KeyError:
                  raise MissingNodesConfiguration(
                      'Must specify "template" setting when giving "range" setting.',
                  )
  
              return [template.format(i) for i in range(start, stop)]
          try:
              return self._config['list']
          except KeyError:
              raise MissingNodesConfiguration('Must specify nodes under "list" setting!')
docs: Return the list of nodes configured in the scenario's yaml.
  
          Should the scenario use version 1, we check if there is a 'setting'.
          If so, we derive the list of nodes from this dictionary, using its
          'first', 'last' and 'template' keys. Should any of these keys be
          missing, we throw an appropriate exception.
  
          If the scenario version is not 1, or no 'range' setting exists, we use
          the 'list' settings key and return the value. Again, should the key be
          absent, we throw an appropriate error.
  
          :raises MissingNodesConfiguration:
              if the scenario version is 1 and a 'range' key was detected, but any
              one of the keys 'first', 'last', 'template' are missing; *or* the
              scenario version is not 1 or the 'range' key and the 'list' are absent.