[Ovirt-devel] [PATCH server] Replaced the config scripts with configuration encoding.
Darryl L. Pierce
dpierce at redhat.com
Mon Oct 20 18:05:48 UTC 2008
Rather than sending the node a series of scripts that load
kernel modules, or are tightly coupled to tools like augeas,
this patch introduces an encoding scheme for data.
A line that begins with "kmod" describes a kernel module that
needs to be loaded. It will containing the module's name, an
optional alias for the module, and then the module options
if such are required.
A line that begins with "ifcfg" describes an network
interface. It will contain the mac address and interface name,
followed by all needed configuration values to bring the
interface up.
Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
---
src/db/migrate/024_add_boot_type_to_bonding.rb | 2 +-
.../migrate/025_allow_nic_boot_type_to_be_null.rb | 28 +++++
src/lib/managed_node_configuration.rb | 81 +++++++------
src/test/fixtures/bondings.yml | 10 ++-
src/test/fixtures/bondings_nics.yml | 8 ++
src/test/fixtures/hosts.yml | 10 ++
src/test/fixtures/nics.yml | 14 ++
.../functional/managed_node_configuration_test.rb | 127 ++++++--------------
8 files changed, 152 insertions(+), 128 deletions(-)
create mode 100644 src/db/migrate/025_allow_nic_boot_type_to_be_null.rb
diff --git a/src/db/migrate/024_add_boot_type_to_bonding.rb b/src/db/migrate/024_add_boot_type_to_bonding.rb
index e2cf1c6..17e085f 100644
--- a/src/db/migrate/024_add_boot_type_to_bonding.rb
+++ b/src/db/migrate/024_add_boot_type_to_bonding.rb
@@ -19,7 +19,7 @@
class AddBootTypeToBonding < ActiveRecord::Migration
def self.up
- add_column :bondings, :boot_type_id, :integer, :null => false
+ add_column :bondings, :boot_type_id, :integer, :null => true
execute 'alter table bondings add constraint fk_bondings_boot_type
foreign key (boot_type_id) references boot_types(id)'
diff --git a/src/db/migrate/025_allow_nic_boot_type_to_be_null.rb b/src/db/migrate/025_allow_nic_boot_type_to_be_null.rb
new file mode 100644
index 0000000..b09ada1
--- /dev/null
+++ b/src/db/migrate/025_allow_nic_boot_type_to_be_null.rb
@@ -0,0 +1,28 @@
+#
+# 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.
+
+class AllowNicBootTypeToBeNull < ActiveRecord::Migration
+ def self.up
+ change_column :nics, :boot_type_id, :integer, :null => true
+ end
+
+ def self.down
+ change_column :nics, :boot_type_id, :integer, :null => false
+ end
+end
diff --git a/src/lib/managed_node_configuration.rb b/src/lib/managed_node_configuration.rb
index 93f8448..101be9f 100644
--- a/src/lib/managed_node_configuration.rb
+++ b/src/lib/managed_node_configuration.rb
@@ -23,36 +23,57 @@
require 'stringio'
+# +ManagedNodeConfiguration+ generates a configuration file for an oVirt node
+# based on information about the hardware submitted by the node and the
+# configuration details held in the database.
+#
+# The configuration is returned as a series of encoded lines.
+#
+# For a kernel module, the formation of the line is as follows:
+#
+# bonding=[bonding alias]
+#
+# An example would be for loading the +bonding+ kernel module to setup a bonded
+# interface for load balancing. In this example, the bonded interface would be
+# named +failover0+ on the node:
+#
+# bonding=failover0
+#
+# For a network interface (including a bonded interface) an example would be:
+#
+# ifcfg=00:11:22:33:44|eth0|BOOTPROTO=dhcp|bridge=ovirtbr0|ONBOOT=yes
+#
+# In this line, the network interface +eth0+ has a hardware MAC address of
+# +00:11:22:33:44+. It will use DHCP for retrieving it's IP address details,
+# and will use the +ovirtbr0+ interface as a bridge.
+#
class ManagedNodeConfiguration
NIC_ENTRY_PREFIX='/files/etc/sysconfig/network-scripts'
def self.generate(host, macs)
result = StringIO.new
- result.puts "#!/bin/bash"
result.puts "# THIS FILE IS GENERATED!"
# first process any bondings that're defined
unless host.bondings.empty?
- result.puts "cat <<\EOF > /var/tmp/pre-config-script"
- result.puts "#!/bin/bash"
- result.puts "# THIS FILE IS GENERATED!"
-
host.bondings.each do |bonding|
- result.puts "/sbin/modprobe bonding mode=#{bonding.bonding_type.mode}"
+ result.puts "bonding=#{bonding.interface_name}"
end
-
- result.puts "EOF"
end
# now process the network interfaces and bondings
- result.puts "cat <<\EOF > /var/tmp/node-augtool"
host.bondings.each do |bonding|
- result.puts "rm #{NIC_ENTRY_PREFIX}/ifcfg-#{bonding.interface_name}"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{bonding.interface_name}/DEVICE #{bonding.interface_name}"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{bonding.interface_name}/IPADDR #{bonding.ip_addr}" if bonding.ip_addr
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{bonding.interface_name}/ONBOOT yes"
+ entry = "ifcfg=none|#{bonding.interface_name}|BONDING_OPTS=\"mode=#{bonding.bonding_type.mode} miimon=100\""
+
+ if bonding.ip_addr == nil || bonding.ip_addr.empty?
+ entry += "|BOOTPROTO=dhcp"
+ else
+ entry += "|BOOTPROTO=static|IPADDR=#{bonding.ip_addr}|NETMASK=#{bonding.netmask}|BROADCAST=#{bonding.broadcast}"
+ end
+
+ result.puts "#{entry}|ONBOOT=yes"
bonding.nics.each do |nic|
process_nic result, nic, macs, bonding
@@ -75,9 +96,6 @@ class ManagedNodeConfiguration
end
end
- result.puts "save"
- result.puts "EOF"
-
result.string
end
@@ -87,31 +105,20 @@ class ManagedNodeConfiguration
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}"
+ entry = "ifcfg=#{nic.mac}|#{iface_name}"
if bonding
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/MASTER #{bonding.interface_name}"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/SLAVE yes"
+ entry += "|MASTER=#{bonding.interface_name}|SLAVE=yes"
else
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BOOTPROTO #{nic.boot_type.proto}"
-
- if nic.boot_type.proto == 'static'
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/IPADDR #{nic.ip_addr}"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/NETMASK #{nic.netmask}"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BROADCAST #{nic.broadcast}"
- end
-
- if bridged
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/BRIDGE ovirtbr0"
- elsif is_bridge
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/TYPE bridge"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/PEERNTP yes"
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/DELAY 0"
- end
+ entry += "|BOOTPROTO=#{nic.boot_type.proto}"
+ entry += "|IPADDR=#{nic.ip_addr}|NETMASK=#{nic.netmask}|BROADCAST=#{nic.broadcast}" if nic.boot_type.proto == 'static'
+ entry += "|BRIDGE=#{nic.bridge}" if nic.bridge && !is_bridge
+ entry += "|BRIDGE=ovirtbr0" if !nic.bridge && !is_bridge
+ entry += "|TYPE=bridge" if is_bridge
end
-
- result.puts "set #{NIC_ENTRY_PREFIX}/ifcfg-#{iface_name}/ONBOOT yes"
+ entry += "|ONBOOT=yes"
end
+
+ result.puts entry if defined? entry
end
end
diff --git a/src/test/fixtures/bondings.yml b/src/test/fixtures/bondings.yml
index 29473c7..227b92b 100644
--- a/src/test/fixtures/bondings.yml
+++ b/src/test/fixtures/bondings.yml
@@ -1,11 +1,17 @@
mailservers_managed_node_bonding:
name: Production Network
- interface_name: bond0
+ interface_name: mailbonding0
bonding_type_id: <%= Fixtures.identify(:link_aggregation_bonding_type) %>
host_id: <%= Fixtures.identify(:mailservers_managed_node) %>
- boot_type_id: <%= Fixtures.identify(:boot_type_static) %>
+ boot_type_id: <%= Fixtures.identify(:boot_type_static_ip) %>
ip_addr: 172.31.0.15
netmask: 255.255.255.
broadcast: 172.31.0.255
arp_ping_address: 172.31.0.100
arp_interval: 0
+
+mediaserver_managed_node_bonding:
+ name: Fileserver Network
+ interface_name: mediabonding0
+ bonding_type_id: <%= Fixtures.identify(:link_aggregation_bonding_type) %>
+ host_id: <%= Fixtures.identify(:mediaserver_managed_node) %>
diff --git a/src/test/fixtures/bondings_nics.yml b/src/test/fixtures/bondings_nics.yml
index 11a3d1a..607ff8b 100644
--- a/src/test/fixtures/bondings_nics.yml
+++ b/src/test/fixtures/bondings_nics.yml
@@ -5,3 +5,11 @@ mailservers_managed_node_bonding_nic_1:
mailservers_managed_node_bonding_nic_2:
bonding_id: <%= Fixtures.identify(:mailservers_managed_node_bonding) %>
nic_id: <%= Fixtures.identify(:mailserver_nic_two) %>
+
+mediaservers_managed_node_bonding_nic_1:
+ bonding_id: <%= Fixtures.identify(:mediaserver_managed_node_bonding) %>
+ nic_id: <%= Fixtures.identify(:mediaserver_nic_one) %>
+
+mediaservers_managed_node_bonding_nic_2:
+ bonding_id: <%= Fixtures.identify(:mediaserver_managed_node_bonding) %>
+ nic_id: <%= Fixtures.identify(:mediaserver_nic_two) %>
diff --git a/src/test/fixtures/hosts.yml b/src/test/fixtures/hosts.yml
index 5b8af15..28282c2 100644
--- a/src/test/fixtures/hosts.yml
+++ b/src/test/fixtures/hosts.yml
@@ -125,3 +125,13 @@ buildserver_managed_node:
is_disabled: 0
hypervisor_type: 'kvm'
hardware_pool_id: <%= Fixtures.identify(:prodops_pool) %>
+
+mediaserver_managed_node:
+ uuid: '6293acd9-2784-11dc-9387-001558c41534'
+ hostname: 'build.mynetwork.com'
+ arch: 'x86_64'
+ memory: 65536
+ is_disabled: 0
+ hypervisor_type: 'kvm'
+ hardware_pool_id: <%= Fixtures.identify(:prodops_pool) %>
+
diff --git a/src/test/fixtures/nics.yml b/src/test/fixtures/nics.yml
index ccf71d2..5b2cecc 100644
--- a/src/test/fixtures/nics.yml
+++ b/src/test/fixtures/nics.yml
@@ -78,3 +78,17 @@ buildserver_nic_two:
broadcast: '172.31.0.255'
host_id: <%= Fixtures.identify(:buildserver_managed_node) %>
boot_type_id: <%= Fixtures.identify(:boot_type_static_ip) %>
+
+mediaserver_nic_one:
+ mac: '07:17:19:65:03:32'
+ usage_type: '1'
+ bandwidth: 100
+ host_id: <%= Fixtures.identify(:mediaserver_managed_node) %>
+ boot_type_id: <%= Fixtures.identify(:boot_type_dhcp) %>
+
+mediaserver_nic_two:
+ mac: '07:17:19:65:03:31'
+ usage_type: '1'
+ bandwidth: 100
+ host_id: <%= Fixtures.identify(:mediaserver_managed_node) %>
+ boot_type_id: <%= Fixtures.identify(:boot_type_dhcp) %>
diff --git a/src/test/functional/managed_node_configuration_test.rb b/src/test/functional/managed_node_configuration_test.rb
index d0d8aa3..14c9736 100644
--- a/src/test/functional/managed_node_configuration_test.rb
+++ b/src/test/functional/managed_node_configuration_test.rb
@@ -36,6 +36,7 @@ class ManagedNodeConfigurationTest < Test::Unit::TestCase
@host_with_ip_address = hosts(:ldapserver_managed_node)
@host_with_multiple_nics = hosts(:buildserver_managed_node)
@host_with_bondings = hosts(:mailservers_managed_node)
+ @host_with_dhcp_bondings = hosts(:mediaserver_managed_node)
end
# Ensures that network interfaces uses DHCP when no IP address is specified.
@@ -44,23 +45,9 @@ class ManagedNodeConfigurationTest < Test::Unit::TestCase
nic = @host_with_dhcp_card.nics.first
expected = <<-HERE
-#!/bin/bash
# THIS FILE IS GENERATED!
-cat <<\EOF > /var/tmp/node-augtool
-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 #{nic.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BRIDGE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/ONBOOT yes
-rm /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DEVICE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/BOOTPROTO #{nic.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/TYPE bridge
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/PEERNTP yes
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DELAY 0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/ONBOOT yes
-save
-EOF
+ifcfg=#{nic.mac}|eth0|BOOTPROTO=dhcp|BRIDGE=ovirtbr0|ONBOOT=yes
+ifcfg=#{nic.mac}|ovirtbr0|BOOTPROTO=dhcp|TYPE=bridge|ONBOOT=yes
HERE
result = ManagedNodeConfiguration.generate(
@@ -77,29 +64,9 @@ EOF
nic = @host_with_ip_address.nics.first
expected = <<-HERE
-#!/bin/bash
# THIS FILE IS GENERATED!
-cat <<\EOF > /var/tmp/node-augtool
-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 #{nic.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/IPADDR #{nic.ip_addr}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/NETMASK #{nic.netmask}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BROADCAST #{nic.broadcast}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BRIDGE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/ONBOOT yes
-rm /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DEVICE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/BOOTPROTO #{nic.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/IPADDR #{nic.ip_addr}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/NETMASK #{nic.netmask}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/BROADCAST #{nic.broadcast}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/TYPE bridge
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/PEERNTP yes
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DELAY 0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/ONBOOT yes
-save
-EOF
+ifcfg=#{nic.mac}|eth0|BOOTPROTO=#{nic.boot_type.proto}|IPADDR=#{nic.ip_addr}|NETMASK=#{nic.netmask}|BROADCAST=#{nic.broadcast}|BRIDGE=#{nic.bridge}|ONBOOT=yes
+ifcfg=#{nic.mac}|ovirtbr0|BOOTPROTO=#{nic.boot_type.proto}|IPADDR=#{nic.ip_addr}|NETMASK=|BROADCAST=#{nic.netmask}|TYPE=bridge|ONBOOT=yes
HERE
result = ManagedNodeConfiguration.generate(
@@ -117,34 +84,10 @@ EOF
nic2 = @host_with_multiple_nics.nics[1]
expected = <<-HERE
-#!/bin/bash
# THIS FILE IS GENERATED!
-cat <<\EOF > /var/tmp/node-augtool
-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 #{nic1.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/IPADDR #{nic1.ip_addr}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/NETMASK #{nic1.netmask}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BROADCAST #{nic1.broadcast}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/BRIDGE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/ONBOOT yes
-rm /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DEVICE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/BOOTPROTO #{nic1.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/IPADDR #{nic1.ip_addr}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/NETMASK #{nic1.netmask}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/BROADCAST #{nic1.broadcast}
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/TYPE bridge
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/PEERNTP yes
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/DELAY 0
-set /files/etc/sysconfig/network-scripts/ifcfg-ovirtbr0/ONBOOT yes
-rm /files/etc/sysconfig/network-scripts/ifcfg-eth1
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/DEVICE eth1
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/BOOTPROTO #{nic2.boot_type.proto}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/BRIDGE ovirtbr0
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/ONBOOT yes
-save
-EOF
+ifcfg=#{nic1.mac}|eth0|BOOTPROTO=#{nic1.boot_type.proto}|IPADDR=#{nic1.ip_addr}|NETMASK=#{nic1.netmask}|BROADCAST=#{nic1.broadcast}|BRIDGE=ovirtbr0|ONBOOT=yes
+ifcfg=#{nic1.mac}|ovirtbr0|BOOTPROTO=#{nic1.boot_type.proto}|IPADDR=#{nic1.ip_addr}|NETMASK=#{nic1.netmask}|BROADCAST=#{nic1.broadcast}|TYPE=bridge|ONBOOT=yes
+ifcfg=#{nic2.mac}|eth1|BOOTPROTO=#{nic2.boot_type.proto}|BRIDGE=ovirtbr0|ONBOOT=yes
HERE
result = ManagedNodeConfiguration.generate(
@@ -167,30 +110,11 @@ EOF
nic2 = bonding.nics[1]
expected = <<-HERE
-#!/bin/bash
# THIS FILE IS GENERATED!
-cat <<\EOF > /var/tmp/pre-config-script
-#!/bin/bash
-# THIS FILE IS GENERATED!
-/sbin/modprobe bonding mode=#{bonding.bonding_type.mode}
-EOF
-cat <<\EOF > /var/tmp/node-augtool
-rm /files/etc/sysconfig/network-scripts/ifcfg-#{bonding.interface_name}
-set /files/etc/sysconfig/network-scripts/ifcfg-#{bonding.interface_name}/DEVICE #{bonding.interface_name}
-set /files/etc/sysconfig/network-scripts/ifcfg-#{bonding.interface_name}/IPADDR 172.31.0.15
-set /files/etc/sysconfig/network-scripts/ifcfg-#{bonding.interface_name}/ONBOOT yes
-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/MASTER #{bonding.interface_name}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/SLAVE yes
-set /files/etc/sysconfig/network-scripts/ifcfg-eth0/ONBOOT yes
-rm /files/etc/sysconfig/network-scripts/ifcfg-eth1
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/DEVICE eth1
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/MASTER #{bonding.interface_name}
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/SLAVE yes
-set /files/etc/sysconfig/network-scripts/ifcfg-eth1/ONBOOT yes
-save
-EOF
+bonding=#{bonding.interface_name}
+ifcfg=none|#{bonding.interface_name}|BONDING_OPTS="mode=#{bonding.bonding_type.mode} miimon=100"|BOOTPROTO=static|IPADDR=#{bonding.ip_addr}|NETMASK=#{bonding.netmask}|BROADCAST=#{bonding.broadcast}|ONBOOT=yes
+ifcfg=#{nic1.mac}|eth0|MASTER=#{bonding.interface_name}|SLAVE=yes|ONBOOT=yes
+ifcfg=#{nic2.mac}|eth1|MASTER=#{bonding.interface_name}|SLAVE=yes|ONBOOT=yes
HERE
result = ManagedNodeConfiguration.generate(
@@ -203,4 +127,31 @@ HERE
assert_equal expected, result
end
+ # Ensures that the generated bonding supports DHCP boot protocol.
+ #
+ def test_generate_with_dhcp_bonding
+ bonding = @host_with_dhcp_bondings.bondings.first
+
+ bonding.ip_addr=nil
+ nic1 = bonding.nics[0]
+ nic2 = bonding.nics[1]
+
+ expected = <<-HERE
+# THIS FILE IS GENERATED!
+bonding=#{bonding.interface_name}
+ifcfg=none|#{bonding.interface_name}|BONDING_OPTS="mode=#{bonding.bonding_type.mode} miimon=100"|BOOTPROTO=dhcp|ONBOOT=yes
+ifcfg=#{nic1.mac}|eth0|MASTER=#{bonding.interface_name}|SLAVE=yes|ONBOOT=yes
+ifcfg=#{nic2.mac}|eth1|MASTER=#{bonding.interface_name}|SLAVE=yes|ONBOOT=yes
+HERE
+
+ result = ManagedNodeConfiguration.generate(
+ @host_with_dhcp_bondings,
+ {
+ "#{nic1.mac}" => 'eth0',
+ "#{nic2.mac}" => 'eth1'
+ })
+
+ assert_equal expected, result
+ end
+
end
--
1.5.5.1
More information about the ovirt-devel
mailing list