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