Class: Lono::Sets::Status::Instances
- Inherits:
-
Object
- Object
- Lono::Sets::Status::Instances
show all
- Includes:
- AwsServices, TimeSpent
- Defined in:
- lib/lono/sets/status/instances.rb
Instance Method Summary
collapse
Methods included from TimeSpent
#show_time_spent
#pretty_time
#cfn, #ec2, #iam, #s3, #s3_presigner, #s3_resource, #sts
#rollback_complete?, #testing_update?
#find_stack_set, #stack_set_exists?
#find_stack, #stack_exists?
Constructor Details
#initialize(options = {}) ⇒ Instances
Returns a new instance of Instances.
6
7
8
9
10
|
# File 'lib/lono/sets/status/instances.rb', line 6
def initialize(options={})
@options = options
@stack, @operation_id = options[:stack], options[:operation_id]
@show_time_spent = options[:show_time_spent].nil? ? true : options[:show_time_spent]
end
|
Instance Method Details
#completed?(status) ⇒ Boolean
describe_stack_set_operation stack_set_operation.status is one of RUNNING, SUCCEEDED, FAILED, STOPPING, STOPPED
67
68
69
70
|
# File 'lib/lono/sets/status/instances.rb', line 67
def completed?(status)
completed_statuses = %w[SUCCEEDED FAILED STOPPED]
completed_statuses.include?(status)
end
|
#instances ⇒ Object
81
82
83
|
# File 'lib/lono/sets/status/instances.rb', line 81
def instances
stack_instances.map { |stack_instance| Instance.new(stack_instance) }
end
|
#latest_operation_id ⇒ Object
103
104
105
106
107
108
109
|
# File 'lib/lono/sets/status/instances.rb', line 103
def latest_operation_id
resp = cfn.list_stack_set_operations(
stack_set_name: @stack,
max_results: 1,
)
resp.summaries.first.operation_id
end
|
#operation_id ⇒ Object
99
100
101
|
# File 'lib/lono/sets/status/instances.rb', line 99
def operation_id
@operation_id ||= latest_operation_id
end
|
#show ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/lono/sets/status/instances.rb', line 22
def show
if stack_instances.empty?
puts <<~EOL
There are 0 stack instances associated with the #{@stack} stack set. Add files
Add accounts and regions configs use `lono sets instances sync` to add stack instances.
EOL
return
end
with_instances do |instance|
Thread.new { instance.show }
end.map(&:join)
wait_until_stack_set_operation_complete
end
|
#stack_instances ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/lono/sets/status/instances.rb', line 85
def stack_instances
resp = cfn.list_stack_instances(stack_set_name: @stack)
summaries = resp.summaries
filter = @options[:filter] return summaries unless filter
summaries.reject do |s|
intersect = [[s.account, s.region]] & filter
intersect.empty?
end
end
|
#wait(to = "completed") ⇒ Object
12
13
14
15
16
17
18
19
20
|
# File 'lib/lono/sets/status/instances.rb', line 12
def wait(to="completed")
puts "Stack Instance statuses... (takes a while)"
wait_until_outdated if @options[:start_on_outdated]
with_instances do |instance|
Thread.new { instance.tail(to) }
end.map(&:join)
wait_until_stack_set_operation_complete
end
|
#wait_until_outdated ⇒ Object
If we dont wait until OUTDATED, during a ‘lono sets deploy` it’ll immediately think that the instance statuses are done
73
74
75
76
77
78
79
|
# File 'lib/lono/sets/status/instances.rb', line 73
def wait_until_outdated
outdated = false
until outdated
outdated = stack_instances.detect { |stack_instance| stack_instance.status == "OUTDATED" }
sleep 5
end
end
|
#wait_until_stack_set_operation_complete ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/lono/sets/status/instances.rb', line 45
def wait_until_stack_set_operation_complete
status, stack_set_operation = nil, nil
until completed?(status)
resp = cfn.describe_stack_set_operation(
stack_set_name: @stack,
operation_id: operation_id,
)
stack_set_operation = resp.stack_set_operation
status = stack_set_operation.status
unless completed?(status)
sleep 5
end
end
if @show_time_spent show_time_spent(stack_set_operation)
puts "Stack set operation completed."
end
end
|
#with_instances ⇒ Object
38
39
40
41
42
43
|
# File 'lib/lono/sets/status/instances.rb', line 38
def with_instances
stack_instances.map do |stack_instance|
instance = Instance.new(stack_instance)
yield(instance)
end
end
|