-- This is the core database schema for ScanCore.
-- It builds on AN::Tools.sql.
-- NOTE: network_interfaces, network_bonds and network_bridges are all used by scan-network (which doesn't
-- exist yet).
-- This stores information about network interfaces on hosts. It is mainly used to match a MAC address to a
-- host. Given that it is possible that network devices can move, the linkage to the host_uuid can change.
CREATE TABLE network_interfaces (
network_interface_uuid uuid not null primary key ,
network_interface_host_uuid uuid not null ,
network_interface_mac_address text , -- This is allowed to be NULL to support bonds and bridges
network_interface_current_name text not null , -- This is the current name of the interface.
network_interface_requested_name text , -- This is the name of the interface that the user requested. This will differ from the current name pending a commit request by the user.
network_interface_speed number not null , -- This is the speed, in bits-per-second, of the interface.
network_interface_mtu number , -- This is the MTU (Maximum Transmitable Size), in bytes, for this interface.
network_interface_link_state text not null , -- This is 'up', 'down' or 'unknown'
network_interface_duplex text not null , -- This is 'full', 'half' or 'unknown'
network_interface_medium text not null , -- This is 'tp' (twisted pair), 'fiber' or whatever they invent in the future.
network_interface_bond_uuid uuid , -- If this iface is in a bond, this will contain the 'bonds -> bond_uuid' that it is slaved to.
network_interface_bridge_uuid uuid , -- If this iface is attached to a bridge, this will contain the 'bridgess -> bridge_uuid' that it is connected to.
modified_date timestamp with time zone not null
) ;
ALTER TABLE network_interface OWNER TO #!variable!user!#;
CREATE TABLE history . network_interface (
history_id bigserial ,
network_interface_uuid uuid not null ,
network_interface_host_uuid uuid ,
network_interface_mac_address text ,
network_interface_current_name text ,
network_interface_requested_name text ,
network_interface_speed number ,
network_interface_mtu number ,
network_interface_link_state text ,
network_interface_duplex text ,
network_interface_medium text ,
network_interface_bond_uuid uuid ,
network_interface_bridge_uuid uuid ,
modified_date timestamp with time zone not null
) ;
ALTER TABLE history . network_interface OWNER TO #!variable!user!#;
CREATE FUNCTION history_network_interface ( ) RETURNS trigger
AS $ $
DECLARE
history_network_interface RECORD ;
BEGIN
SELECT INTO history_network_interface * FROM network_interface WHERE host_uuid = new . host_uuid ;
INSERT INTO history . network_interface
( network_interface_uuid ,
network_interface_host_uuid ,
network_interface_mac_address ,
network_interface_current_name ,
network_interface_requested_name ,
network_interface_speed ,
network_interface_mtu ,
network_interface_link_state ,
network_interface_duplex ,
network_interface_medium ,
network_interface_bond_uuid ,
network_interface_bridge_uuid ,
modified_date )
VALUES
( history_network_interface . network_interface_uuid ,
history_network_interface . network_interface_host_uuid ,
history_network_interface . network_interface_mac_address ,
history_network_interface . network_interface_current_name ,
history_network_interface . network_interface_requested_name ,
history_network_interface . network_interface_speed ,
history_network_interface . network_interface_mtu ,
history_network_interface . network_interface_link_state ,
history_network_interface . network_interface_duplex ,
history_network_interface . network_interface_medium ,
history_network_interface . network_interface_bond_uuid ,
history_network_interface . network_interface_bridge_uuid ,
history_network_interface . modified_date ) ;
RETURN NULL ;
END ;
$ $
LANGUAGE plpgsql ;
ALTER FUNCTION history_network_interface ( ) OWNER TO #!variable!user!#;
CREATE TRIGGER trigger_network_interface
AFTER INSERT OR UPDATE ON network_interface
FOR EACH ROW EXECUTE PROCEDURE history_network_interface ( ) ;
-- This stores information about network bonds (mode=1) on a hosts.
CREATE TABLE bonds (
bond_uuid uuid primary key ,
bond_host_uuid uuid not null ,
bond_name text not null ,
bond_mode numeric not null , -- This is the numerical bond type (will translate to the user's language in ScanCore)
bond_mtu numeric ,
bond_primary_slave text ,
bond_primary_reselect text ,
bond_active_slave text ,
bond_mii_status text ,
bond_mii_polling_interval numeric ,
bond_up_delay numeric ,
bond_down_delay numeric ,
modified_date timestamp with time zone not null ,
FOREIGN KEY ( bond_host_uuid ) REFERENCES hosts ( host_uuid )
) ;
ALTER TABLE bonds OWNER TO #!variable!user!#;
CREATE TABLE history . bonds (
history_id bigserial ,
bond_uuid uuid ,
bond_host_uuid uuid ,
bond_name text ,
bond_mode numeric ,
bond_mtu numeric ,
bond_primary_slave text ,
bond_primary_reselect text ,
bond_active_slave text ,
bond_mii_status text ,
bond_mii_polling_interval numeric ,
bond_up_delay numeric ,
bond_down_delay numeric ,
modified_date timestamp with time zone not null
) ;
ALTER TABLE history . bonds OWNER TO #!variable!user!#;
CREATE FUNCTION history_bonds ( ) RETURNS trigger
AS $ $
DECLARE
history_bonds RECORD ;
BEGIN
SELECT INTO history_bonds * FROM bonds WHERE bond_uuid = new . bond_uuid ;
INSERT INTO history . bonds
( bond_uuid ,
bond_host_uuid ,
bond_name ,
bond_mode ,
bond_mtu ,
bond_primary_slave ,
bond_primary_reselect ,
bond_active_slave ,
bond_mii_status ,
bond_mii_polling_interval ,
bond_up_delay ,
bond_down_delay ,
modified_date )
VALUES
( history_bond . bond_uuid ,
history_bond . bond_host_uuid ,
history_bond . bond_name ,
history_bond . bond_mode ,
history_bond . bond_mtu ,
history_bond . bond_primary_slave ,
history_bond . bond_primary_reselect ,
history_bond . bond_active_slave ,
history_bond . bond_mii_status ,
history_bond . bond_mii_polling_interval ,
history_bond . bond_up_delay ,
history_bond . bond_down_delay ,
history_bond . modified_date ) ;
RETURN NULL ;
END ;
$ $
LANGUAGE plpgsql ;
ALTER FUNCTION history_bonds ( ) OWNER TO #!variable!user!#;
CREATE TRIGGER trigger_bond
AFTER INSERT OR UPDATE ON bonds
FOR EACH ROW EXECUTE PROCEDURE history_bond ( ) ;
-- This stores information about network bridges.
CREATE TABLE bridges (
bridge_uuid uuid primary key ,
bridge_host_uuid uuid not null ,
bridge_name text not null ,
bridge_id text ,
bridge_stp_enabled text ,
modified_date timestamp with time zone not null ,
FOREIGN KEY ( bridge_host_uuid ) REFERENCES hosts ( host_uuid )
) ;
ALTER TABLE bridges OWNER TO #!variable!user!#;
CREATE TABLE history . bridges (
history_id bigserial ,
bridge_uuid uuid ,
bridge_host_uuid uuid ,
bridge_name text ,
bridge_id text ,
bridge_stp_enabled text ,
modified_date timestamp with time zone not null
) ;
ALTER TABLE history . bridges OWNER TO #!variable!user!#;
CREATE FUNCTION history_bridges ( ) RETURNS trigger
AS $ $
DECLARE
history_bridges RECORD ;
BEGIN
SELECT INTO history_bridges * FROM bridges WHERE bridge_uuid = new . bridge_uuid ;
INSERT INTO history . bridges
( bridge_uuid ,
bridge_host_uuid ,
bridge_name ,
bridge_name ,
bridge_id ,
bridge_stp_enabled ,
modified_date )
VALUES
( history_bridge . bridge_uuid ,
history_bridge . bridge_host_uuid ,
history_bridge . bridge_name ,
history_bridge . bridge_name ,
history_bridge . bridge_id ,
history_bridge . bridge_stp_enabled ,
history_bridge . modified_date ) ;
RETURN NULL ;
END ;
$ $
LANGUAGE plpgsql ;
ALTER FUNCTION history_bridges ( ) OWNER TO #!variable!user!#;
CREATE TRIGGER trigger_bridge
AFTER INSERT OR UPDATE ON bridges
FOR EACH ROW EXECUTE PROCEDURE history_bridge ( ) ;