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
|
# File 'lib/eb_deployer/deployment_strategy/blue_green.rb', line 17
def deploy(version_label, env_settings, inactive_settings=[])
if !ebenvs.any?(&method(:active_ebenv?))
ebenv('a', @component.cname_prefix).
deploy(version_label, env_settings)
return
end
active_ebenv = ebenvs.detect(&method(:active_ebenv?))
inactive_ebenv = ebenvs.reject(&method(:active_ebenv?)).first
inactive_ebenv.deploy(version_label, env_settings)
active_ebenv.swap_cname_with(inactive_ebenv)
blue_green_terminate_inactive = @create_opts[:blue_green_terminate_inactive]
blue_green_terminate_inactive_wait = @create_opts[:blue_green_terminate_inactive_wait]
blue_green_terminate_inactive_sleep = @create_opts[:blue_green_terminate_inactive_sleep]
if blue_green_terminate_inactive
active_ebenv.log("Waiting #{blue_green_terminate_inactive_wait}s before terminating environment...")
count = 0
loop do
break if count >= blue_green_terminate_inactive_wait or inactive_ebenv.health_state != 'Green'
sleep blue_green_terminate_inactive_sleep
count += blue_green_terminate_inactive_sleep
end
if inactive_ebenv.health_state == 'Green'
active_ebenv.log("Active environment healthy, terminating inactive (black) environment")
active_ebenv.terminate
else
active_ebenv.log("Active environment changed state to unhealthy. Existing (black) environment will not be terminated")
end
end
unless inactive_settings.empty? || blue_green_terminate_inactive
active_ebenv.log("applying inactive settings...")
active_ebenv.apply_settings(inactive_settings)
end
end
|