This commit was manufactured by cvs2svn to create branch
[plcapi.git] / planetlab4.sql
index 6d825b2..d129086 100644 (file)
@@ -9,9 +9,11 @@
 --
 -- Copyright (C) 2006 The Trustees of Princeton University
 --
--- $Id: planetlab4.sql,v 1.65 2007/01/26 19:11:41 tmack Exp $
+-- $Id: planetlab4.sql,v 1.81 2007/08/08 19:50:40 tmack Exp $
 --
 
+SET client_encoding = 'UNICODE';
+
 --------------------------------------------------------------------------------
 -- Aggregates and store procedures
 --------------------------------------------------------------------------------
@@ -31,10 +33,11 @@ CREATE AGGREGATE array_accum (
 
 -- Database version
 CREATE TABLE plc_db_version (
-       version integer NOT NULL 
+    version integer NOT NULL,
+    subversion integer NOT NULL DEFAULT 0
 ) WITH OIDS;
 
-INSERT INTO plc_db_version (version) VALUES (4);
+INSERT INTO plc_db_version (version, subversion) VALUES (4, 2);
 
 --------------------------------------------------------------------------------
 -- Accounts
@@ -88,6 +91,7 @@ CREATE TABLE sites (
     latitude real,
     longitude real,
     url text,
+    ext_consortium_id integer, -- external consortium id
 
     -- Timestamps
     date_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -278,7 +282,8 @@ CREATE TABLE nodes (
 
     -- Timestamps
     date_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
+    last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    last_contact timestamp without time zone   
 ) WITH OIDS;
 CREATE INDEX nodes_hostname_idx ON nodes (hostname) WHERE deleted IS false;
 CREATE INDEX nodes_site_id_idx ON nodes (site_id) WHERE deleted IS false;
@@ -288,6 +293,7 @@ CREATE VIEW site_nodes AS
 SELECT site_id,
 array_accum(node_id) AS node_ids
 FROM nodes
+WHERE deleted IS false
 GROUP BY site_id;
 
 --------------------------------------------------------------------------------
@@ -504,6 +510,7 @@ CREATE TABLE slice_instantiations (
 INSERT INTO slice_instantiations (instantiation) VALUES ('not-instantiated'); -- Placeholder slice
 INSERT INTO slice_instantiations (instantiation) VALUES ('plc-instantiated'); -- Instantiated by Node Manager
 INSERT INTO slice_instantiations (instantiation) VALUES ('delegated'); -- Manually instantiated
+INSERT INTO slice_instantiations (instantiation) VALUES ('nm-controller'); -- NM Controller
 
 -- Slices
 CREATE TABLE slices (
@@ -517,7 +524,7 @@ CREATE TABLE slices (
 
     max_nodes integer NOT NULL DEFAULT 100, -- Maximum number of nodes that can be assigned to this slice
 
-    creator_person_id integer REFERENCES persons NOT NULL, -- Creator
+    creator_person_id integer REFERENCES persons, -- Creator
     created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Creation date
     expires timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP + '2 weeks', -- Expiration date
 
@@ -584,6 +591,25 @@ array_accum(slice_id) AS slice_ids
 FROM slice_person
 GROUP BY person_id;
 
+--------------------------------------------------------------------------------
+-- Slice whitelist
+--------------------------------------------------------------------------------
+-- slice whitelist on nodes
+CREATE TABLE node_slice_whitelist (
+    node_id integer REFERENCES nodes NOT NULL, -- Node id of whitelist
+    slice_id integer REFERENCES slices NOT NULL, -- Slice id thats allowd on this node
+    PRIMARY KEY (node_id, slice_id)
+) WITH OIDS;
+CREATE INDEX node_slice_whitelist_node_id_idx ON node_slice_whitelist (node_id);
+CREATE INDEX node_slice_whitelist_slice_id_idx ON node_slice_whitelist (slice_id);
+
+-- Slices on each node
+CREATE VIEW node_slices_whitelist AS
+SELECT node_id,
+array_accum(slice_id) AS slice_ids_whitelist
+FROM node_slice_whitelist
+GROUP BY node_id;
+
 --------------------------------------------------------------------------------
 -- Slice attributes
 --------------------------------------------------------------------------------
@@ -601,11 +627,13 @@ CREATE TABLE slice_attribute (
     slice_attribute_id serial PRIMARY KEY, -- Slice attribute identifier
     slice_id integer REFERENCES slices NOT NULL, -- Slice identifier
     node_id integer REFERENCES nodes, -- Sliver attribute if set
+    nodegroup_id integer REFERENCES nodegroups, -- Node group attribute if set
     attribute_type_id integer REFERENCES slice_attribute_types NOT NULL, -- Attribute type identifier
     value text
 ) WITH OIDS;
 CREATE INDEX slice_attribute_slice_id_idx ON slice_attribute (slice_id);
 CREATE INDEX slice_attribute_node_id_idx ON slice_attribute (node_id);
+CREATE INDEX slice_attribute_nodegroup_id_idx ON slice_attribute (nodegroup_id);
 
 CREATE VIEW slice_attributes AS
 SELECT slice_id,
@@ -613,6 +641,21 @@ array_accum(slice_attribute_id) AS slice_attribute_ids
 FROM slice_attribute
 GROUP BY slice_id;
 
+--------------------------------------------------------------------------------
+-- Initscripts
+--------------------------------------------------------------------------------
+
+-- Initscripts
+CREATE TABLE initscripts (
+    initscript_id serial PRIMARY KEY, -- Initscript identifier
+    name text NOT NULL, -- Initscript name
+    enabled bool NOT NULL DEFAULT true, -- Initscript is active
+    script text NOT NULL, -- Initscript
+    UNIQUE (name)
+) WITH OIDS;
+CREATE INDEX initscripts_name_idx ON initscripts (name);
+
+
 --------------------------------------------------------------------------------
 -- Peers
 --------------------------------------------------------------------------------
@@ -751,10 +794,10 @@ CREATE TABLE events (
     event_id serial PRIMARY KEY,  -- Event identifier
     person_id integer REFERENCES persons, -- Person responsible for event, if any
     node_id integer REFERENCES nodes, -- Node responsible for event, if any
+    auth_type text, -- Type of auth used. i.e. AuthMethod
     fault_code integer NOT NULL DEFAULT 0, -- Did this event result in error
     call_name text NOT NULL, -- Call responsible for this event
     call text NOT NULL, -- Call responsible for this event, including parameters
-    object_type text, -- What type of object is this event affecting
     message text, -- High level description of this event
     runtime float DEFAULT 0, -- Event run time
     time timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP -- Event timestamp
@@ -763,14 +806,17 @@ CREATE TABLE events (
 -- Database object(s) that may have been affected by a particular event
 CREATE TABLE event_object (
     event_id integer REFERENCES events NOT NULL, -- Event identifier
-    object_id integer NOT NULL -- Object identifier
+    object_id integer NOT NULL, -- Object identifier
+    object_type text NOT NULL Default 'Unknown' -- What type of object is this event affecting
 ) WITH OIDS;
 CREATE INDEX event_object_event_id_idx ON event_object (event_id);
 CREATE INDEX event_object_object_id_idx ON event_object (object_id);
+CREATE INDEX event_object_object_type_idx ON event_object (object_type);
 
 CREATE VIEW event_objects AS
 SELECT event_id,
-array_accum(object_id) AS object_ids
+array_accum(object_id) AS object_ids,
+array_accum(object_type) AS object_types
 FROM event_object
 GROUP BY event_id;
 
@@ -778,21 +824,23 @@ GROUP BY event_id;
 -- Useful views
 --------------------------------------------------------------------------------
 
-CREATE VIEW view_events AS
+CREATE OR REPLACE VIEW view_events AS
 SELECT
 events.event_id,
 events.person_id,
 events.node_id,
+events.auth_type,
 events.fault_code,
 events.call_name,
 events.call,
 events.message,
 events.runtime,
 CAST(date_part('epoch', events.time) AS bigint) AS time,
-COALESCE((SELECT object_ids FROM event_objects WHERE event_objects.event_id = events.event_id), '{}') AS object_ids
+COALESCE((SELECT object_ids FROM event_objects WHERE event_objects.event_id = events.event_id), '{}') AS object_ids,
+COALESCE((SELECT object_types FROM event_objects WHERE event_objects.event_id = events.event_id), '{}') AS object_types
 FROM events;
 
-CREATE VIEW view_persons AS
+CREATE OR REPLACE VIEW view_persons AS
 SELECT
 persons.person_id,
 persons.email,
@@ -819,7 +867,7 @@ COALESCE((SELECT slice_ids FROM person_slices WHERE person_slices.person_id = pe
 FROM persons
 LEFT JOIN peer_person USING (person_id);
 
-CREATE VIEW view_peers AS
+CREATE OR REPLACE VIEW view_peers AS
 SELECT 
 peers.*, 
 COALESCE((SELECT site_ids FROM peer_sites WHERE peer_sites.peer_id = peers.peer_id), '{}') AS site_ids,
@@ -834,7 +882,7 @@ COALESCE((SELECT slice_ids FROM peer_slices WHERE peer_slices.peer_id = peers.pe
 COALESCE((SELECT peer_slice_ids FROM peer_slices WHERE peer_slices.peer_id = peers.peer_id), '{}') AS peer_slice_ids
 FROM peers;
 
-CREATE VIEW view_nodes AS
+CREATE OR REPLACE VIEW view_nodes AS
 SELECT
 nodes.node_id,
 nodes.hostname,
@@ -848,11 +896,13 @@ nodes.ssh_rsa_key,
 nodes.key,
 CAST(date_part('epoch', nodes.date_created) AS bigint) AS date_created,
 CAST(date_part('epoch', nodes.last_updated) AS bigint) AS last_updated,
+CAST(date_part('epoch', nodes.last_contact) AS bigint) AS last_contact,  
 peer_node.peer_id,
 peer_node.peer_node_id,
 COALESCE((SELECT nodenetwork_ids FROM node_nodenetworks WHERE node_nodenetworks.node_id = nodes.node_id), '{}') AS nodenetwork_ids,
 COALESCE((SELECT nodegroup_ids FROM node_nodegroups WHERE node_nodegroups.node_id = nodes.node_id), '{}') AS nodegroup_ids,
 COALESCE((SELECT slice_ids FROM node_slices WHERE node_slices.node_id = nodes.node_id), '{}') AS slice_ids,
+COALESCE((SELECT slice_ids_whitelist FROM node_slices_whitelist WHERE node_slices_whitelist.node_id = nodes.node_id), '{}') AS slice_ids_whitelist,
 COALESCE((SELECT pcu_ids FROM node_pcus WHERE node_pcus.node_id = nodes.node_id), '{}') AS pcu_ids,
 COALESCE((SELECT ports FROM node_pcus WHERE node_pcus.node_id = nodes.node_id), '{}') AS ports,
 COALESCE((SELECT conf_file_ids FROM node_conf_files WHERE node_conf_files.node_id = nodes.node_id), '{}') AS conf_file_ids,
@@ -861,28 +911,28 @@ FROM nodes
 LEFT JOIN peer_node USING (node_id)
 LEFT JOIN node_session USING (node_id);
 
-CREATE VIEW view_nodegroups AS
+CREATE OR REPLACE VIEW view_nodegroups AS
 SELECT
 nodegroups.*,
 COALESCE((SELECT node_ids FROM nodegroup_nodes WHERE nodegroup_nodes.nodegroup_id = nodegroups.nodegroup_id), '{}') AS node_ids,
 COALESCE((SELECT conf_file_ids FROM nodegroup_conf_files WHERE nodegroup_conf_files.nodegroup_id = nodegroups.nodegroup_id), '{}') AS conf_file_ids
 FROM nodegroups;
 
-CREATE VIEW view_conf_files AS
+CREATE OR REPLACE VIEW view_conf_files AS
 SELECT
 conf_files.*,
 COALESCE((SELECT node_ids FROM conf_file_nodes WHERE conf_file_nodes.conf_file_id = conf_files.conf_file_id), '{}') AS node_ids,
 COALESCE((SELECT nodegroup_ids FROM conf_file_nodegroups WHERE conf_file_nodegroups.conf_file_id = conf_files.conf_file_id), '{}') AS nodegroup_ids
 FROM conf_files;
 
-CREATE VIEW view_pcus AS
+CREATE OR REPLACE VIEW view_pcus AS
 SELECT
 pcus.*,
 COALESCE((SELECT node_ids FROM pcu_nodes WHERE pcu_nodes.pcu_id = pcus.pcu_id), '{}') AS node_ids,
 COALESCE((SELECT ports FROM pcu_nodes WHERE pcu_nodes.pcu_id = pcus.pcu_id), '{}') AS ports
 FROM pcus;
 
-CREATE VIEW view_sites AS
+CREATE OR REPLACE VIEW view_sites AS
 SELECT
 sites.site_id,
 sites.login_base,
@@ -896,6 +946,7 @@ sites.max_slivers,
 sites.latitude,
 sites.longitude,
 sites.url,
+sites.ext_consortium_id,
 CAST(date_part('epoch', sites.date_created) AS bigint) AS date_created,
 CAST(date_part('epoch', sites.last_updated) AS bigint) AS last_updated,
 peer_site.peer_id,
@@ -908,14 +959,14 @@ COALESCE((SELECT pcu_ids FROM site_pcus WHERE site_pcus.site_id = sites.site_id)
 FROM sites
 LEFT JOIN peer_site USING (site_id);
 
-CREATE VIEW view_addresses AS
+CREATE OR REPLACE VIEW view_addresses AS
 SELECT
 addresses.*,
 COALESCE((SELECT address_type_ids FROM address_address_types WHERE address_address_types.address_id = addresses.address_id), '{}') AS address_type_ids,
 COALESCE((SELECT address_types FROM address_address_types WHERE address_address_types.address_id = addresses.address_id), '{}') AS address_types
 FROM addresses;
 
-CREATE VIEW view_keys AS
+CREATE OR REPLACE VIEW view_keys AS
 SELECT
 keys.*,
 person_key.person_id,
@@ -925,7 +976,7 @@ FROM keys
 LEFT JOIN person_key USING (key_id)
 LEFT JOIN peer_key USING (key_id);
 
-CREATE VIEW view_slices AS
+CREATE OR REPLACE VIEW view_slices AS
 SELECT
 slices.slice_id,
 slices.site_id,
@@ -946,11 +997,12 @@ COALESCE((SELECT slice_attribute_ids FROM slice_attributes WHERE slice_attribute
 FROM slices
 LEFT JOIN peer_slice USING (slice_id);
 
-CREATE VIEW view_slice_attributes AS
+CREATE OR REPLACE VIEW view_slice_attributes AS
 SELECT
 slice_attribute.slice_attribute_id,
 slice_attribute.slice_id,
 slice_attribute.node_id,
+slice_attribute.nodegroup_id,
 slice_attribute_types.attribute_type_id,
 slice_attribute_types.name,
 slice_attribute_types.description,
@@ -959,7 +1011,7 @@ slice_attribute.value
 FROM slice_attribute
 INNER JOIN slice_attribute_types USING (attribute_type_id);
 
-CREATE VIEW view_sessions AS
+CREATE OR REPLACE VIEW view_sessions AS
 SELECT
 sessions.session_id,
 CAST(date_part('epoch', sessions.expires) AS bigint) AS expires,