github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/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  // IsPoststopTask returns true if this task is a poststop task in its task group.
    32  func (tr *TaskRunner) IsPoststopTask() bool {
    33  	return tr.Task().Lifecycle != nil && tr.Task().Lifecycle.Hook == structs.TaskLifecycleHookPoststop
    34  }
    35  
    36  func (tr *TaskRunner) Task() *structs.Task {
    37  	tr.taskLock.RLock()
    38  	defer tr.taskLock.RUnlock()
    39  	return tr.task
    40  }
    41  
    42  func (tr *TaskRunner) TaskState() *structs.TaskState {
    43  	tr.stateLock.Lock()
    44  	defer tr.stateLock.Unlock()
    45  	return tr.state.Copy()
    46  }
    47  
    48  func (tr *TaskRunner) getVaultToken() string {
    49  	tr.vaultTokenLock.Lock()
    50  	defer tr.vaultTokenLock.Unlock()
    51  	return tr.vaultToken
    52  }
    53  
    54  // setVaultToken updates the vault token on the task runner as well as in the
    55  // task's environment. These two places must be set atomically to avoid a task
    56  // seeing a different token on the task runner and in its environment.
    57  func (tr *TaskRunner) setVaultToken(token string) {
    58  	tr.vaultTokenLock.Lock()
    59  	defer tr.vaultTokenLock.Unlock()
    60  
    61  	// Update the Vault token on the runner
    62  	tr.vaultToken = token
    63  
    64  	// Update the task's environment
    65  	taskNamespace := tr.task.Vault.Namespace
    66  
    67  	ns := tr.clientConfig.VaultConfig.Namespace
    68  	if taskNamespace != "" {
    69  		ns = taskNamespace
    70  	}
    71  	tr.envBuilder.SetVaultToken(token, ns, tr.task.Vault.Env)
    72  }
    73  
    74  // getDriverHandle returns a driver handle.
    75  func (tr *TaskRunner) getDriverHandle() *DriverHandle {
    76  	tr.handleLock.Lock()
    77  	defer tr.handleLock.Unlock()
    78  	return tr.handle
    79  }
    80  
    81  // setDriverHandle sets the driver handle and updates the driver network in the
    82  // task's environment.
    83  func (tr *TaskRunner) setDriverHandle(handle *DriverHandle) {
    84  	tr.handleLock.Lock()
    85  	defer tr.handleLock.Unlock()
    86  	tr.handle = handle
    87  
    88  	// Update the environment's driver network
    89  	tr.envBuilder.SetDriverNetwork(handle.net)
    90  }
    91  
    92  func (tr *TaskRunner) clearDriverHandle() {
    93  	tr.handleLock.Lock()
    94  	defer tr.handleLock.Unlock()
    95  	if tr.handle != nil {
    96  		tr.driver.DestroyTask(tr.handle.ID(), true)
    97  	}
    98  	tr.handle = nil
    99  }
   100  
   101  // setKillErr stores any error that arouse while killing the task
   102  func (tr *TaskRunner) setKillErr(err error) {
   103  	tr.killErrLock.Lock()
   104  	defer tr.killErrLock.Unlock()
   105  	tr.killErr = err
   106  }
   107  
   108  // getKillErr returns any error that arouse while killing the task
   109  func (tr *TaskRunner) getKillErr() error {
   110  	tr.killErrLock.Lock()
   111  	defer tr.killErrLock.Unlock()
   112  	return tr.killErr
   113  }
   114  
   115  // hookState returns the state for the given hook or nil if no state is
   116  // persisted for the hook.
   117  func (tr *TaskRunner) hookState(name string) *state.HookState {
   118  	tr.stateLock.RLock()
   119  	defer tr.stateLock.RUnlock()
   120  
   121  	var s *state.HookState
   122  	if tr.localState.Hooks != nil {
   123  		s = tr.localState.Hooks[name].Copy()
   124  	}
   125  	return s
   126  }