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 }