* Made the sysfs directory references static.

* Fixed a typo in Database->insert_or_update_bridges().
* Added 'bond_mac_address' and 'bond_operational' to the bonds table.
* Gathered data needed for bonds in tools/anvil-update-states and got bonds recording successfully (but more testing needed).

Signed-off-by: Digimer <digimer@alteeve.ca>
This commit is contained in:
Digimer 2018-05-29 17:57:55 -04:00
parent 66f280c9a7
commit b0232c6180
5 changed files with 201 additions and 76 deletions

View File

@ -863,9 +863,6 @@ sub _set_paths
secure => { secure => {
postgres_pgpass => "/var/lib/pgsql/.pgpass", postgres_pgpass => "/var/lib/pgsql/.pgpass",
}, },
sysfs => {
network_interfaces => "/sys/class/net",
},
sql => { sql => {
'anvil.sql' => "/usr/sbin/anvil.sql", 'anvil.sql' => "/usr/sbin/anvil.sql",
}, },

View File

@ -1446,14 +1446,14 @@ sub insert_or_update_bridges
my $bridge_id = $parameter->{bridge_id} ? $parameter->{bridge_id} : "NULL"; my $bridge_id = $parameter->{bridge_id} ? $parameter->{bridge_id} : "NULL";
my $bridge_stp_enabled = $parameter->{bridge_stp_enabled} ? $parameter->{bridge_stp_enabled} : "NULL"; my $bridge_stp_enabled = $parameter->{bridge_stp_enabled} ? $parameter->{bridge_stp_enabled} : "NULL";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
uuid => $uuid, uuid => $uuid,
file => $file, file => $file,
line => $line, line => $line,
bridge_uuid => $bridge_uuid, bridge_uuid => $bridge_uuid,
bridge_host_uuid => $bridge_host_uuid, bridge_host_uuid => $bridge_host_uuid,
bridge_name => $bridge_name, bridge_name => $bridge_name,
bridge_id => $bridge_id, bridge_id => $bridge_id,
bridge_down_delay => $bridge_down_delay, bridge_stp_enabled => $bridge_stp_enabled,
}}); }});
if (not $bridge_name) if (not $bridge_name)
@ -1642,12 +1642,16 @@ This is the bond's device name.
=head2 bond_mode (required) =head2 bond_mode (required)
This is the bonding mode named used for this bond. This is the bonding mode used for this bond.
=head2 bond_mtu (optional) =head2 bond_mtu (optional)
This is the MTU for the bonded interface. This is the MTU for the bonded interface.
=head2 bond_operational (optional)
This is set to C<< up >>, C<< down >> or C<< unknown >>. It indicates whether the bond has a working slaved interface or not.
=head2 bond_primary_slave (optional) =head2 bond_primary_slave (optional)
This is the primary interface name in the bond. This is the primary interface name in the bond.
@ -1660,6 +1664,10 @@ This is the primary interface reselect policy.
This is the interface currently being used by the bond. This is the interface currently being used by the bond.
=head2 bond_mac_address (optional)
This is the current / active MAC address in use by the bond interface.
=head2 bond_mii_status (optional) =head2 bond_mii_status (optional)
This is the current status of the interface (C<< up >> or C<< down >>). This is the current status of the interface (C<< up >> or C<< down >>).
@ -1698,6 +1706,8 @@ sub insert_or_update_bonds
my $bond_mii_polling_interval = $parameter->{bond_mii_polling_interval} ? $parameter->{bond_mii_polling_interval} : "NULL"; my $bond_mii_polling_interval = $parameter->{bond_mii_polling_interval} ? $parameter->{bond_mii_polling_interval} : "NULL";
my $bond_up_delay = $parameter->{bond_up_delay} ? $parameter->{bond_up_delay} : "NULL"; my $bond_up_delay = $parameter->{bond_up_delay} ? $parameter->{bond_up_delay} : "NULL";
my $bond_down_delay = $parameter->{bond_down_delay} ? $parameter->{bond_down_delay} : "NULL"; my $bond_down_delay = $parameter->{bond_down_delay} ? $parameter->{bond_down_delay} : "NULL";
my $bond_mac_address = $parameter->{bond_mac_address} ? $parameter->{bond_mac_address} : "NULL";
my $bond_operational = $parameter->{bond_operational} ? $parameter->{bond_operational} : "NULL";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
uuid => $uuid, uuid => $uuid,
file => $file, file => $file,
@ -1714,6 +1724,8 @@ sub insert_or_update_bonds
bond_mii_polling_interval => $bond_mii_polling_interval, bond_mii_polling_interval => $bond_mii_polling_interval,
bond_up_delay => $bond_up_delay, bond_up_delay => $bond_up_delay,
bond_down_delay => $bond_down_delay, bond_down_delay => $bond_down_delay,
bond_mac_address => $bond_mac_address,
bond_operational => $bond_operational,
}}); }});
if (not $bond_name) if (not $bond_name)
@ -1803,6 +1815,8 @@ INSERT INTO
bond_mii_polling_interval, bond_mii_polling_interval,
bond_up_delay, bond_up_delay,
bond_down_delay, bond_down_delay,
bond_mac_address,
bond_operational,
modified_date modified_date
) VALUES ( ) VALUES (
".$anvil->data->{sys}{use_db_fh}->quote($bond_uuid).", ".$anvil->data->{sys}{use_db_fh}->quote($bond_uuid).",
@ -1817,6 +1831,8 @@ INSERT INTO
".$anvil->data->{sys}{use_db_fh}->quote($bond_mii_polling_interval).", ".$anvil->data->{sys}{use_db_fh}->quote($bond_mii_polling_interval).",
".$anvil->data->{sys}{use_db_fh}->quote($bond_up_delay).", ".$anvil->data->{sys}{use_db_fh}->quote($bond_up_delay).",
".$anvil->data->{sys}{use_db_fh}->quote($bond_down_delay).", ".$anvil->data->{sys}{use_db_fh}->quote($bond_down_delay).",
".$anvil->data->{sys}{use_db_fh}->quote($bond_mac_address).",
".$anvil->data->{sys}{use_db_fh}->quote($bond_operational).",
".$anvil->data->{sys}{use_db_fh}->quote($anvil->data->{sys}{db_timestamp})." ".$anvil->data->{sys}{use_db_fh}->quote($anvil->data->{sys}{db_timestamp})."
); );
"; ";
@ -1839,7 +1855,9 @@ SELECT
bond_mii_status, bond_mii_status,
bond_mii_polling_interval, bond_mii_polling_interval,
bond_up_delay, bond_up_delay,
bond_down_delay bond_down_delay,
bond_mac_address,
bond_operational
FROM FROM
bonds bonds
WHERE WHERE
@ -1866,6 +1884,8 @@ WHERE
my $old_bond_mii_polling_interval = defined $row->[8] ? $row->[8] : "NULL"; my $old_bond_mii_polling_interval = defined $row->[8] ? $row->[8] : "NULL";
my $old_bond_up_delay = defined $row->[9] ? $row->[9] : "NULL"; my $old_bond_up_delay = defined $row->[9] ? $row->[9] : "NULL";
my $old_bond_down_delay = defined $row->[10] ? $row->[10] : "NULL"; my $old_bond_down_delay = defined $row->[10] ? $row->[10] : "NULL";
my $old_bond_mac_address = defined $row->[11] ? $row->[11] : "NULL";
my $old_bond_operational = defined $row->[12] ? $row->[12] : "NULL";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
old_bond_host_uuid => $old_bond_host_uuid, old_bond_host_uuid => $old_bond_host_uuid,
old_bond_name => $old_bond_name, old_bond_name => $old_bond_name,
@ -1878,6 +1898,8 @@ WHERE
old_bond_mii_polling_interval => $old_bond_mii_polling_interval, old_bond_mii_polling_interval => $old_bond_mii_polling_interval,
old_bond_up_delay => $old_bond_up_delay, old_bond_up_delay => $old_bond_up_delay,
old_bond_down_delay => $old_bond_down_delay, old_bond_down_delay => $old_bond_down_delay,
old_bond_mac_address => $old_bond_mac_address,
old_bond_operational => $old_bond_operational,
}}); }});
# Anything change? # Anything change?
@ -1891,7 +1913,9 @@ WHERE
($old_bond_mii_status ne $bond_mii_status) or ($old_bond_mii_status ne $bond_mii_status) or
($old_bond_mii_polling_interval ne $bond_mii_polling_interval) or ($old_bond_mii_polling_interval ne $bond_mii_polling_interval) or
($old_bond_up_delay ne $bond_up_delay) or ($old_bond_up_delay ne $bond_up_delay) or
($old_bond_down_delay ne $bond_down_delay)) ($old_bond_down_delay ne $bond_down_delay) or
($old_bond_mac_address ne $bond_mac_address) or
($old_bond_operational ne $bond_operational))
{ {
# Something changed, save. # Something changed, save.
my $query = " my $query = "
@ -1909,6 +1933,8 @@ SET
bond_mii_polling_interval = ".$anvil->data->{sys}{use_db_fh}->quote($bond_mii_polling_interval).", bond_mii_polling_interval = ".$anvil->data->{sys}{use_db_fh}->quote($bond_mii_polling_interval).",
bond_up_delay = ".$anvil->data->{sys}{use_db_fh}->quote($bond_up_delay).", bond_up_delay = ".$anvil->data->{sys}{use_db_fh}->quote($bond_up_delay).",
bond_down_delay = ".$anvil->data->{sys}{use_db_fh}->quote($bond_down_delay).", bond_down_delay = ".$anvil->data->{sys}{use_db_fh}->quote($bond_down_delay).",
bond_mac_address = ".$anvil->data->{sys}{use_db_fh}->quote($bond_mac_address).",
bond_operational = ".$anvil->data->{sys}{use_db_fh}->quote($bond_operational).",
modified_date = ".$anvil->data->{sys}{use_db_fh}->quote($anvil->data->{sys}{db_timestamp})." modified_date = ".$anvil->data->{sys}{use_db_fh}->quote($anvil->data->{sys}{db_timestamp})."
WHERE WHERE
bond_uuid = ".$anvil->data->{sys}{use_db_fh}->quote($bond_uuid)." bond_uuid = ".$anvil->data->{sys}{use_db_fh}->quote($bond_uuid)."

View File

@ -46,7 +46,7 @@ sub scan
{ {
my ($anvil) = @_; my ($anvil) = @_;
my $directory = $anvil->data->{path}{sysfs}{network_interfaces}; my $directory = "/sys/class/net";
print $THIS_FILE." ".__LINE__."; directory: [".$directory."]\n"; print $THIS_FILE." ".__LINE__."; directory: [".$directory."]\n";
local(*DIRECTORY); local(*DIRECTORY);
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0018", variables => { directory => $directory }}); $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0018", variables => { directory => $directory }});

View File

@ -54,7 +54,7 @@ sub report_network
# We'll read through '/sys/class/net' looking for network interfaces. # We'll read through '/sys/class/net' looking for network interfaces.
# * 'sys::network::interface::<iface_name>::ip' - If an IP address is set # * 'sys::network::interface::<iface_name>::ip' - If an IP address is set
# * 'sys::network::interface::<iface_name>::subnet' - If an IP is set # * 'sys::network::interface::<iface_name>::subnet' - If an IP is set
my $directory = $anvil->data->{path}{sysfs}{network_interfaces}; my $directory = "/sys/class/net";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { directory => $directory }}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { directory => $directory }});
local(*DIRECTORY); local(*DIRECTORY);
@ -64,7 +64,7 @@ sub report_network
{ {
next if $file eq "."; next if $file eq ".";
next if $file eq ".."; next if $file eq "..";
next if $file eq "lo"; next if $file eq "lo";
next if $file =~ /virbr\d/; next if $file =~ /virbr\d/;
my $full_path = "$directory/$file"; my $full_path = "$directory/$file";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { full_path => $full_path }}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { full_path => $full_path }});
@ -77,12 +77,21 @@ sub report_network
my $mtu = -e $full_path."/mtu" ? $anvil->Storage->read_file({file => $full_path."/mtu"}) : 0; my $mtu = -e $full_path."/mtu" ? $anvil->Storage->read_file({file => $full_path."/mtu"}) : 0;
my $duplex = -e $full_path."/duplex" ? $anvil->Storage->read_file({file => $full_path."/duplex"}) : "unknown"; # full or half? my $duplex = -e $full_path."/duplex" ? $anvil->Storage->read_file({file => $full_path."/duplex"}) : "unknown"; # full or half?
my $operational = -e $full_path."/operstate" ? $anvil->Storage->read_file({file => $full_path."/operstate"}) : "unknown"; # up or down my $operational = -e $full_path."/operstate" ? $anvil->Storage->read_file({file => $full_path."/operstate"}) : "unknown"; # up or down
my $ip_address = "";
my $subnet_mask = "";
my $speed = $link_state ? $anvil->Storage->read_file({file => $full_path."/speed", debug => 2}) : 0; # Mbps (ie: 1000 = Gbps), gives a very high number for unplugged link my $speed = $link_state ? $anvil->Storage->read_file({file => $full_path."/speed", debug => 2}) : 0; # Mbps (ie: 1000 = Gbps), gives a very high number for unplugged link
my $media = "unknown"; my $media = "unknown";
my $type = "interface"; my $type = "interface";
# These are variables that will be needed if this is a bond interface.
my $ip_address = "";
my $subnet_mask = "";
my $bond_mode = "";
my $primary_slave = "";
my $primary_reselect = "";
my $active_slave = "";
my $mii_polling_interval = "";
my $up_delay = "";
my $down_delay = "";
if (exists $anvil->data->{sys}{network}{interface}{$interface}) if (exists $anvil->data->{sys}{network}{interface}{$interface})
{ {
$ip_address = $anvil->data->{sys}{network}{interface}{$interface}{ip} ? $anvil->data->{sys}{network}{interface}{$interface}{ip} : ""; $ip_address = $anvil->data->{sys}{network}{interface}{$interface}{ip} ? $anvil->data->{sys}{network}{interface}{$interface}{ip} : "";
@ -129,17 +138,43 @@ sub report_network
# Yup, we'll neet to dig into the bond proc files to get the proper slaved # Yup, we'll neet to dig into the bond proc files to get the proper slaved
# interface MAC addresses. # interface MAC addresses.
$type = "bond"; $type = "bond";
# Read the bond mode.
$bond_mode = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/mode"});
$bond_mode =~ s/\s.*//;
$primary_slave = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/primary"});
$primary_reselect = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/primary_reselect"});
$primary_reselect =~ s/\s.*//;
$active_slave = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/active_slave"});
$mii_polling_interval = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/miimon"});
$up_delay = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/updelay"});
$down_delay = $anvil->Storage->read_file({file => "/sys/devices/virtual/net/".$interface."/bonding/downdelay"});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
active_slave => $active_slave,
bond_mode => $bond_mode,
mii_polling_interval => $mii_polling_interval,
primary_reselect => $primary_reselect,
primary_slave => $primary_slave,
type => $type,
}});
} }
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
duplex => $duplex, active_slave => $active_slave,
interface => $interface, bond_mode => $bond_mode,
mac_address => $mac_address, down_delay => $down_delay,
mtu => $mtu, duplex => $duplex,
operational => $operational, interface => $interface,
speed => $speed, mac_address => $mac_address,
subnet_mask => $subnet_mask, mii_polling_interval => $mii_polling_interval,
type => $type, mtu => $mtu,
operational => $operational,
primary_reselect => $primary_reselect,
primary_slave => $primary_slave,
speed => $speed,
subnet_mask => $subnet_mask,
type => $type,
up_delay => $up_delay,
}}); }});
# If the MAC address starts with '52:54:00', we've got a virtio NIC. # If the MAC address starts with '52:54:00', we've got a virtio NIC.
@ -175,28 +210,42 @@ sub report_network
# Log # Log
$anvil->data->{network}{interfaces}{by_name}{$interface} = { $anvil->data->{network}{interfaces}{by_name}{$interface} = {
duplex => $duplex, active_slave => $active_slave,
ip_address => $ip_address, bond_mode => $bond_mode,
link_state => $link_state, down_delay => $down_delay,
mac_address => $mac_address, duplex => $duplex,
media => $media, ip_address => $ip_address,
mtu => $mtu, link_state => $link_state,
operational => $operational, mac_address => $mac_address,
speed => $speed, media => $media,
subnet_mask => $subnet_mask, mii_polling_interval => $mii_polling_interval,
type => $type, mtu => $mtu,
operational => $operational,
primary_reselect => $primary_reselect,
primary_slave => $primary_slave,
speed => $speed,
subnet_mask => $subnet_mask,
type => $type,
up_delay => $up_delay,
}; };
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"network::interfaces::by_name::${interface}::duplex" => $duplex, "network::interfaces::by_name::${interface}::active_slave" => $anvil->data->{network}{interfaces}{by_name}{$interface}{active_slave},
"network::interfaces::by_name::${interface}::ip_address" => $ip_address, "network::interfaces::by_name::${interface}::bond_mode" => $anvil->data->{network}{interfaces}{by_name}{$interface}{bond_mode},
"network::interfaces::by_name::${interface}::link_state" => $link_state, "network::interfaces::by_name::${interface}::down_delay" => $anvil->data->{network}{interfaces}{by_name}{$interface}{down_delay},
"network::interfaces::by_name::${interface}::mac_address" => $mac_address, "network::interfaces::by_name::${interface}::duplex" => $anvil->data->{network}{interfaces}{by_name}{$interface}{duplex},
"network::interfaces::by_name::${interface}::media" => $media, "network::interfaces::by_name::${interface}::ip_address" => $anvil->data->{network}{interfaces}{by_name}{$interface}{ip_address},
"network::interfaces::by_name::${interface}::mtu" => $mtu, "network::interfaces::by_name::${interface}::link_state" => $anvil->data->{network}{interfaces}{by_name}{$interface}{link_state},
"network::interfaces::by_name::${interface}::operational" => $operational, "network::interfaces::by_name::${interface}::mac_address" => $anvil->data->{network}{interfaces}{by_name}{$interface}{mac_address},
"network::interfaces::by_name::${interface}::speed" => $speed, "network::interfaces::by_name::${interface}::media" => $anvil->data->{network}{interfaces}{by_name}{$interface}{media},
"network::interfaces::by_name::${interface}::subnet_mask" => $subnet_mask, "network::interfaces::by_name::${interface}::mii_polling_interval" => $anvil->data->{network}{interfaces}{by_name}{$interface}{mii_polling_interval},
"network::interfaces::by_name::${interface}::type" => $type, "network::interfaces::by_name::${interface}::mtu" => $anvil->data->{network}{interfaces}{by_name}{$interface}{mtu},
"network::interfaces::by_name::${interface}::operational" => $anvil->data->{network}{interfaces}{by_name}{$interface}{operational},
"network::interfaces::by_name::${interface}::primary_reselect" => $anvil->data->{network}{interfaces}{by_name}{$interface}{primary_reselect},
"network::interfaces::by_name::${interface}::primary_slave" => $anvil->data->{network}{interfaces}{by_name}{$interface}{primary_slave},
"network::interfaces::by_name::${interface}::speed" => $anvil->data->{network}{interfaces}{by_name}{$interface}{speed},
"network::interfaces::by_name::${interface}::subnet_mask" => $anvil->data->{network}{interfaces}{by_name}{$interface}{subnet_mask},
"network::interfaces::by_name::${interface}::type" => $anvil->data->{network}{interfaces}{by_name}{$interface}{type},
"network::interfaces::by_name::${interface}::up_delay" => $anvil->data->{network}{interfaces}{by_name}{$interface}{up_delay},
}}); }});
} }
} }
@ -204,34 +253,48 @@ sub report_network
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{interfaces}{by_name}}) foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{interfaces}{by_name}})
{ {
my $duplex = $anvil->data->{network}{interfaces}{by_name}{$interface}{duplex}; my $active_slave = $anvil->data->{network}{interfaces}{by_name}{$interface}{active_slave};
my $ip_address = $anvil->data->{network}{interfaces}{by_name}{$interface}{ip_address}; my $bond_mode = $anvil->data->{network}{interfaces}{by_name}{$interface}{bond_mode};
my $link_state = $anvil->data->{network}{interfaces}{by_name}{$interface}{link_state}; my $down_delay = $anvil->data->{network}{interfaces}{by_name}{$interface}{down_delay};
my $mac_address = $anvil->data->{network}{interfaces}{by_name}{$interface}{mac_address}; my $duplex = $anvil->data->{network}{interfaces}{by_name}{$interface}{duplex};
my $media = $anvil->data->{network}{interfaces}{by_name}{$interface}{media}; my $ip_address = $anvil->data->{network}{interfaces}{by_name}{$interface}{ip_address};
my $mtu = $anvil->data->{network}{interfaces}{by_name}{$interface}{mtu}; my $link_state = $anvil->data->{network}{interfaces}{by_name}{$interface}{link_state};
my $operational = $anvil->data->{network}{interfaces}{by_name}{$interface}{operational}; my $mac_address = $anvil->data->{network}{interfaces}{by_name}{$interface}{mac_address};
my $speed = $anvil->data->{network}{interfaces}{by_name}{$interface}{speed}; my $media = $anvil->data->{network}{interfaces}{by_name}{$interface}{media};
my $subnet_mask = $anvil->data->{network}{interfaces}{by_name}{$interface}{subnet_mask}; my $mii_polling_interval = $anvil->data->{network}{interfaces}{by_name}{$interface}{mii_polling_interval};
my $type = $anvil->data->{network}{interfaces}{by_name}{$interface}{type}; my $mtu = $anvil->data->{network}{interfaces}{by_name}{$interface}{mtu};
my $default_gateway = $anvil->data->{sys}{network}{interface}{$interface}{default_gateway}; my $operational = $anvil->data->{network}{interfaces}{by_name}{$interface}{operational};
my $gateway = $anvil->data->{sys}{network}{interface}{$interface}{gateway}; my $primary_reselect = $anvil->data->{network}{interfaces}{by_name}{$interface}{primary_reselect};
my $dns = $anvil->data->{sys}{network}{interface}{$interface}{dns}; my $primary_slave = $anvil->data->{network}{interfaces}{by_name}{$interface}{primary_slave};
my $speed = $anvil->data->{network}{interfaces}{by_name}{$interface}{speed};
my $subnet_mask = $anvil->data->{network}{interfaces}{by_name}{$interface}{subnet_mask};
my $type = $anvil->data->{network}{interfaces}{by_name}{$interface}{type};
my $up_delay = $anvil->data->{network}{interfaces}{by_name}{$interface}{up_delay};
my $default_gateway = $anvil->data->{sys}{network}{interface}{$interface}{default_gateway};
my $gateway = $anvil->data->{sys}{network}{interface}{$interface}{gateway};
my $dns = $anvil->data->{sys}{network}{interface}{$interface}{dns};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
default_gateway => $default_gateway, active_slave => $active_slave,
dns => $dns, bond_mode => $bond_mode,
duplex => $duplex, default_gateway => $default_gateway,
gateway => $gateway, down_delay => $down_delay,
interface => $interface, dns => $dns,
ip_address => $ip_address, duplex => $duplex,
link_state => $link_state, gateway => $gateway,
mac_address => $mac_address, interface => $interface,
media => $media, ip_address => $ip_address,
mtu => $mtu, link_state => $link_state,
operational => $operational, mac_address => $mac_address,
speed => $speed, media => $media,
subnet_mask => $subnet_mask, mii_polling_interval => $mii_polling_interval,
type => $type, mtu => $mtu,
operational => $operational,
primary_reselect => $primary_reselect,
primary_slave => $primary_slave,
speed => $speed,
subnet_mask => $subnet_mask,
type => $type,
up_delay => $up_delay,
}}); }});
if ($type eq "interface") if ($type eq "interface")
@ -266,6 +329,37 @@ sub report_network
} }
elsif ($type eq "bond") elsif ($type eq "bond")
{ {
my $bond_uuid = $anvil->Database->insert_or_update_bonds({
file => $THIS_FILE,
line => __LINE__,
bond_name => $interface,
bond_mode => $bond_mode,
bond_mtu => $mtu,
bond_link_state => $link_state,
bond_operational => $operational,
bond_mac_address => $mac_address,
bond_primary_slave => $primary_slave,
bond_primary_reselect => $primary_reselect,
bond_active_slave => $active_slave,
bond_mii_polling_interval => $mii_polling_interval,
bond_up_delay => $up_delay,
bond_down_delay => $down_delay,
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { bond_uuid => $bond_uuid }});
if (($bond_uuid) && ($ip_address))
{
my $ip_address_uuid = $anvil->Database->insert_or_update_ip_addresses({
debug => 2,
ip_address_on_type => $type,
ip_address_on_uuid => $bond_uuid,
ip_address_address => $ip_address,
ip_address_subnet_mask => $subnet_mask,
ip_address_gateway => $gateway,
ip_address_default_gateway => $default_gateway,
ip_address_dns => $dns,
});
}
} }
} }

