@@ -336,7 +336,7 @@ def set_storage(instance_id, instance_name, dry_run=False):
336336 kubectl .apply (resource )
337337
338338
339- def create_ckan_admin_user (instance_id_or_name , name , email = None , password = None , dry_run = False ):
339+ def create_ckan_admin_user (instance_id_or_name , name , email = None , password = None , dry_run = False , use_paster = False ):
340340 if not email :
341341 default_root_domain = routers_manager .get_default_root_domain ()
342342 email = f'{ name } @{ instance_id_or_name } .{ default_root_domain } '
@@ -349,7 +349,21 @@ def create_ckan_admin_user(instance_id_or_name, name, email=None, password=None,
349349 'password' : password
350350 }
351351 if not dry_run :
352- deployment_manager .create_ckan_admin_user (instance_id , instance_type , instance , user )
352+ pod_name = _get_running_pod_name (instance_id )
353+ name , password , email = [user [k ] for k in ['name' , 'password' , 'email' ]]
354+ logs .info (f'Creating CKAN admin user with { name } ({ email } ) on pod { pod_name } ' )
355+
356+ if use_paster :
357+ logs .subprocess_check_call (
358+ f'echo y | kubectl -n { instance_id } exec -i { pod_name } -- ckan-paster --plugin=ckan sysadmin -c /etc/ckan/production.ini add { name } password={ password } email={ email } ' ,
359+ shell = True
360+ )
361+ else :
362+ logs .subprocess_check_call (
363+ f'echo y | kubectl -n { instance_id } exec -i { pod_name } -- ckan --config /etc/ckan/production.ini sysadmin add { name } password={ password } email={ email } ' ,
364+ shell = True
365+ )
366+
353367 return {
354368 'instance-id' : instance_id ,
355369 'instance-type' : instance_type ,
@@ -358,6 +372,84 @@ def create_ckan_admin_user(instance_id_or_name, name, email=None, password=None,
358372 }
359373
360374
375+ def delete_ckan_admin_user (instance_id_or_name , name , dry_run = False , use_paster = False ):
376+ instance_id , instance_type , instance = _get_instance_id_and_type (instance_id_or_name )
377+
378+ if not dry_run :
379+ pod_name = _get_running_pod_name (instance_id )
380+ logs .info (f'Removing CKAN admin user { name } from sys-admins' )
381+
382+ if use_paster :
383+ logs .subprocess_check_call (
384+ f'echo y | kubectl -n { instance_id } exec -i { pod_name } -- ckan-paster --plugin=ckan sysadmin -c /etc/ckan/production.ini remove { name } ' ,
385+ shell = True
386+ )
387+ else :
388+ logs .subprocess_check_call (
389+ f'echo y | kubectl -n { instance_id } exec -i { pod_name } -- ckan --config /etc/ckan/production.ini sysadmin remove { name } ' ,
390+ shell = True
391+ )
392+
393+ def run_solr_commands (instance_id_or_name , command , dataset_id = '' , dry_run = False , use_paster = False ):
394+ instance_id , instance_type , instance = _get_instance_id_and_type (instance_id_or_name )
395+
396+ if not dry_run :
397+ pod_name = _get_running_pod_name (instance_id )
398+ logs .info (f'Running Search Index { command } ' )
399+ if use_paster :
400+ answer = logs .subprocess_check_output (
401+ f'kubectl -n { instance_id } exec -i { pod_name } -- ckan-paster --plugin=ckan -c /etc/ckan/production.ini search-index { command } ' ,
402+ shell = True
403+ )
404+ for line in str (answer ).replace ('\\ r' , '\\ n' ).split ('\\ n' ):
405+ if line :
406+ logs .info (str (line ))
407+ else :
408+ answer = logs .subprocess_check_output (
409+ f'kubectl -n { instance_id } exec -i { pod_name } -- ckan --config /etc/ckan/production.ini search-index { command } { dataset_id } ' ,
410+ shell = True
411+ )
412+ for line in str (answer ).replace ('\\ r' , '\\ n' ).split ('\\ n' ):
413+ if line :
414+ logs .info (str (line ))
415+
416+
417+ def run_ckan_commands (instance_id_or_name , command , dry_run = False , use_paster = False ):
418+ instance_id , instance_type , instance = _get_instance_id_and_type (instance_id_or_name )
419+ if not dry_run :
420+ pod_name = _get_running_pod_name (instance_id )
421+ logs .info (f'Running Search Index { command } ' )
422+ if use_paster :
423+ answer = logs .subprocess_check_output (
424+ f'kubectl -n { instance_id } exec -i { pod_name } -- ckan-paster --plugin=ckan -c /etc/ckan/production.ini { command } ' ,
425+ shell = True
426+ )
427+ for line in str (answer ).replace ('\\ r' , '\\ n' ).split ('\\ n' ):
428+ if line :
429+ logs .info (str (line ))
430+ else :
431+ answer = logs .subprocess_check_output (
432+ f'kubectl -n { instance_id } exec -i { pod_name } -- ckan --config /etc/ckan/production.ini { command } ' ,
433+ shell = True
434+ )
435+ for line in str (answer ).replace ('\\ r' , '\\ n' ).split ('\\ n' ):
436+ if line :
437+ logs .info (str (line ))
438+
439+
440+ def _get_running_pod_name (instance_id ):
441+ pod_name = None
442+ while not pod_name :
443+ try :
444+ pod_name = kubectl .get_deployment_pod_name ('ckan' , instance_id , use_first_pod = True , required_phase = 'Running' )
445+ break
446+ except Exception as e :
447+ logs .warning ('Failed to find running ckan pod' , str (e ))
448+ time .sleep (20 )
449+ return pod_name
450+
451+
452+
361453def _get_instance_id_and_type (instance_id_or_name = None , instance_id = None , required = True ):
362454 if instance_id :
363455 logs .debug (f'Getting instance type using instance_id' , instance_id = instance_id )
0 commit comments