Skip to content

Commit f29031d

Browse files
committed
Wait for installer state to be ok before continuing.
1 parent 41d6a3b commit f29031d

File tree

1 file changed

+43
-0
lines changed
  • lib/puppet/provider/aem_crx_package

1 file changed

+43
-0
lines changed

lib/puppet/provider/aem_crx_package/ruby.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)