summaryrefslogtreecommitdiff
path: root/vendor/github.com/hashicorp/terraform/terraform/hook_stop.go
blob: 104d0098a1f6863c7ad3b3aa92431c0d4c839a71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package terraform

import (
	"sync/atomic"
)

// stopHook is a private Hook implementation that Terraform uses to
// signal when to stop or cancel actions.
type stopHook struct {
	stop uint32
}

func (h *stopHook) PreApply(*InstanceInfo, *InstanceState, *InstanceDiff) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostApply(*InstanceInfo, *InstanceState, error) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PreDiff(*InstanceInfo, *InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostDiff(*InstanceInfo, *InstanceDiff) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PreProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PreProvision(*InstanceInfo, string) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostProvision(*InstanceInfo, string, error) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) ProvisionOutput(*InstanceInfo, string, string) {
}

func (h *stopHook) PreRefresh(*InstanceInfo, *InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostRefresh(*InstanceInfo, *InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PreImportState(*InstanceInfo, string) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostImportState(*InstanceInfo, []*InstanceState) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) PostStateUpdate(*State) (HookAction, error) {
	return h.hook()
}

func (h *stopHook) hook() (HookAction, error) {
	if h.Stopped() {
		return HookActionHalt, nil
	}

	return HookActionContinue, nil
}

// reset should be called within the lock context
func (h *stopHook) Reset() {
	atomic.StoreUint32(&h.stop, 0)
}

func (h *stopHook) Stop() {
	atomic.StoreUint32(&h.stop, 1)
}

func (h *stopHook) Stopped() bool {
	return atomic.LoadUint32(&h.stop) == 1
}