@@ -103,7 +103,46 @@ def build_client
103103 @client
104104 end
105105
106+ def wait_for_install_ok
107+ require 'uri'
108+ require 'json'
109+ require 'net/http'
110+ retries ||= @resource [ :retries ]
111+ retry_timeout = @resource [ :retry_timeout ]
112+ host = 'http://localhost:4502'
113+ path = '/system/sling/monitoring/mbeans/org/apache/sling/installer/Installer/Sling+OSGi+Installer.json'
114+ uri = URI . parse ( host + path )
115+ request = Net ::HTTP ::Get . new ( uri )
116+ request . basic_auth ( @resource [ :username ] , @resource [ :password ] )
117+
118+ # try http get of Sling+OSGi+Installer info...
119+ # retry untill http 200 or Timeout
120+ # check untill "Active":false and "ActiveResourceCount":0 or untill Timeout
121+ begin
122+ response = Net ::HTTP . start ( uri . hostname , uri . port , use_ssl : uri . scheme == 'https' ) do |http |
123+ http . request ( request )
124+ end
125+ data = JSON . parse ( response . body )
126+ # Maybe we will need to check for more than 1 ok result
127+ # when installing some packages can trigger install of sub-packages...
128+ if data [ 'Active' ] == true || data [ 'ActiveResourceCount' ] != 0
129+ raise "Active: #{ data [ 'Active' ] } (req: false), ActiveResourceCount: #{ data [ 'ActiveResourceCount' ] } (req: 0)"
130+ end
131+ rescue Errno ::EADDRNOTAVAIL , JSON ::ParserError , RuntimeError => e
132+ Puppet . info ( "wait_for_install_ok FAIL for Aem_crx_package[#{ @resource [ :pkg ] } ]: #{ e . class } : #{ e . message } :" )
133+ will_retry = ( retries -= 1 ) >= 0
134+ if will_retry
135+ Puppet . debug ( "Waiting #{ retry_timeout } seconds before retrying installer state query" )
136+ sleep retry_timeout
137+ Puppet . debug ( "Retrying installer state query; remaining retries: #{ retries } " )
138+ retry
139+ end
140+ raise
141+ end
142+ end
143+
106144 def find_package
145+ wait_for_install_ok
107146 client = build_client
108147
109148 path = "/etc/packages/#{ @resource [ :group ] } /#{ @resource [ :pkg ] } -.zip"
@@ -145,22 +184,26 @@ def find_version(ary)
145184 end
146185
147186 def upload_package ( install = false )
187+ wait_for_install_ok
148188 client = build_client
149189 file = File . new ( @resource [ :source ] )
150190 client . service_post ( file , install : install )
151191 end
152192
153193 def install_package
194+ wait_for_install_ok
154195 client = build_client
155196 client . service_exec ( 'install' , @resource [ :pkg ] , @resource [ :group ] , @resource [ :version ] )
156197 end
157198
158199 def uninstall_package
200+ wait_for_install_ok
159201 client = build_client
160202 client . service_exec ( 'uninstall' , @resource [ :pkg ] , @resource [ :group ] , @resource [ :version ] )
161203 end
162204
163205 def remove_package
206+ wait_for_install_ok
164207 client = build_client
165208 client . service_exec ( 'delete' , @resource [ :pkg ] , @resource [ :group ] , @resource [ :version ] )
166209 end
0 commit comments