Bug 1495318 - Azure refreshes fail with [NameError]: wrong constant name $default
Summary: Azure refreshes fail with [NameError]: wrong constant name $default
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat CloudForms Management Engine
Classification: Red Hat
Component: Providers
Version: 5.7.0
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: GA
: 5.9.0
Assignee: Daniel Berger
QA Contact: Leo Khomenko
URL:
Whiteboard:
Depends On:
Blocks: 1500051 1500052
TreeView+ depends on / blocked
 
Reported: 2017-09-25 19:27 UTC by Robb Manes
Modified: 2021-03-11 15:50 UTC (History)
12 users (show)

Fixed In Version: 5.9.0.2
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 1500051 1500052 (view as bug list)
Environment:
Last Closed: 2018-03-06 14:46:37 UTC
Category: ---
Cloudforms Team: ---
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Knowledge Base (Solution) 3209671 0 None None None 2017-10-09 03:08:02 UTC

Description Robb Manes 2017-09-25 19:27:56 UTC
Description of problem:
Azure cloud provider refreshes are failing with the following errors and stacktraces:

[----] E, [2017-09-18T04:53:44.307756 #20437:6ed138] ERROR -- : MIQ(ManageIQ::Providers::Azure::CloudManager::Refresher #refresh) EMS: [Azure-USEast], id: [10000000000012] Refresh failed
[----] E, [2017-09-18T04:53:44.311596 #20437:6ed138] ERROR -- : [NameError]: wrong constant name $default  Method:[rescue in block in refresh]
[----] E, [2017-09-18T04:53:44.311800 #20437:6ed138] ERROR -- : /opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:169:in `const_defined?'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:169:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:173:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:160:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:152:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/template_deployment_service.rb:27:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/template_deployment_service.rb:27:in `block in list_deployment_operations'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/template_deployment_service.rb:27:in `map'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.3/lib/azure/armrest/template_deployment_service.rb:27:in `list_deployment_operations'
/var/www/miq/vmdb/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:96:in `get_stack_resources'
/var/www/miq/vmdb/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:409:in `stack_resources'
/var/www/miq/vmdb/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:331:in `parse_stack'
/var/www/miq/vmdb/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:79:in `block in get_stacks

Notably, this deployment has worked for some time and recently stopped working with the above error.  I suspect as per http://talk.manageiq.org/t/azure-subscription-error-wrong-constant-name-default/2528 this was resolved in azure-armrest in 0.7.4 and is only present in 0.7.3 but am seeking to prove/disprove it.

Reading the above, the parent call was here:

value.map { |elem| elem.kind_of?(Hash) ? nested_object(snake.camelize.singularize, elem) : elem }

Object `snake` is from:

snake = key.to_s.tr(' ', '_').underscore

where the key is from the object passed in to __setobj__ from the hash, which is parented by the JSON.  Since we're performing a get_stack_resources, I am wondering if this was an error in parsing ARM templates.

Version-Release number of selected component (if applicable):
CFME 5.7.3.2
azure-armrest-0.7.3

How reproducible:
Every time in customer's environment, have been unable to reproduce in my own (but I do not have as many saved ARM templates in my Azure instance, nor as varied, if it truly is a template importing problem)

Steps to Reproduce:
1. Unknown at this time

Actual results:
Refresh fails with the above stacktrace.

Expected results:
Refresh should not fail

Comment 3 Robb Manes 2017-10-05 18:34:41 UTC
Customer upgraded to 5.8.1.5 and the issue still occurs.  The full stack:

[----] E, [2017-10-05T09:28:53.018945 #15305:ebd138] ERROR -- : MIQ(ManageIQ::Providers::Azure::CloudManager::Refresher#refresh) EMS: [Azure-USEast], id: [17000000000001] Refresh failed
[----] E, [2017-10-05T09:28:53.031802 #15305:ebd138] ERROR -- : [NameError]: wrong constant name $default  Method:[rescue in block in refresh]
[----] E, [2017-10-05T09:28:53.032208 #15305:ebd138] ERROR -- : /opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:174:in `const_defined?'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:174:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:178:in `nested_object'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:165:in `block in __setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `each'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:157:in `__setobj__'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/model/base_model.rb:67:in `initialize'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/template_deployment_service.rb:27:in `new'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/template_deployment_service.rb:27:in `block in list_deployment_operations'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/template_deployment_service.rb:27:in `map'
/opt/rh/cfme-gemset/gems/azure-armrest-0.7.4/lib/azure/armrest/template_deployment_service.rb:27:in `list_deployment_operations'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:104:in `get_stack_resources'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:428:in `stack_resources'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:327:in `parse_stack'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:83:in `block in get_deployments'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/refresh_helper_methods.rb:10:in `block in process_collection'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/refresh_helper_methods.rb:9:in `each'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/refresh_helper_methods.rb:9:in `process_collection'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:83:in `get_deployments'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:87:in `get_stacks'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:43:in `ems_inv_to_hashes'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresh_parser.rb:10:in `ems_inv_to_hashes'
/opt/rh/cfme-gemset/bundler/gems/manageiq-providers-azure-ae2e0e06ee85/app/models/manageiq/providers/azure/cloud_manager/refresher.rb:6:in `parse_legacy_inventory'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:146:in `block in parse_targeted_inventory'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:146:in `parse_targeted_inventory'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:87:in `block in refresh_targets_for_ems'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:86:in `refresh_targets_for_ems'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:24:in `block (2 levels) in refresh'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:24:in `block in refresh'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:14:in `each'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:14:in `refresh'
/var/www/miq/vmdb/app/models/manageiq/providers/base_manager/refresher.rb:9:in `refresh'
/var/www/miq/vmdb/app/models/ems_refresh/refreshers/ems_refresher_mixin.rb:14:in `refresh'
/var/www/miq/vmdb/app/models/manageiq/providers/base_manager/refresher.rb:9:in `refresh'
/var/www/miq/vmdb/app/models/ems_refresh.rb:98:in `block in refresh'
/var/www/miq/vmdb/app/models/ems_refresh.rb:97:in `each'
/var/www/miq/vmdb/app/models/ems_refresh.rb:97:in `refresh'
/var/www/miq/vmdb/app/models/miq_queue.rb:347:in `block in deliver'
/opt/rh/rh-ruby23/root/usr/share/ruby/timeout.rb:91:in `block in timeout'
/opt/rh/rh-ruby23/root/usr/share/ruby/timeout.rb:33:in `block in catch'
/opt/rh/rh-ruby23/root/usr/share/ruby/timeout.rb:33:in `catch'
/opt/rh/rh-ruby23/root/usr/share/ruby/timeout.rb:33:in `catch'
/opt/rh/rh-ruby23/root/usr/share/ruby/timeout.rb:106:in `timeout'
/var/www/miq/vmdb/app/models/miq_queue.rb:343:in `deliver'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:107:in `deliver_queue_message'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:135:in `deliver_message'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:153:in `block in do_work'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:147:in `loop'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:147:in `do_work'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:340:in `block in do_work_loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:337:in `loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:337:in `do_work_loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:160:in `run'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:134:in `start'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:21:in `start_worker'
/var/www/miq/vmdb/app/models/miq_worker.rb:339:in `block in start_runner'
/opt/rh/cfme-gemset/gems/nakayoshi_fork-0.0.3/lib/nakayoshi_fork.rb:24:in `fork'
/opt/rh/cfme-gemset/gems/nakayoshi_fork-0.0.3/lib/nakayoshi_fork.rb:24:in `fork'
/var/www/miq/vmdb/app/models/miq_worker.rb:337:in `start_runner'
/var/www/miq/vmdb/app/models/miq_worker.rb:348:in `start'
/var/www/miq/vmdb/app/models/miq_worker.rb:266:in `start_worker'
/var/www/miq/vmdb/app/models/mixins/per_ems_worker_mixin.rb:68:in `start_worker_for_ems'
/var/www/miq/vmdb/app/models/mixins/per_ems_worker_mixin.rb:46:in `block in sync_workers'
/var/www/miq/vmdb/app/models/mixins/per_ems_worker_mixin.rb:45:in `each'
/var/www/miq/vmdb/app/models/mixins/per_ems_worker_mixin.rb:45:in `sync_workers'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:53:in `block in sync_workers'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:50:in `each'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:50:in `sync_workers'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:22:in `monitor_workers'
/var/www/miq/vmdb/app/models/miq_server.rb:349:in `block in monitor'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/var/www/miq/vmdb/app/models/miq_server.rb:349:in `monitor'
/var/www/miq/vmdb/app/models/miq_server.rb:371:in `block (2 levels) in monitor_loop'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/opt/rh/cfme-gemset/bundler/gems/manageiq-gems-pending-8f7d63f441d5/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/var/www/miq/vmdb/app/models/miq_server.rb:371:in `block in monitor_loop'
/var/www/miq/vmdb/app/models/miq_server.rb:370:in `loop'
/var/www/miq/vmdb/app/models/miq_server.rb:370:in `monitor_loop'
/var/www/miq/vmdb/app/models/miq_server.rb:253:in `start'
/var/www/miq/vmdb/lib/workers/evm_server.rb:65:in `start'
/var/www/miq/vmdb/lib/workers/evm_server.rb:91:in `start'
/var/www/miq/vmdb/lib/workers/bin/evm_server.rb:4:in `<main>'
- - - - - - - - 8< - - - - - - - - 

Walked through the stack to try and understand the exception that stops the refresh.

During get_stack_resources we class to list_deployment_operations in the TemplateDeploymentService, which makes a new TemplateDeploymentOperation from a JSON hash:

      def get_stack_resources(name, group)
	resources = collect_inventory(:stack_resources) { @tds.list_deployment_operations(name, group) }
	# resources with provsioning_operation 'Create' are the ones created by this stack
	resources.select! do |resource|
	  resource.properties.provisioning_operation =~ /^create$/i
	end

	process_collection(resources, :orchestration_stack_resources) do |resource|
	  parse_stack_resource(resource, group)
	end
      end

[...]

module Azure
  module Armrest
    # Base class for managing templates and deployments
    class TemplateDeploymentService < ResourceGroupBasedService
- - - - - - - - 8< - - - - - - - - 
      # Get all operations of a deployment in a resource group
      def list_deployment_operations(deploy_name, resource_group = configuration.resource_group)
	validate_resource_group(resource_group)
	validate_resource(deploy_name)

	url = build_url(resource_group, deploy_name, 'operations')
	response = rest_get(url)
	JSON.parse(response)['value'].map { |hash| TemplateDeploymentOperation.new(hash) }
      end

Eventually we get to def_nested_object which, using the values we passed in during the initalize of TemplateDeploymentOperation -> __setobj__ we use the literal name "$default" in const_defined? perhaps which throws our exception as constants must be called with a capital letter first?

	      def nested_object(klass_name, value)
		unless self.class.const_defined?(klass_name, false)
		  child_excl_list = @child_excl_list
		  self.class.const_set(klass_name, Class.new(BaseModel) { attr_hash(*child_excl_list) })
		end
		self.class.const_get(klass_name).new(value)
	      end

Or perhaps we use a snake_case value here.  Either way, customer has an appliance for testing only that has _only_ their Azure provider in it, so we are going to add some debug logging statements to see if we can figure out what klass_name is as well as what we are parsing in azure-armrest that is unique in their environment that I can't reproduce.

If this is fixed upstream, please point me to the PR, or if I am off in left field.  Thanks!

Comment 6 Daniel Berger 2017-10-07 14:31:59 UTC
I wasn't aware we could get properties from that method which contained a "$" character. I've submitted a PR which we can backport.

https://github.com/ManageIQ/azure-armrest/pull/329

Comment 7 Robb Manes 2017-10-09 02:27:53 UTC
(In reply to Daniel Berger from comment #6)
> I wasn't aware we could get properties from that method which contained a
> "$" character. I've submitted a PR which we can backport.
> 
> https://github.com/ManageIQ/azure-armrest/pull/329

Thanks - further checking shows that any creation of an IoT Hub in Azure creates a storageEndpoints object with $default as a property:

$ az iot hub list | grep 'storageEndpoints' -A6
      "storageEndpoints": {
        "$default": {
          "connectionString": "",
          "containerName": "",
          "sasTtlAsIso8601": "1:00:00"
        }
      }

So far, that is the only thing I'm able to see that does it...

Comment 16 Prasad Mukhedkar 2018-01-11 16:50:58 UTC
Robb, Thanks, I will ping you the case number.


Note You need to log in before you can comment on or make changes to this bug.