There is no way in Azure to perform a hard reset on an instance, there is only one way stop an instance and only one way to restart an instance, both are graceful. Therefore, the 'Power/Hard Reboot' menu item should be disabled.
https://bugzilla.redhat.com/show_bug.cgi?id=1349146

@miq-bot assign @dclarizio
/cc @durandom pluggable providers
This is a great use case for the SupportsFeatureMixin.
I guess the visibility of the menu option can be implemented like this https://github.com/ManageIQ/manageiq/pull/8330/files#diff-a339bdd1c4e0542e5362056813746bed
I've verified that Soft Reboot is working in 5.6.1 I agree that hard reboot is a bad idea to implement as it does create a data loss condition which is unacceptable for QE. We should remove the choice from the power menu if possible.
At the moment, attempting to call Hard Reboot doesn't even work on my local dev instance:
[----] E, [2017-06-09T09:26:25.309715 #73422:3fe01c43f954] ERROR -- : MIQ(MiqQueue#m_callback) Message id: [34003]: undefined method `vm_reset' for #<ManageIQ::Providers::Azure::CloudManager:0x007fc02ec0af58>
Did you mean? vm_restart
[----] E, [2017-06-09T09:26:25.309936 #73422:3fe01c43f954] ERROR -- : MIQ(MiqQueue#m_callback) backtrace: /Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/activemodel-5.0.3/lib/active_model/attribute_methods.rb:433:in `method_missing'
/Users/dberger/Repositories/manageiq-djberg96/app/models/vm_or_template.rb:328:in `run_command_via_parent'
/Users/dberger/Repositories/manageiq-djberg96/app/models/vm/operations/guest.rb:54:in `raw_reset'
/Users/dberger/Repositories/manageiq-djberg96/app/models/mixins/miq_policy_mixin.rb:115:in `check_policy_prevent_callback'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue.rb:398:in `m_callback'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue.rb:367:in `delivered'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue_worker_base/runner.rb:118:in `deliver_queue_message'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue_worker_base/runner.rb:135:in `deliver_message'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue_worker_base/runner.rb:153:in `block in do_work'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue_worker_base/runner.rb:147:in `loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_queue_worker_base/runner.rb:147:in `do_work'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:342:in `block in do_work_loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:339:in `loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:339:in `do_work_loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:160:in `run'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:134:in `start'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker/runner.rb:21:in `start_worker'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:341:in `block in start_runner'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/nakayoshi_fork-0.0.3/lib/nakayoshi_fork.rb:24:in `fork'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/nakayoshi_fork-0.0.3/lib/nakayoshi_fork.rb:24:in `fork'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:339:in `start_runner'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:350:in `start'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:266:in `start_worker'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:150:in `block in sync_workers'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:150:in `times'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_worker.rb:150:in `sync_workers'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server/worker_management/monitor.rb:53:in `block in sync_workers'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server/worker_management/monitor.rb:50:in `each'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server/worker_management/monitor.rb:50:in `sync_workers'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server/worker_management/monitor.rb:22:in `monitor_workers'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:346:in `block in monitor'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/bundler/gems/manageiq-gems-pending-5cc19a6b852a/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/bundler/gems/manageiq-gems-pending-5cc19a6b852a/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:346:in `monitor'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:368:in `block (2 levels) in monitor_loop'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/bundler/gems/manageiq-gems-pending-5cc19a6b852a/lib/gems/pending/util/extensions/miq-benchmark.rb:11:in `realtime_store'
/Users/dberger/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/bundler/gems/manageiq-gems-pending-5cc19a6b852a/lib/gems/pending/util/extensions/miq-benchmark.rb:30:in `realtime_block'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:368:in `block in monitor_loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:367:in `loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:367:in `monitor_loop'
/Users/dberger/Repositories/manageiq-djberg96/app/models/miq_server.rb:250:in `start'
/Users/dberger/Repositories/manageiq-djberg96/lib/workers/evm_server.rb:27:in `start'
/Users/dberger/Repositories/manageiq-djberg96/lib/workers/evm_server.rb:48:in `start'
/Users/dberger/Repositories/manageiq-djberg96/lib/workers/bin/evm_server.rb:4:in `<main>'
@djberg96 - Right, its not supported by Azure.
per @durandom
This is a great use case for the SupportsFeatureMixin.
This should be added in them model so the UI can decide not to show the button on an Azure instance summary screen. In the list view screenshot above, we normally show all buttons available to any instance, but we show errors if invalid actions are attempted against certain checked items, based on the same "supports" check.
If the back end support is added, we can then add the UI calls to hide the button when needed.
@durandom Ok, which supports feature should we use here? I see reboot_guest, but I'm not sure how to distinguish between hard and soft reboot.
@djberg96 looks like there is reset https://github.com/ManageIQ/manageiq/blob/acf668b1a4714aa9fff6257db36665bf70a7be84/app/models/vm/operations/guest.rb#L50
and a reset feature is also used in the vmware provider.
Is reset and hard reboot the same?
@durandom I guess "reset" is hard reset and "reboot_guest" is soft reset. Maybe we should add a comment there. At least, that's what @Fryguy said. :)
@h-kataria @simaishi @dclarizio What does the UI hook into that we can set on the backend so that the "Hard Reset" doesn't show?
FYI I tried adding supports_not :reset to both the power.rb file and the cloud_manager.rb file, but it doesn't seem to have any effect on that screen. It must be hooking into something else.
@djberg96 UI calls supports_reset? method for a record, see here: https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/helpers/application_helper/button/instance_reset.rb#L6
@h-kataria Well, that method is problematic then because of the line above it:
return true if @display == "instances"
Can that be removed?
@djberg96 you can remove that line it doesn't make sense to return always true when @display is set to instances.
@h-kataria Ok, thanks. https://github.com/ManageIQ/manageiq-ui-classic/pull/1598
@h-kataria I'm still seeing the hard reboot option in the UI for Azure even after pulling in the latest master. What did I miss?
Now you need to add the supports feature to the azure provider and set it to false. Sorry...didn't see you had already done it here: https://github.com/ManageIQ/manageiq-providers-azure/pull/81
I think that should be it...is it still not working?
@Fryguy not as far as I can tell.
I'm still seeing the hard reboot option in the UI for Azure even after pulling in the latest master. What did I miss?
@djberg96 did you also pull in the latest UI tree from master?
cd spec/manageiq; bundle update
@durandom Yes, tried that. Tried local and master, with everything updated to the latest and greatest as far as I can tell.
Can anyone else confirm?
@durandom i will take a look and get back to you
@durandom @djberg96 "Hard reboot" button is not visible on Azure Instance summary screen. I see that you are trying to hide Hard reboot button on the list view which we currently do not support, we normally show a flash message on screen if user presses a button that is not supported for a selected type from the list view.
For example if you select multiple VMs from list view and Press "Migrate selected items" button from Lifecycle menu, it displays a flash message if one of the VMs from the selection happens to be a template, so we need to apply similar logic for "Hard Reboot" button
@h-kataria Ok, how/where can we do that?
@djberg96 see https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/controllers/application_controller.rb#L1726
https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/controllers/application_controller.rb#L1697 (similar logic can be applied here https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/controllers/application_controller/ci_processing.rb#L525, if any of selected items is Azure instance)
This issue has been automatically marked as stale because it has not been updated for at least 6 months.
If you can still reproduce this issue on the current release or on master, please reply with all of the information you have about it in order to keep the issue open.
Thank you for all your contributions!
@bronaghs looks like this issue has been open for some time and is now stale.
If this issue can be closed, can you do so.
Otherwise, if you'd like it to stay open, please remove the stale label.
Most helpful comment
@durandom I guess "reset" is hard reset and "reboot_guest" is soft reset. Maybe we should add a comment there. At least, that's what @Fryguy said. :)