@@ -35,7 +35,7 @@ def get_client():
35
35
return client
36
36
37
37
def create_application (client , user , application , async = True ):
38
- if get_application_status (client , user , application ) != applications .ApplicationStatus .DELETED :
38
+ if get_application_status (client , user , application ) > applications .ApplicationStatus .DELETED :
39
39
raise RuntimeError ("Application already installed or updating, user: {}, application: {}" .format (user .login , application .application_id ))
40
40
name = applications .get_application_name (user , application )
41
41
@@ -79,35 +79,43 @@ def run_service(user, application, service, *arguments, **environment):
79
79
80
80
def get_application_status (client , user , application ):
81
81
container = get_main_container (client , user , application )
82
- return _get_application_status (user , application , container )
82
+ volumes = get_application_volumes (client , user , application )
83
+ return _get_application_status (user , application , container , volumes )
83
84
84
85
def get_application_statuses (client , user ):
85
86
apps = applications .get_applications ()
86
87
application_statuses = []
87
88
container_name = applications .get_application_name (user , None ) + ".*_main_1"
88
89
containers = get_containers (client , container_name )
89
- for container in containers :
90
+
91
+ def _app_id (container ):
90
92
user_application_id = _get_user_application_id (container )
91
93
if not user_application_id :
92
- continue
93
- login , application_id = user_application_id
94
+ return None
95
+ _ , application_id = user_application_id
96
+ return application_id
94
97
95
- application = apps .get (application_id )
96
- if not application :
98
+ app_id_to_container = {_app_id (container ): container for container in containers }
99
+ for app_id , application in apps .items ():
100
+ if not app_id or app_id [0 ] == '_' :
97
101
continue
98
-
99
- status = _get_application_status (user , application , container )
102
+ container = app_id_to_container .get (app_id )
103
+ volumes = get_application_volumes (client , user , application )
104
+ status = _get_application_status (user , application , container , volumes )
100
105
application_statuses .append ((application , status ))
106
+
101
107
return application_statuses
102
108
103
- def _get_application_status (user , application , container ):
109
+ def _get_application_status (user , application , container , volumes = None ):
104
110
name = applications .get_application_name (user , application )
105
111
if queue .task_exists (name ):
106
112
return applications .ApplicationStatus .UPDATING
107
113
if container :
108
114
return applications .ApplicationStatus .CREATED
109
- else :
115
+ if volumes and any ( vol is not None for vol in volumes . values ()) :
110
116
return applications .ApplicationStatus .DELETED
117
+ else :
118
+ return applications .ApplicationStatus .NEVER_STARTED
111
119
112
120
def get_all_running_applications ():
113
121
apps = applications .get_applications ()
@@ -167,6 +175,20 @@ def get_main_container(client, user, application):
167
175
else :
168
176
return None
169
177
178
+ def get_volumes (client , name = "" ):
179
+ return {volume .name : volume for volume in client .volumes .list (filters = {"name" : name })}
180
+
181
+ def get_application_volumes (client , user , application ):
182
+ application_volume_names = applications .get_application_volume_names (user , application )
183
+
184
+ application_name = applications .get_application_name (user , application )
185
+ docker_volumes = get_volumes (client , application_name )
186
+ application_volumes = {
187
+ application_volume : docker_volumes .get (application_volume )
188
+ for application_volume in application_volume_names
189
+ }
190
+ return application_volumes
191
+
170
192
def wait_until_up (url , timeout = APPLICATION_CREATE_TIMEOUT ):
171
193
start_time = time .time ()
172
194
while True :
0 commit comments