@@ -48,7 +48,8 @@ def call(params)
4848 domain_name = params . organization || params . domain
4949 fail "Either organisation or domain has to be specified in params" unless domain_name
5050 domain = client . domain ( domain_name ) || fail ( "Invalid domain name specified - #{ domain_name } " )
51-
51+ error_message = nil
52+ invalid_client_ids = [ ]
5253 begin
5354 results = params . segments . map do |segment |
5455 segment_object = domain . segments ( segment . segment_id , data_product )
@@ -57,33 +58,53 @@ def call(params)
5758 end
5859
5960 unless tmp . empty?
60- synchronize_projects << {
61+ synchronize_project = {
6162 segment_id : segment . segment_id ,
6263 from : segment . development_pid ,
6364 to : tmp . map do |entry |
6465 unless entry [ :project_uri ]
65- raise "Provisioning project for client id #{ entry [ :id ] } has error: #{ entry [ :error ] } "
66+ error_message = "There was error during provisioning clients: #{ entry [ :error ] } " unless error_message
67+ invalid_client_ids << entry [ :id ]
68+ next
6669 end
6770 {
6871 pid : entry [ :project_uri ] . split ( '/' ) . last ,
6972 client_id : entry [ :id ]
7073 }
71- end
74+ end . compact
7275 }
7376 end
77+
78+ synchronize_projects << synchronize_project unless synchronize_project [ :to ] . empty?
79+
80+ if error_message
81+ params . gdc_logger . debug "#{ error_message } . Purge all invalid clients now ..."
82+ deleted_client_ids = [ ]
83+
84+ segment_object . clients . map do |segment_client |
85+ project = segment_client . project
86+ if ( project . nil? || project . deleted? )
87+ client_id = segment_client . client_id
88+ if invalid_client_ids . include? ( client_id )
89+ segment_client . delete
90+ deleted_client_ids << client_id
91+ end
92+ end
93+ end
94+
95+ params . gdc_logger . debug "Deleted clients: #{ deleted_client_ids . join ( ', ' ) } "
96+ raise error_message unless error_message [ 'TooManyProjectsCreatedException' ] || error_message [ 'Max number registered projects' ]
97+ break tmp
98+ end
7499
75100 tmp
76101 end
77102 rescue => e
78- params . gdc_logger . error "Problem occurs when provisioning clients. Purge all invalid clients now ..."
79- res = LCM2 . run_action PurgeClients , params
80- params . gdc_logger . debug "Purge clients result: #{ res } "
81- deleted_client_ids = res [ :results ] . select { |r | r [ :status ] == 'purged' } . map { |r | r [ :client_id ] }
82- params . gdc_logger . error "Deleted clients: #{ deleted_client_ids . join ( ', ' ) } "
103+ params . gdc_logger . error "Problem occurs when provisioning clients."
83104 raise e
84105 end
85106
86- results . flatten!
107+ results . flatten! if results
87108
88109 # Return results
89110 {
0 commit comments