code: def _expand_parameters(specification, parameters, original=None):
      
      expanded_specification = deepcopy(specification)
  
      try:
          for step_num, step in enumerate(expanded_specification['steps']):
              current_step = expanded_specification['steps'][step_num]
              for command_num, command in enumerate(step['commands']):
                  current_step['commands'][command_num] = \
                      Template(command).substitute(parameters)
          # if call is done from client, original==True and original
          # specifications withtout applied parameters are returned.
          if original:
              return specification
          else:
              return expanded_specification
      except KeyError as e:
          raise ValidationError('Workflow parameter(s) could not '
                                'be expanded. Please take a look '
                                'to {params}'.format(params=str(e)))
docs: Expand parameters inside comands for Serial workflow specifications.
  
      :param specification: Full valid Serial workflow specification.
      :param parameters: Parameters to be extended on a Serial specification.
      :param original: Flag which, determins type of specifications to return.
      :returns: If 'original' parameter is set, a copy of the specification
          whithout expanded parametrers will be returned. If 'original' is not
          set, a copy of the specification with expanded parameters (all $varname
          and ${varname} will be expanded with their value). Otherwise an error
          will be thrown if the parameters can not be expanded.
      :raises: jsonschema.ValidationError