@@ -4,25 +4,59 @@ module ManageIQ::Providers::Openstack::CloudManager::Vm::Resize
44 included do
55 supports :resize do
66 unsupported_reason_add ( :resize , unsupported_reason ( :control ) ) unless supports? ( :control )
7+ unsupported_reason_add ( :resize , _ ( 'The VM is not connected to a provider' ) ) unless ext_management_system
78 unless %w( ACTIVE SHUTOFF ) . include? ( raw_power_state )
89 unsupported_reason_add ( :resize , _ ( "The Instance cannot be resized, current state has to be active or shutoff." ) )
910 end
1011 end
1112 end
1213
13- def raw_resize ( new_flavor )
14+ def raw_resize ( options )
1415 ext_management_system . with_provider_connection ( compute_connection_options ) do |service |
15- service . resize_server ( ems_ref , new_flavor . ems_ref )
16+ service . resize_server ( ems_ref , options [ "flavor" ] )
1617 end
1718 MiqQueue . put ( :class_name => self . class . name ,
1819 :expires_on => Time . now . utc + 2 . hours ,
1920 :instance_id => id ,
2021 :method_name => "raw_resize_finish" )
2122 rescue => err
22- _log . error "vm=[#{ name } ], flavor=[#{ new_flavor . name } ], error: #{ err } "
23+ _log . error ( "vm=[#{ name } ], flavor=[#{ options [ "flavor" ] } ], error: #{ err } " )
2324 raise MiqException ::MiqOpenstackApiRequestError , parse_error_message_from_fog_response ( err ) , err . backtrace
2425 end
2526
27+ def params_for_resize
28+ {
29+ :fields => [
30+ {
31+ :component => 'text-field' ,
32+ :name => 'current_flavor' ,
33+ :id => 'current_flavor' ,
34+ :label => _ ( 'Current Flavor' ) ,
35+ :isDisabled => true ,
36+ :value => flavor . name_with_details
37+ } ,
38+ {
39+ :component => 'select' ,
40+ :name => 'flavor' ,
41+ :id => 'flavor' ,
42+ :label => _ ( 'Choose Flavor' ) ,
43+ :isRequired => true ,
44+ :includeEmpty => true ,
45+ :options => resize_form_options
46+ } ,
47+ ] ,
48+ }
49+ end
50+
51+ def resize_form_options
52+ ext_management_system . flavors . map do |ems_flavor |
53+ # include only flavors with root disks at least as big as the instance's current root disk.
54+ next if flavor && ( ems_flavor == flavor || ems_flavor . root_disk_size < flavor . root_disk_size )
55+
56+ { :label => ems_flavor . name_with_details , :value => ems_flavor . ems_ref }
57+ end . compact
58+ end
59+
2660 def validate_resize_confirm
2761 raw_power_state == 'VERIFY_RESIZE'
2862 end
0 commit comments