code: func (m *Meta) Operation(b backend.Backend) *backend.Operation {
  	schema := b.ConfigSchema()
  	workspace := m.Workspace()
  	planOutBackend, err := m.backendState.ForPlan(schema, workspace)
  	if err != nil {
  		// Always indicates an implementation error in practice, because
  		// errors here indicate invalid encoding of the backend configuration
  		// in memory, and we should always have validated that by the time
  		// we get here.
  		panic(fmt.Sprintf("failed to encode backend configuration for plan: %s", err))
  	}
  
  	return &backend.Operation{
  		PlanOutBackend:   planOutBackend,
  		Parallelism:      m.parallelism,
  		Targets:          m.targets,
  		UIIn:             m.UIInput(),
  		UIOut:            m.Ui,
  		Workspace:        workspace,
  		LockState:        m.stateLock,
  		StateLockTimeout: m.stateLockTimeout,
  	}
  }
docs: // Operation initializes a new backend.Operation struct.
  //
  // This prepares the operation. After calling this, the caller is expected
  // to modify fields of the operation such as Sequence to specify what will
  // be called.