pushed<br><br><div class="gmail_quote">On Mon, Oct 11, 2010 at 10:04 AM, Nicolas Ochem <span dir="ltr"><<a href="mailto:nicolas.ochem@gmail.com">nicolas.ochem@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
There was no release since virtio support was introduced, so a proper<br>
migration is not necessary.<br>
<br>
This amended commit introduces the "default" model which leaves the<br>
model choice up to qemu-kvm.<br>
---<br>
src/app/controllers/vm_controller.rb | 6 ++-<br>
src/app/models/nic.rb | 2 +<br>
src/app/views/vm/_form.rhtml | 25 +++++++++-------<br>
src/db/migrate/046_add_model_to_nic.rb | 29 ++++++++++++++++++<br>
src/public/stylesheets/components.css | 51 +++++++++++++++++++++++--------<br>
src/task-omatic/task_vm.rb | 5 +--<br>
src/task-omatic/taskomatic.rb | 2 +-<br>
7 files changed, 89 insertions(+), 31 deletions(-)<br>
create mode 100644 src/db/migrate/046_add_model_to_nic.rb<br>
<br>
diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb<br>
index adc8988..54abd15 100644<br>
--- a/src/app/controllers/vm_controller.rb<br>
+++ b/src/app/controllers/vm_controller.rb<br>
@@ -199,7 +199,7 @@ class VmController < ApplicationController<br>
nnic = Nic.new(:mac => nic.mac,<br>
:vm_id => @<a href="http://vm.id" target="_blank">vm.id</a>,<br>
:network => nic.network,<br>
- :virtio => nic.virtio)<br>
+ :model => nic.model)<br>
<br>
if(nic.network.boot_type.proto == 'static')<br>
nnic.ip_addresses << IpAddress.new(:address => nic.ip_address)<br>
@@ -221,6 +221,8 @@ class VmController < ApplicationController<br>
@nics.push nnic<br>
}<br>
<br>
+ @nic_models = Nic::NIC_MODELS<br>
+<br>
end<br>
<br>
# merges vm / network parameters as submitted on the vm form<br>
@@ -241,7 +243,7 @@ class VmController < ApplicationController<br>
nic = { :mac => params[:macs][i],<br>
:network_id => network_id,<br>
:bandwidth => 0,<br>
- :virtio => params[:virtio][i.to_s] }<br>
+ :model => params[:models][i] }<br>
<br>
if(Network.find(network_id).boot_type.proto == 'static')<br>
# FIXME make this able to be v4 or v6 address<br>
diff --git a/src/app/models/nic.rb b/src/app/models/nic.rb<br>
index 51425bc..93aef17 100644<br>
--- a/src/app/models/nic.rb<br>
+++ b/src/app/models/nic.rb<br>
@@ -53,6 +53,8 @@ class Nic < ActiveRecord::Base<br>
validates_numericality_of :bandwidth,<br>
:greater_than_or_equal_to => 0<br>
<br>
+ NIC_MODELS = ["default","ne2k_pci","i82551","i82557b","i82559er","rtl8139","e1000","pcnet","virtio"]<br>
+<br>
# Returns whether the nic has networking defined.<br>
def networking?<br>
(network != nil)<br>
diff --git a/src/app/views/vm/_form.rhtml b/src/app/views/vm/_form.rhtml<br>
index 1ab6dda..465733d 100644<br>
--- a/src/app/views/vm/_form.rhtml<br>
+++ b/src/app/views/vm/_form.rhtml<br>
@@ -67,6 +67,7 @@<br>
<div id="vm_network_config_header"><br>
<div id="vm_network_config_header_network">Network:</div><br>
<div id="vm_network_config_header_mac">MAC Address:</div><br>
+ <div id="vm_network_config_header_model">Model:</div><br>
<br>
<%# this column is only populated if a static ip network is selected: %><br>
<div id="vm_network_config_header_ip" style="display: none;">IP Address:</div><br>
@@ -92,14 +93,16 @@<br>
<input name="macs[]" id="vm_network_config_mac_<%= i %>" ></input><br>
</div><br>
<br>
- <div class="vm_network_config_ip"><br>
- <br>
+ <div class="vm_network_config_model"><br>
+ <select name="models[]" id="vm_network_config_model_<%= i %>" class="vm_network_config_select"><br>
+ <% @nic_models.each { |model| %><br>
+ <option value="<%= model %>"><%= model %></option><br>
+ <% } %><br>
+ </select><br>
</div><br>
<br>
- <div class="vm_network_config_virtio"><br>
- <%= hidden_field_tag "virtio[#{i}]", "0" %><br>
- <%= check_box_tag "virtio[#{i}]", "1", @nics[i].virtio, :id => "vm_network_config_virtio_#{i}" %><br>
- <%= label_tag "vm_network_config_virtio_#{i}", "Use virtio" %><br>
+ <div class="vm_network_config_ip"><br>
+ <br>
</div><br>
<br>
<% if i != 0 %><br>
@@ -196,7 +199,7 @@ ${htmlList(pools, id)}<br>
<a href="http://jnic.name" target="_blank">jnic.name</a> = "<%= <a href="http://rnic.network.name" target="_blank">rnic.network.name</a> %>";<br>
jnic.mac = "<%= rnic.mac %>";<br>
jnic.ip = "<%= rnic.ip_address %>";<br>
- jnic.virtio = <%= rnic.virtio ? 'true' : 'false' %>;<br>
+ jnic.model = "<%= rnic.model %>"<br>
jnic.static_ip = <%= rnic.network.boot_type.proto == 'static' %>;<br>
jnic.selected = false;<br>
jnic.row = null;<br>
@@ -270,15 +273,15 @@ ${htmlList(pools, id)}<br>
$('#vm_network_config_mac_'+row).attr('value', nic.mac);<br>
<br>
// show / hide ip address textbox<br>
- ip_div = $('#vm_network_config_mac_'+row).parent().next();<br>
+ ip_div = $('#vm_network_config_model_'+row).parent().next();<br>
if(nic.static_ip){<br>
ip_div.html('<input name="ip_addresses[]" id="#vm_network_config_ip_'+row+'" value="'+nic.ip+'" />');<br>
}else{<br>
ip_div.html(' ');<br>
}<br>
<br>
- // set virtio if checked<br>
- $('#vm_network_config_virtio_'+row).attr('checked', nic.virtio ? 'checked' : '');<br>
+ // set model<br>
+ $('#vm_network_config_model_'+row).attr('value', nic.model);<br>
<br>
// show new row only if last row's select box was<br>
// previously empty, and if all are not shown<br>
@@ -302,7 +305,7 @@ ${htmlList(pools, id)}<br>
// clear row mac and ip addresses<br>
$('#vm_network_config_mac_'+row).attr('value', '');<br>
$('#vm_network_config_mac_'+row).parent().next().html(' ');<br>
- $('#vm_network_config_virtio_'+row).attr('checked', '');<br>
+ //$('#vm_network_config_virtio_'+row).attr('checked', '');<br>
<br>
// hide row if not the first<br>
if(row != 0){<br>
diff --git a/src/db/migrate/046_add_model_to_nic.rb b/src/db/migrate/046_add_model_to_nic.rb<br>
new file mode 100644<br>
index 0000000..1ec42a9<br>
--- /dev/null<br>
+++ b/src/db/migrate/046_add_model_to_nic.rb<br>
@@ -0,0 +1,29 @@<br>
+# Copyright (C) 2010 Alcatel-Lucent<br>
+# Written by Nicolas Ochem <<a href="mailto:nicolas.ochem@alcatel-lucent.com">nicolas.ochem@alcatel-lucent.com</a>><br>
+#<br>
+# This program is free software; you can redistribute it and/or modify<br>
+# it under the terms of the GNU General Public License as published by<br>
+# the Free Software Foundation; version 2 of the License.<br>
+#<br>
+# This program is distributed in the hope that it will be useful,<br>
+# but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
+# GNU General Public License for more details.<br>
+#<br>
+# You should have received a copy of the GNU General Public License<br>
+# along with this program; if not, write to the Free Software<br>
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,<br>
+# MA 02110-1301, USA. A copy of the GNU General Public License is<br>
+# also available at <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">http://www.gnu.org/copyleft/gpl.html</a>.<br>
+class AddModelToNic < ActiveRecord::Migration<br>
+ def self.up<br>
+ add_column :nics, :model, :string<br>
+ remove_column :nics, :virtio<br>
+ end<br>
+<br>
+ def self.down<br>
+ remove_column :nics, :model<br>
+ add_column :nics, :virtio, :boolean, :default => false<br>
+ end<br>
+end<br>
+<br>
diff --git a/src/public/stylesheets/components.css b/src/public/stylesheets/components.css<br>
index 3cdbf49..fe4043e 100644<br>
--- a/src/public/stylesheets/components.css<br>
+++ b/src/public/stylesheets/components.css<br>
@@ -349,41 +349,66 @@<br>
min-width: 500px;<br>
}<br>
<br>
-#vm_network_config_header_network,<br>
-#vm_network_config_header_mac,<br>
#vm_network_config_header_ip{<br>
float: left;<br>
- width: 150px;<br>
+ width: 102px;<br>
}<br>
<br>
-.vm_network_config_net,<br>
-.vm_network_config_mac{<br>
+#vm_network_config_header_network{<br>
+ float: left;<br>
+ width:92px;<br>
+}<br>
+<br>
+#vm_network_config_header_mac{<br>
+ float: left;<br>
+ width: 132px;<br>
+}<br>
+<br>
+#vm_network_config_header_model{<br>
+ float: left;<br>
+ width: 76px;<br>
+}<br>
+<br>
+.vm_network_config_net{<br>
float: left;<br>
- width: 150px;<br>
+ width: 92px;<br>
}<br>
<br>
+.vm_network_config_mac{<br>
+ float: left;<br>
+ width: 132px;<br>
+}<br>
.vm_network_config_ip{<br>
float: left;<br>
- max-width: 150px;<br>
+ width: 100px;<br>
}<br>
<br>
-.vm_network_config_virtio {<br>
+.vm_network_config_model {<br>
float: left;<br>
- width: 80px;<br>
+ width: 76px;<br>
+}<br>
+<br>
+.vm_network_config_ip input{<br>
+ width: 100px;<br>
}<br>
<br>
-.vm_network_config_net select,<br>
-.vm_network_config_mac input,<br>
-.vm_network_config_ip input {<br>
- width: 130px;<br>
+.vm_network_config_net select{<br>
+ width: 90px;<br>
}<br>
<br>
+.vm_network_config_model select {<br>
+ width: 74px;<br>
+}<br>
+.vm_network_config_mac input{<br>
+ width:125px;<br>
+}<br>
.vm_network_config_remove {<br>
float: left;<br>
color: #0033CC;<br>
padding-top: 5px;<br>
padding-left: 5px;<br>
}<br>
+<br>
.vm_network_config_remove:hover {<br>
cursor: pointer;<br>
}<br>
diff --git a/src/task-omatic/task_vm.rb b/src/task-omatic/task_vm.rb<br>
index cf84ea2..165363a 100644<br>
--- a/src/task-omatic/task_vm.rb<br>
+++ b/src/task-omatic/task_vm.rb<br>
@@ -99,10 +99,7 @@ def create_vm_xml(name, uuid, memAllocated, memUsed, vcpus, bootDevice,<br>
interface.add_attribute("type", "bridge")<br>
interface.add_element("mac", {"address" => nic[:mac]})<br>
interface.add_element("source", {"bridge" => nic[:interface]})<br>
-<br>
- if nic[:virtio]<br>
- interface.add_element("model", {"type" => "virtio"})<br>
- end<br>
+ interface.add_element("model", {"type" => nic[:model]}) unless nic[:model]=="default"<br>
doc.root.elements["devices"] << interface<br>
}<br>
<br>
diff --git a/src/task-omatic/taskomatic.rb b/src/task-omatic/taskomatic.rb<br>
index a24a80e..d9efecc 100755<br>
--- a/src/task-omatic/taskomatic.rb<br>
+++ b/src/task-omatic/taskomatic.rb<br>
@@ -413,7 +413,7 @@ class TaskOmatic<br>
else<br>
net_device = "breth0" # FIXME remove this default at some point<br>
end<br>
- net_interfaces.push({ :mac => nic.mac, :interface => net_device, :virtio => nic.virtio })<br>
+ net_interfaces.push({ :mac => nic.mac, :interface => net_device, :model => nic.model })<br>
}<br>
# network_always indicates that the boot device is "network" and will not change<br>
# upon reboot.<br>
<font color="#888888">--<br>
1.7.2.1<br>
<br>
</font></blockquote></div><br>