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 }