@@ -109,7 +109,7 @@ def get_cv(org_id, target_env, env_list, prior_list, promote_list):
109109
110110
111111# Promote a content view version
112- def promote (target_env , ver_list , ver_descr , ver_version , env_list , prior_list , dry_run ):
112+ def promote (target_env , ver_list , ver_descr , ver_version , env_list , prior_list , dry_run , quiet ):
113113 """Promote Content View"""
114114 target_env_id = env_list [target_env ]
115115 source_env_id = prior_list [target_env_id ]
@@ -133,41 +133,51 @@ def promote(target_env, ver_list, ver_descr, ver_version, env_list, prior_list,
133133 helpers .log_msg (msg , 'WARNING' )
134134 sys .exit (1 )
135135
136- for cvid in ver_list .keys ():
137-
138- # Check if there is a publish/promote already running on this content view
139- locked = helpers .check_running_publish (cvid , ver_descr [cvid ])
140-
141- if not locked :
142- msg = "Promoting '" + str (ver_descr [cvid ]) + "' Version " + str (ver_version [cvid ]) + \
143- " from " + prior_env + " to " + str (target_env )
144- helpers .log_msg (msg , 'INFO' )
145- print helpers .HEADER + msg + helpers .ENDC
146-
147- if not dry_run and not locked :
148- try :
149- task_id = helpers .post_json (
150- helpers .KATELLO_API + "content_view_versions/" + str (ver_list [cvid ]) + \
151- "/promote/" , json .dumps (
152- {
153- "environment_id" : target_env_id
154- }
155- ))["id" ]
156- except Warning :
157- msg = "Failed to initiate promotion of " + str (ver_descr [cvid ])
158- helpers .log_msg (msg , 'WARNING' )
159- else :
160- task_list .append (task_id )
161- ref_list [task_id ] = ver_descr [cvid ]
136+ # Break repos to promote into batches as configured in config.yml
137+ cvchunks = [ ver_list .keys ()[i :i + helpers .PROMOTEBATCH ] for i in range (0 , len (ver_list ), helpers .PROMOTEBATCH ) ]
138+
139+ # Loop through the smaller subsets of repo id's
140+ for chunk in cvchunks :
141+ for cvid in chunk :
142+
143+ # Check if there is a publish/promote already running on this content view
144+ locked = helpers .check_running_publish (cvid , ver_descr [cvid ])
145+
146+ if not locked :
147+ msg = "Promoting '" + str (ver_descr [cvid ]) + "' Version " + str (ver_version [cvid ]) + \
148+ " from " + prior_env + " to " + str (target_env )
149+ helpers .log_msg (msg , 'INFO' )
150+ print helpers .HEADER + msg + helpers .ENDC
151+
152+ if not dry_run and not locked :
153+ try :
154+ task_id = helpers .post_json (
155+ helpers .KATELLO_API + "content_view_versions/" + str (ver_list [cvid ]) + \
156+ "/promote/" , json .dumps (
157+ {
158+ "environment_id" : target_env_id
159+ }
160+ ))["id" ]
161+ except Warning :
162+ msg = "Failed to initiate promotion of " + str (ver_descr [cvid ])
163+ helpers .log_msg (msg , 'WARNING' )
164+ else :
165+ task_list .append (task_id )
166+ ref_list [task_id ] = ver_descr [cvid ]
167+
168+ # Exit in the case of a dry-run
169+ if dry_run :
170+ msg = "Dry run - not actually performing promotion"
171+ helpers .log_msg (msg , 'WARNING' )
172+ else :
173+ # Monitor the status of the promotion tasks
174+ helpers .watch_tasks (task_list , ref_list , task_name , quiet )
162175
163176 # Exit in the case of a dry-run
164177 if dry_run :
165- msg = "Dry run - not actually performing promotion"
166- helpers .log_msg (msg , 'WARNING' )
167178 sys .exit (2 )
168-
169-
170- return task_list , ref_list , task_name
179+ else :
180+ return
171181
172182
173183def main (args ):
@@ -183,7 +193,6 @@ def main(args):
183193 global vardir
184194 dir = os .path .dirname (__file__ )
185195 vardir = os .path .join (dir , 'var' )
186- # confdir = os.path.join(dir, 'config')
187196
188197 # Check for sane input
189198 parser = argparse .ArgumentParser (
@@ -242,6 +251,8 @@ def main(args):
242251 promote_list = []
243252 if not args .all :
244253 for x in helpers .CONFIG ['promotion' ]:
254+ if x == 'batch' :
255+ continue
245256 if helpers .CONFIG ['promotion' ][x ]['name' ] == target_env :
246257 promote_list = helpers .CONFIG ['promotion' ][x ]['content_views' ]
247258
@@ -264,16 +275,12 @@ def main(args):
264275 promote_list )
265276
266277 # Promote to the given environment. Returns a list of task IDs.
267- (task_list , ref_list , task_name ) = promote (target_env , ver_list , ver_descr , ver_version ,
268- env_list , prior_list , dry_run )
278+ promote (target_env , ver_list , ver_descr , ver_version , env_list , prior_list , dry_run , args .quiet )
269279
270280 # Add/Update the promotion history dictionary so we can check when we last promoted
271281 phistory [target_env ] = datetime .datetime .strftime (datetime .datetime .now (), '%Y-%m-%d' )
272282 pickle .dump (phistory , open (vardir + '/promotions.pkl' , 'wb' ))
273283
274- # Monitor the status of the promotion tasks
275- helpers .watch_tasks (task_list , ref_list , task_name , args .quiet )
276-
277284 # Exit cleanly
278285 sys .exit (0 )
279286
0 commit comments