View File

@ -520,7 +520,7 @@ CREATE TABLE bonds (
bond_uuid uuid not null primary key, bond_uuid uuid not null primary key,
bond_host_uuid uuid not null, bond_host_uuid uuid not null,
bond_name text not null, bond_name text not null,
bond_mode integer not null, -- This is the numerical bond type (will translate to the user's language in the Anvil!) bond_mode text not null, -- This is the numerical bond type (will translate to the user's language in the Anvil!)
bond_mtu bigint, bond_mtu bigint,
bond_primary_slave text, bond_primary_slave text,
bond_primary_reselect text, bond_primary_reselect text,
@ -529,6 +529,8 @@ CREATE TABLE bonds (
bond_mii_polling_interval bigint, bond_mii_polling_interval bigint,
bond_up_delay bigint, bond_up_delay bigint,
bond_down_delay bigint, bond_down_delay bigint,
bond_mac_address text,
bond_operational text, -- This is 'up', 'down' or 'unknown'
modified_date timestamp with time zone not null, modified_date timestamp with time zone not null,
FOREIGN KEY(bond_host_uuid) REFERENCES hosts(host_uuid) FOREIGN KEY(bond_host_uuid) REFERENCES hosts(host_uuid)
@ -540,7 +542,7 @@ CREATE TABLE history.bonds (
bond_uuid uuid, bond_uuid uuid,
bond_host_uuid uuid, bond_host_uuid uuid,
bond_name text, bond_name text,
bond_mode integer, bond_mode text,
bond_mtu bigint, bond_mtu bigint,
bond_primary_slave text, bond_primary_slave text,
bond_primary_reselect text, bond_primary_reselect text,
@ -549,6 +551,8 @@ CREATE TABLE history.bonds (
bond_mii_polling_interval bigint, bond_mii_polling_interval bigint,
bond_up_delay bigint, bond_up_delay bigint,
bond_down_delay bigint, bond_down_delay bigint,
bond_mac_address text,
bond_operational text,
modified_date timestamp with time zone not null modified_date timestamp with time zone not null
); );
ALTER TABLE history.bonds OWNER TO #!variable!user!#; ALTER TABLE history.bonds OWNER TO #!variable!user!#;
@ -572,6 +576,8 @@ BEGIN
bond_mii_polling_interval, bond_mii_polling_interval,
bond_up_delay, bond_up_delay,
bond_down_delay, bond_down_delay,
bond_mac_address,
bond_operational,
modified_date) modified_date)
VALUES VALUES
(history_bonds.bond_uuid, (history_bonds.bond_uuid,
@ -586,6 +592,8 @@ BEGIN
history_bonds.bond_mii_polling_interval, history_bonds.bond_mii_polling_interval,
history_bonds.bond_up_delay, history_bonds.bond_up_delay,
history_bonds.bond_down_delay, history_bonds.bond_down_delay,
history_bonds.bond_mac_address,
history_bonds.bond_operational,
history_bonds.modified_date); history_bonds.modified_date);
RETURN NULL; RETURN NULL;
END; END;