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
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!
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
(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...
https://github.com/ManageIQ/manageiq-providers-azure/pull/138
Robb, Thanks, I will ping you the case number.