@@ -10,26 +10,104 @@ defmodule Makina.Applications do
1010 alias Makina.Docker
1111 alias Makina.IO
1212
13- def deploy_standalone_applications ( servers , applications )
13+ @ doc """
14+ Deploys a list of application on a server or a list of servers
15+
16+ If a list of servers is provided the function iterates the list and
17+ connects to the server before deploying the application.
18+ Connection is established before triggering applications deployment
19+ and disconnection happens when all applications have been deployed.
20+ """
21+ def deploy_applications ( servers , applications )
1422 when is_list ( servers ) and is_list ( applications ) do
1523 for server <- servers do
1624 server = Servers . connect_to_server ( server )
17- deployment_result = deploy_applications_on_server ( server , applications )
25+ deployment_result = deploy_applications ( server , applications )
1826
1927 Servers . disconnect_from_server ( server )
2028
2129 deployment_result
2230 end
2331 end
2432
25- def deploy_applications_on_server ( % Server { } = server , applications )
33+ def deploy_applications ( % Server { } = server , applications )
2634 when is_list ( applications ) do
2735 for app <- applications do
28- do_deploy_application ( server , app )
36+ deploy_application ( server , app )
2937 end
3038 end
3139
32- defp do_deploy_application ( % Server { } = server , % Application { } = app ) do
40+ @ doc """
41+ Stops all provided applications in all servers
42+
43+ If `servers` is a list then the function iterates on them and attempt to connect
44+ to the server.
45+ Servers and applications are processed sequentially.
46+ """
47+ def stop_applications ( servers , applications ) when is_list ( servers ) and is_list ( applications ) do
48+ for server <- servers do
49+ server = Servers . connect_to_server ( server )
50+ deployment_result = stop_applications ( server , applications )
51+
52+ Servers . disconnect_from_server ( server )
53+
54+ deployment_result
55+ end
56+ end
57+
58+ def stop_applications ( % Server { } = server , applications ) when is_list ( applications ) do
59+ for app <- applications do
60+ stop_application ( server , app )
61+ end
62+ end
63+
64+ @ doc """
65+ Deploys an application on a specific server
66+
67+ Note: The server has to have a connection at this point.
68+ """
69+ def deploy_application ( % Server { } = server , % Application { } = app ) do
70+ if Server . connected? ( server ) do
71+ do_deploy ( server , app )
72+ else
73+ connect_and_deploy ( server , app )
74+ end
75+ end
76+
77+ @ doc """
78+ Stops an application on a given server
79+ """
80+ def stop_application ( % Server { } = server , % Application { } = app ) do
81+ if Server . connected? ( server ) do
82+ do_stop ( server , app )
83+ else
84+ connect_and_stop ( server , app )
85+ end
86+ end
87+
88+ defp do_stop ( % Server { } = server , % Application { } = app ) do
89+ IO . puts ( " Stopping \" #{ app . name } \" " )
90+
91+ Docker . stop ( server , app ) |> SSH . execute ( )
92+ end
93+
94+ defp connect_and_stop ( % Server { } = server , % Application { } = app ) do
95+ server = Servers . connect_to_server ( server )
96+ result = do_stop ( server , app )
97+ Servers . disconnect_from_server ( server )
98+
99+ result
100+ end
101+
102+ defp connect_and_deploy ( % Server { } = server , % Application { } = app ) do
103+ server = Servers . connect_to_server ( server )
104+ result = do_deploy ( server , app )
105+ Servers . disconnect_from_server ( server )
106+
107+ result
108+ end
109+
110+ def do_deploy ( % Server { } = server , % Application { } = app ) do
33111 IO . puts ( " Deploying \" #{ app . name } \" " )
34112
35113 with { :ok , _ } <- maybe_login_to_registry ( server , app ) ,
0 commit comments