Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
7.7 KiB

-- 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();