Darryl L. Pierce
2008-Aug-21 17:12 UTC
[Ovirt-devel] [PATCH] Added a configuration generation for managed nodes. It takes as input a
--- wui/src/app/controllers/application.rb | 2 +- wui/src/lib/managed_node_configuration.rb | 53 +++++++++++ wui/src/test/fixtures/hosts.yml | 9 ++ wui/src/test/fixtures/nics.yml | 7 +- wui/src/test/fixtures/pools.yml | 4 + .../functional/managed_node_configuration_test.rb | 98 ++++++++++++++++++++ 6 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 wui/src/lib/managed_node_configuration.rb create mode 100644 wui/src/test/functional/managed_node_configuration_test.rb diff --git a/wui/src/app/controllers/application.rb b/wui/src/app/controllers/application.rb index d653171..b27ddbe 100644 --- a/wui/src/app/controllers/application.rb +++ b/wui/src/app/controllers/application.rb @@ -35,7 +35,7 @@ class ApplicationController < ActionController::Base before_filter :is_logged_in def is_logged_in - redirect_to (:controller => "login", :action => "login") unless get_login_user + redirect_to(:controller => "login", :action => "login") unless get_login_user end def get_login_user diff --git a/wui/src/lib/managed_node_configuration.rb b/wui/src/lib/managed_node_configuration.rb new file mode 100644 index 0000000..6d6b7c9 --- /dev/null +++ b/wui/src/lib/managed_node_configuration.rb @@ -0,0 +1,53 @@ +# +# Copyright (C) 2008 Red Hat, Inc. +# Written by Darryl L. Pierce <dpierce at redhat.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. + +# +ManagedNodeConfiguration+ takes in the description for a managed node and, +# from that, generates the configuration file that is consumed the next time +# the managed node starts up. +# + +require 'stringio' + +$: << File.join(File.dirname(__FILE__), "../dutils") +$: << File.join(File.dirname(__FILE__), "../") + +class ManagedNodeConfiguration + NIC_ENTRY_PREFIX='/files/etc/sysconfig/network-scripts' + + def self.generate(host, macs) + result = StringIO.new + + host.nics.each do |nic| + iface_name = macs[nic.mac] + + if iface_name + result.puts "rm #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}" + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/DEVICE #{iface_name}" + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/IPADDR #{nic.ip_addr}" if nic.ip_addr + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BOOTPROTO dhcp" if nic.ip_addr == nil + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BRIDGE #{nic.bridge}" if nic.bridge + result.puts "" + end + end + + result.puts "save" + + result.string + end +end diff --git a/wui/src/test/fixtures/hosts.yml b/wui/src/test/fixtures/hosts.yml index f10a756..64707da 100644 --- a/wui/src/test/fixtures/hosts.yml +++ b/wui/src/test/fixtures/hosts.yml @@ -1,3 +1,12 @@ +mailservers_managed_node: + uuid: '182a8596-961d-11dc-9387-001558c41534' + hostname: 'mail.mynetwork.com' + arch: 'i386' + memory: 16384 + is_disabled: 0 + hypervisor_type: 'kvm' + hardware_pool_id: <%= Fixtures.identify(:prodops_pool) %> + one: id: 1 uuid: '1148fdf8-961d-11dc-9387-001558c41534' diff --git a/wui/src/test/fixtures/nics.yml b/wui/src/test/fixtures/nics.yml index 008cfb7..c37f3d4 100644 --- a/wui/src/test/fixtures/nics.yml +++ b/wui/src/test/fixtures/nics.yml @@ -1,4 +1,9 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html +mailserver_nic_one: + mac: '00:11:22:33:44:55' + usage_type: '1' + bandwidth: 100 + host_id: <%= Fixtures.identify(:mailservers_managed_node) %> + one: id: 1 mac: '00:11:22:33:44:55' diff --git a/wui/src/test/fixtures/pools.yml b/wui/src/test/fixtures/pools.yml index 4cf7c97..91dd6e2 100644 --- a/wui/src/test/fixtures/pools.yml +++ b/wui/src/test/fixtures/pools.yml @@ -1,3 +1,7 @@ +prodops_pool: + name: 'Production Operations' + type: 'HardwarePool' + one: id: 1 name: 'master pool' diff --git a/wui/src/test/functional/managed_node_configuration_test.rb b/wui/src/test/functional/managed_node_configuration_test.rb new file mode 100644 index 0000000..195ec6c --- /dev/null +++ b/wui/src/test/functional/managed_node_configuration_test.rb @@ -0,0 +1,98 @@ +# +# Copyright (C) 2008 Red Hat, Inc. +# Written by Darryl L. Pierce <dpierce at redhat.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. + +$:.unshift File.join(File.dirname(__FILE__),'..','lib') + +require File.dirname(__FILE__) + '/../test_helper' +require 'test/unit' +require 'managed_node_configuration' +require 'dutils' + +# Performs unit tests on the +ManagedNodeConfiguration+ class. +# +class ManagedNodeConfigurationTest < Test::Unit::TestCase + def setup + @host = Host.new + @nic = Nic.new(:mac => '00:11:22:33:44:55') + @host.nics << @nic + end + + # Ensures that network interfaces uses DHCP when no IP address is specified. + # + def test_generate_with_no_ip_address + expected = <<HERE +rm /files/etc/sysconfig/network-scripts/ifcfg-eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/DEVICE eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BOOTPROTO dhcp + +save +HERE + + result = ManagedNodeConfiguration.generate( + @host, + {'00:11:22:33:44:55' => 'eth0'} + ) + + assert_equal expected, result + end + + # Ensures that network interfaces use the IP address when it's provided. + # + def test_generate_with_ip_address + @nic.ip_addr = '192.168.2.1' + + expected = <<HERE +rm /files/etc/sysconfig/network-scripts/ifcfg-eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/DEVICE eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/IPADDR 192.168.2.1 + +save +HERE + + result = ManagedNodeConfiguration.generate( + @host, + {'00:11:22:33:44:55' => 'eth0'} + ) + + assert_equal expected, result + end + + # Ensures the bridge is added to the configuration if one is defined. + # + def test_generate_with_bridge + @nic.bridge = 'ovirtbr0' + + expected = <<HERE +rm /files/etc/sysconfig/network-scripts/ifcfg-eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/DEVICE eth0 +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BOOTPROTO dhcp +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BRIDGE ovirtbr0 + +save +HERE + + result = ManagedNodeConfiguration.generate( + @host, + {'00:11:22:33:44:55' => 'eth0'} + ) + + assert_equal expected, result + end + +end -- 1.5.5.1
Darryl L. Pierce
2008-Aug-22 17:20 UTC
[Ovirt-devel] Re: Added a configuration generation for managed nodes. It takes as input a
+++ Darryl L. Pierce [21/08/08 13:12 -0400]: Can I get someone who does Ruby to give me an ACK or some feedback on this, please? -- Darryl L. Pierce, Sr. Software Engineer Red Hat, Inc. - http://www.redhat.com/ oVirt - Virtual Machine Management - http://www.ovirt.org/ "What do you care what other people think, Mr. Feynman?" -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 197 bytes Desc: not available URL: <http://listman.redhat.com/archives/ovirt-devel/attachments/20080822/a8450857/attachment.sig>
David Lutterkort
2008-Aug-25 23:43 UTC
[Ovirt-devel] [PATCH] Added a configuration generation for managed nodes. It takes as input a
On Thu, 2008-08-21 at 13:12 -0400, Darryl L. Pierce wrote: The subject of the patch is mangled, and it would be good to have a little more description, too. I'd ACK this if the description was fixed, and the spurious change to application.rb removed.> --- > wui/src/app/controllers/application.rb | 2 +- > wui/src/lib/managed_node_configuration.rb | 53 +++++++++++ > wui/src/test/fixtures/hosts.yml | 9 ++ > wui/src/test/fixtures/nics.yml | 7 +- > wui/src/test/fixtures/pools.yml | 4 + > .../functional/managed_node_configuration_test.rb | 98 ++++++++++++++++++++ > 6 files changed, 171 insertions(+), 2 deletions(-) > create mode 100644 wui/src/lib/managed_node_configuration.rb > create mode 100644 wui/src/test/functional/managed_node_configuration_test.rb > > diff --git a/wui/src/app/controllers/application.rb b/wui/src/app/controllers/application.rb > index d653171..b27ddbe 100644 > --- a/wui/src/app/controllers/application.rb > +++ b/wui/src/app/controllers/application.rb > @@ -35,7 +35,7 @@ class ApplicationController < ActionController::Base > before_filter :is_logged_in > > def is_logged_in > - redirect_to (:controller => "login", :action => "login") unless get_login_user > + redirect_to(:controller => "login", :action => "login") unless get_login_user > endSeems to have slipped in by accident.> def get_login_user > diff --git a/wui/src/lib/managed_node_configuration.rb b/wui/src/lib/managed_node_configuration.rb > new file mode 100644 > index 0000000..6d6b7c9 > --- /dev/null > +++ b/wui/src/lib/managed_node_configuration.rb > @@ -0,0 +1,53 @@ > +# > +# Copyright (C) 2008 Red Hat, Inc. > +# Written by Darryl L. Pierce <dpierce at redhat.com>. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; version 2 of the License. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, > +# MA 02110-1301, USA. A copy of the GNU General Public License is > +# also available at http://www.gnu.org/copyleft/gpl.html. > + > +# +ManagedNodeConfiguration+ takes in the description for a managed node and, > +# from that, generates the configuration file that is consumed the next time > +# the managed node starts up. > +# > + > +require 'stringio' > + > +$: << File.join(File.dirname(__FILE__), "../dutils") > +$: << File.join(File.dirname(__FILE__), "../")Manipulating $: in production code is kinda ugly .. is that just a relic from testing ?> +class ManagedNodeConfiguration > + NIC_ENTRY_PREFIX='/files/etc/sysconfig/network-scripts' > + > + def self.generate(host, macs) > + result = StringIO.new > + > + host.nics.each do |nic| > + iface_name = macs[nic.mac] > + > + if iface_name > + result.puts "rm #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}" > + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/DEVICE #{iface_name}" > + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/IPADDR #{nic.ip_addr}" if nic.ip_addr > + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BOOTPROTO dhcp" if nic.ip_addr == nil > + result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BRIDGE #{nic.bridge}" if nic.bridge > + result.puts "" > + end > + end > + > + result.puts "save" > + > + result.string > + end > +endMinor nit: you could avoid the use of StringIO completely with a here string (they allow interpolation with #{..}) David