add RebootNodeWithPCU call. fails gracefully if dependencies are not met.
[plcapi.git] / planetlab5.sql
index a0e072d..f2d261a 100644 (file)
@@ -253,7 +253,7 @@ GROUP BY person_id;
 -- Nodes
 --------------------------------------------------------------------------------
 
--- Valid node boot states
+-- Valid node boot states (Nodes.py expect max length to be 20)
 CREATE TABLE boot_states (
     boot_state text PRIMARY KEY
 ) WITH OIDS;
@@ -264,13 +264,22 @@ INSERT INTO boot_states (boot_state) VALUES ('disabled');
 INSERT INTO boot_states (boot_state) VALUES ('install');
 INSERT INTO boot_states (boot_state) VALUES ('reinstall');
 
+-- Known node types (Nodes.py expect max length to be 20)
+CREATE TABLE node_types (
+    node_type text PRIMARY KEY
+) WITH OIDS;
+INSERT INTO node_types (node_type) VALUES ('regular');
+INSERT INTO node_types (node_type) VALUES ('dummynet');
+
 -- Nodes
 CREATE TABLE nodes (
     -- Mandatory
     node_id serial PRIMARY KEY,                                -- Node identifier
+    node_type text REFERENCES node_types               -- node type
+              DEFAULT 'regular',
+
     hostname text NOT NULL,                            -- Node hostname
     site_id integer REFERENCES sites NOT NULL,         -- At which site 
-
     boot_state text REFERENCES boot_states NOT NULL    -- Node boot state
               DEFAULT 'install', 
     deleted boolean NOT NULL DEFAULT false,            -- Is deleted
@@ -314,30 +323,9 @@ CREATE TABLE node_tag (
     node_tag_id serial PRIMARY KEY,                    -- ID
     node_id integer REFERENCES nodes NOT NULL,         -- node id
     tag_type_id integer REFERENCES tag_types,          -- tag type id
-    tagvalue text                                      -- value attached
+    value text                                         -- value attached
 ) WITH OIDS;
 
-CREATE OR REPLACE VIEW node_tags AS
-SELECT node_id,
-array_accum(node_tag_id) AS tag_ids
-FROM node_tag
-GROUP BY node_id;
-
-CREATE OR REPLACE VIEW view_node_tags AS
-SELECT
-node_tag.node_tag_id,
-node_tag.node_id,
-nodes.hostname,
-tag_types.tag_type_id,
-tag_types.tagname,
-tag_types.description,
-tag_types.category,
-tag_types.min_role_id,
-node_tag.tagvalue
-FROM node_tag 
-INNER JOIN tag_types USING (tag_type_id)
-INNER JOIN nodes USING (node_id);
-
 --------------------------------------------------------------------------------
 -- (network) interfaces
 --------------------------------------------------------------------------------
@@ -360,7 +348,7 @@ INSERT INTO network_methods (method) VALUES ('tap');
 INSERT INTO network_methods (method) VALUES ('ipmi');
 INSERT INTO network_methods (method) VALUES ('unknown');
 
--- Node network interfaces
+-- Network interfaces
 CREATE TABLE interfaces (
     -- Mandatory
     interface_id serial PRIMARY KEY,                   -- Network interface identifier
@@ -397,7 +385,7 @@ FROM interfaces_ordered
 GROUP BY node_id;
 
 --------------------------------------------------------------------------------
--- Interface settings
+-- Interface tags (formerly known as interface settings)
 --------------------------------------------------------------------------------
 
 CREATE TABLE interface_tag (
@@ -417,6 +405,7 @@ CREATE OR REPLACE VIEW view_interface_tags AS
 SELECT
 interface_tag.interface_tag_id,
 interface_tag.interface_id,
+interfaces.ip,
 tag_types.tag_type_id,
 tag_types.tagname,
 tag_types.description,
@@ -424,7 +413,8 @@ tag_types.category,
 tag_types.min_role_id,
 interface_tag.value
 FROM interface_tag
-INNER JOIN tag_types USING (tag_type_id);
+INNER JOIN tag_types USING (tag_type_id)
+INNER JOIN interfaces USING (interface_id);
 
 CREATE OR REPLACE VIEW view_interfaces AS
 SELECT
@@ -489,7 +479,7 @@ CREATE TABLE nodegroups (
     groupname text UNIQUE NOT NULL,            -- Group name 
     tag_type_id integer REFERENCES tag_types,  -- node is in nodegroup if it has this tag defined
     -- can be null, make management faster & easier
-    tagvalue text                              -- with this value attached
+    value text                                 -- with this value attached
 ) WITH OIDS;
 
 -- xxx - first rough implem. similar to former semantics but might be slow
@@ -499,7 +489,7 @@ FROM tag_types
 JOIN node_tag 
 USING (tag_type_id) 
 JOIN nodegroups 
-USING (tag_type_id,tagvalue);
+USING (tag_type_id,value);
 
 CREATE OR REPLACE VIEW nodegroup_nodes AS
 SELECT nodegroup_id,
@@ -743,7 +733,7 @@ FROM node_slice_whitelist
 GROUP BY node_id;
 
 --------------------------------------------------------------------------------
--- Slice attributes
+-- Slice tags (formerly known as slice attributes)
 --------------------------------------------------------------------------------
 
 -- Slice/sliver attributes
@@ -759,12 +749,6 @@ CREATE INDEX slice_tag_slice_id_idx ON slice_tag (slice_id);
 CREATE INDEX slice_tag_node_id_idx ON slice_tag (node_id);
 CREATE INDEX slice_tag_nodegroup_id_idx ON slice_tag (nodegroup_id);
 
-CREATE OR REPLACE VIEW slice_tags AS
-SELECT slice_id,
-array_accum(slice_tag_id) AS slice_tag_ids
-FROM slice_tag
-GROUP BY slice_id;
-
 --------------------------------------------------------------------------------
 -- Initscripts
 --------------------------------------------------------------------------------
@@ -984,6 +968,7 @@ COALESCE((SELECT pcu_protocol_type_ids FROM pcu_protocol_types
 AS pcu_protocol_type_ids
 FROM pcu_types;
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_events AS
 SELECT
 events.event_id,
@@ -1015,6 +1000,7 @@ event_object.object_id,
 event_object.object_type
 FROM events LEFT JOIN event_object USING (event_id);
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_persons AS
 SELECT
 persons.person_id,
@@ -1042,6 +1028,7 @@ COALESCE((SELECT slice_ids FROM person_slices WHERE person_slices.person_id = pe
 FROM persons
 LEFT JOIN peer_person USING (person_id);
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_peers AS
 SELECT 
 peers.*, 
@@ -1057,9 +1044,32 @@ 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 OR REPLACE VIEW node_tags AS
+SELECT node_id,
+array_accum(node_tag_id) AS node_tag_ids
+FROM node_tag
+GROUP BY node_id;
+
+CREATE OR REPLACE VIEW view_node_tags AS
+SELECT
+node_tag.node_tag_id,
+node_tag.node_id,
+nodes.hostname,
+tag_types.tag_type_id,
+tag_types.tagname,
+tag_types.description,
+tag_types.category,
+tag_types.min_role_id,
+node_tag.value
+FROM node_tag 
+INNER JOIN tag_types USING (tag_type_id)
+INNER JOIN nodes USING (node_id);
+
 CREATE OR REPLACE VIEW view_nodes AS
 SELECT
 nodes.node_id,
+nodes.node_type,
 nodes.hostname,
 nodes.site_id,
 nodes.boot_state,
@@ -1095,14 +1105,15 @@ AS ports,
 COALESCE((SELECT conf_file_ids FROM node_conf_files
                 WHERE node_conf_files.node_id = nodes.node_id), '{}') 
 AS conf_file_ids,
-COALESCE((SELECT tag_ids FROM node_tags 
+COALESCE((SELECT node_tag_ids FROM node_tags 
                 WHERE node_tags.node_id = nodes.node_id), '{}') 
-AS tag_ids,
+AS node_tag_ids,
 node_session.session_id AS session
 FROM nodes
 LEFT JOIN peer_node USING (node_id)
 LEFT JOIN node_session USING (node_id);
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_nodegroups AS
 SELECT
 nodegroups.*,
@@ -1115,6 +1126,7 @@ COALESCE((SELECT node_ids FROM nodegroup_nodes
 AS node_ids
 FROM nodegroups INNER JOIN tag_types USING (tag_type_id);
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_conf_files AS
 SELECT
 conf_files.*,
@@ -1126,6 +1138,7 @@ COALESCE((SELECT nodegroup_ids FROM conf_file_nodegroups
 AS nodegroup_ids
 FROM conf_files;
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_pcus AS
 SELECT
 pcus.*,
@@ -1133,6 +1146,7 @@ COALESCE((SELECT node_ids FROM pcu_nodes WHERE pcu_nodes.pcu_id = pcus.pcu_id),
 COALESCE((SELECT ports FROM pcu_nodes WHERE pcu_nodes.pcu_id = pcus.pcu_id), '{}') AS ports
 FROM pcus;
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_sites AS
 SELECT
 sites.site_id,
@@ -1160,6 +1174,7 @@ 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 OR REPLACE VIEW view_addresses AS
 SELECT
 addresses.*,
@@ -1167,6 +1182,7 @@ COALESCE((SELECT address_type_ids FROM address_address_types WHERE address_addre
 COALESCE((SELECT address_types FROM address_address_types WHERE address_address_types.address_id = addresses.address_id), '{}') AS address_types
 FROM addresses;
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_keys AS
 SELECT
 keys.*,
@@ -1177,6 +1193,13 @@ FROM keys
 LEFT JOIN person_key USING (key_id)
 LEFT JOIN peer_key USING (key_id);
 
+--------------------------------------------------------------------------------
+CREATE OR REPLACE VIEW slice_tags AS
+SELECT slice_id,
+array_accum(slice_tag_id) AS slice_tag_ids
+FROM slice_tag
+GROUP BY slice_id;
+
 CREATE OR REPLACE VIEW view_slices AS
 SELECT
 slices.slice_id,
@@ -1209,10 +1232,13 @@ tag_types.tagname,
 tag_types.description,
 tag_types.category,
 tag_types.min_role_id,
-slice_tag.value
+slice_tag.value,
+slices.name
 FROM slice_tag
-INNER JOIN tag_types USING (tag_type_id);
+INNER JOIN tag_types USING (tag_type_id)
+INNER JOIN slices USING (slice_id);
 
+--------------------------------------------------------------------------------
 CREATE OR REPLACE VIEW view_sessions AS
 SELECT
 sessions.session_id,