Bug #7365
closedIntermittent smart proxy duplicate registration error on Ubuntu 14.04
Description
Intermittently, our tests on Ubuntu 14.04 (trusty) are failing as they attempt to register a smart proxy that has already been created.
# [ INFO 2014-09-04 06:02:58 verbose] E, [2014-09-04T06:02:58.392155 #6554] ERROR -- : 422 Unprocessable Entity # [ INFO 2014-09-04 06:02:58 verbose] { # [ INFO 2014-09-04 06:02:58 verbose] "error" => { # [ INFO 2014-09-04 06:02:58 verbose] "id" => nil, # [ INFO 2014-09-04 06:02:58 verbose] "errors" => { # [ INFO 2014-09-04 06:02:58 verbose] "name" => [ # [ INFO 2014-09-04 06:02:58 verbose] [0] "has already been taken" # [ INFO 2014-09-04 06:02:58 verbose] ], # [ INFO 2014-09-04 06:02:58 verbose] "url" => [ # [ INFO 2014-09-04 06:02:58 verbose] [0] "Only one declaration of a proxy is allowed" # [ INFO 2014-09-04 06:02:58 verbose] ] # [ INFO 2014-09-04 06:02:58 verbose] }, # [ INFO 2014-09-04 06:02:58 verbose] "full_messages" => [ # [ INFO 2014-09-04 06:02:58 verbose] [0] "Name has already been taken", # [ INFO 2014-09-04 06:02:58 verbose] [1] "URL Only one declaration of a proxy is allowed" # [ INFO 2014-09-04 06:02:58 verbose] ] # [ INFO 2014-09-04 06:02:58 verbose] } # [ INFO 2014-09-04 06:02:58 verbose] } # [ERROR 2014-09-04 06:02:58 verbose] Could not set 'present' on ensure: 422 Unprocessable Entity at 12:/usr/share/foreman-installer/modules/foreman_proxy/manifests/register.pp # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/abstract_response.rb:48:in `return!' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/request.rb:230:in `process_result' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/request.rb:178:in `block in transmit' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/1.9.1/net/http.rb:746:in `start' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/request.rb:172:in `transmit' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/request.rb:64:in `execute' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/request.rb:33:in `execute' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/restclient/resource.rb:67:in `post' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/apipie_bindings/api.rb:195:in `http_call' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/apipie_bindings/api.rb:151:in `call' # [ INFO 2014-09-04 06:02:58 verbose] /usr/lib/ruby/vendor_ruby/apipie_bindings/resource.rb:14:in `call' # [ INFO 2014-09-04 06:02:58 verbose] /usr/share/foreman-installer/modules/foreman/lib/puppet/provider/foreman_smartproxy/rest_v2.rb:44:in `create'
Logs show that the proxy was created:
Started POST "/api/smart_proxies" for 2001:4800:7812:514:be76:4eff:fe04:ad70 at 2014-09-04 05:56:32 +0000 Processing by Api::V2::SmartProxiesController#create as JSON Parameters: {"name"=>"foreman-trusty.example.com", "url"=>"https://foreman-trusty.example.com:8443", "apiv"=>"v2", "smart_proxy"=>{"name"=>"foreman-trusty.example.com", "url"=>"https://foreman-trusty.example.com:8443"}} Authorized user foreman_api_admin(API Admin) Completed 201 Created in 402.1ms (Views: 8.0ms | ActiveRecord: 0.0ms)
However subsequent re-evaluations of the resource, or even evaluating properties which look up the smart proxy ID from the API fail to see that it's already there. When they attempt to recreate it, a Rails validation correctly identifies the duplicate.
Started POST "/api/smart_proxies" for 2001:4800:7812:514:be76:4eff:fe04:ad70 at 2014-09-04 05:57:22 +0000 Processing by Api::V2::SmartProxiesController#create as JSON Parameters: {"name"=>"foreman-trusty.example.com", "url"=>"https://foreman-trusty.example.com:8443", "apiv"=>"v2", "smart_proxy"=>{"name"=>"foreman-trusty.example.com", "url"=>"https://foreman-trusty.example.com:8443"}} Authorized user foreman_api_admin(API Admin) Unprocessable entity SmartProxy (id: new): Name has already been taken URL Only one declaration of a proxy is allowed Rendered api/v2/errors/unprocessable_entity.json.rabl within api/v2/layouts/error_layout (2.3ms) Completed 422 Unprocessable Entity in 910.5ms (Views: 5.4ms | ActiveRecord: 1.8ms)
When refreshing the resource, you get errors such as:
# [ERROR 2014-09-04 05:56:33 verbose] /Stage[main]/Foreman_proxy::Register/Foreman_smartproxy[foreman-trusty.example.com]: Failed to call refresh: missing param 'id' in parameters
Because the ID can't be resolved for the existing proxy.
Files
Updated by Dominic Cleal over 10 years ago
- Blocked by Feature #5838: Add parameter to toggle debug logging added
Updated by Dominic Cleal over 10 years ago
My suspicion is that either:
a) the API index call isn't returning the smart proxy in the results
b) the API index call is returning multiple proxies or in some weird format, so this simple extraction of the first result is incorrect: https://github.com/theforeman/puppet-foreman/blob/master/lib/puppet/provider/foreman_smartproxy/rest_v2.rb#L30-L32
Debug logging at installation time would be incredibly useful, as production.log would then show the result of the API call.
Updated by Dominic Cleal over 10 years ago
- File foreman-debug.tar.xz foreman-debug.tar.xz added
Updated by Dominic Cleal almost 9 years ago
- Status changed from New to Rejected
This issue appears to have gone away, tests have been stable now for a long time. Unknown cause + fix.