github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/client/allocrunner/taskrunner/task_runner_getters.go (about)

     1  package taskrunner
     2  
     3  import (
     4  	"github.com/hashicorp/nomad/client/allocrunner/taskrunner/state"
     5  	"github.com/hashicorp/nomad/nomad/structs"
     6  )
     7  
     8  func (tr *TaskRunner) Alloc() *structs.Allocation {
     9  	tr.allocLock.Lock()
    10  	defer tr.allocLock.Unlock()
    11  	return tr.alloc
    12  }
    13  
    14  // setAlloc and task on TaskRunner
    15  func (tr *TaskRunner) setAlloc(updated *structs.Allocation, task *structs.Task) {
    16  	tr.allocLock.Lock()
    17  	defer tr.allocLock.Unlock()
    18  
    19  	tr.taskLock.Lock()
    20  	defer tr.taskLock.Unlock()
    21  
    22  	tr.alloc = updated
    23  	tr.task = task
    24  }
    25  
    26  // IsLeader returns true if this task is the leader of its task group.
    27  func (tr *TaskRunner) IsLeader() bool {
    28  	return tr.taskLeader
    29  }
    30  
    31  func (tr *TaskRunner) Task() *structs.Task {
    32  	tr.taskLock.RLock()
    33  	defer tr.taskLock.RUnlock()
    34  	return tr.task
    35  }
    36  
    37  func (tr *TaskRunner) TaskState() *structs.TaskState {
    38  	tr.stateLock.Lock()
    39  	defer tr.stateLock.Unlock()
    40  	return tr.state.Copy()
    41  }
    42  
    43  func (tr *TaskRunner) getVaultToken() string {
    44  	tr.vaultTokenLock.Lock()
    45  	defer tr.vaultTokenLock.Unlock()
    46  	return tr.vaultToken
    47  }
    48  
    49  // setVaultToken updates the vault token on the task runner as well as in the
    50  // task's environment. These two places must be set atomically to avoid a task
    51  // seeing a different token on the task runner and in its environment.
    52  func (tr *TaskRunner) setVaultToken(token string) {
    53  	tr.vaultTokenLock.Lock()
    54  	defer tr.vaultTokenLock.Unlock()
    55  
    56  	// Update the Vault token on the runner
    57  	tr.vaultToken = token
    58  
    59  	// Update the task's environment
    60  	tr.envBuilder.SetVaultToken(token, tr.clientConfig.VaultConfig.Namespace, tr.task.Vault.Env)
    61  }
    62  
    63  // getDriverHandle returns a driver handle.
    64  func (tr *TaskRunner) getDriverHandle() *DriverHandle {
    65  	tr.handleLock.Lock()
    66  	defer tr.handleLock.Unlock()
    67  	return tr.handle
    68  }
    69  
    70  // setDriverHandle sets the driver handle and updates the driver network in the
    71  // task's environment.
    72  func (tr *TaskRunner) setDriverHandle(handle *DriverHandle) {
    73  	tr.handleLock.Lock()
    74  	defer tr.handleLock.Unlock()
    75  	tr.handle = handle
    76  
    77  	// Update the environment's driver network
    78  	tr.envBuilder.SetDriverNetwork(handle.net)
    79  }
    80  
    81  func (tr *TaskRunner) clearDriverHandle() {
    82  	tr.handleLock.Lock()
    83  	defer tr.handleLock.Unlock()
    84  	if tr.handle != nil {
    85  		tr.driver.DestroyTask(tr.handle.ID(), true)
    86  	}
    87  	tr.handle = nil
    88  }
    89  
    90  // setKillErr stores any error that arouse while killing the task
    91  func (tr *TaskRunner) setKillErr(err error) {
    92  	tr.killErrLock.Lock()
    93  	defer tr.killErrLock.Unlock()
    94  	tr.killErr = err
    95  }
    96  
    97  // getKillErr returns any error that arouse while killing the task
    98  func (tr *TaskRunner) getKillErr() error {
    99  	tr.killErrLock.Lock()
   100  	defer tr.killErrLock.Unlock()
   101  	return tr.killErr
   102  }
   103  
   104  // hookState returns the state for the given hook or nil if no state is
   105  // persisted for the hook.
   106  func (tr *TaskRunner) hookState(name string) *state.HookState {
   107  	tr.stateLock.RLock()
   108  	defer tr.stateLock.RUnlock()
   109  
   110  	var s *state.HookState
   111  	if tr.localState.Hooks != nil {
   112  		s = tr.localState.Hooks[name].Copy()
   113  	}
   114  	return s
   115  }