-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements.  See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership.  The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License.  You may obtain a copy of the License at
--
--   http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied.  See the License for the
-- specific language governing permissions and limitations
-- under the License.
INSERT INTO `vmops`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, ready, display_text, enable_password, format, guest_os_id, create_status, cross_zones)    VALUES (1, 'routing', 'DomR Template', 0, now(), 'ext3', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/latest/routing.vhd.bz2', 0, 'DomR Template', 0, 'VHD', 10, 'Creating', 1);INSERT INTO `vmops`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, ready, display_text, enable_password, format, guest_os_id, create_status, cross_zones)    VALUES (2, 'centos53-x86_64', 'CentOS 5.3(x86_64) no GUI', 1, now(), 'ext3', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/ami-ccb35ea5/ami-ccb35ea5.vhd.bz2', 0, 'CentOS 5.3(x86_64) no GUI', 0, 'VHD', 10, 'Creating', 1);INSERT INTO `vmops`.`vm_template` (id, unique_name, name, public, created, type,hvm, bits, account_id, url, ready, display_text, enable_password, format, guest_os_id, create_status)    VALUES (5, 'ubuntu iso', 'Ubuntu iso', 1, now(), 'cdfs', 1, 64, 1, 'http://172.16.0.220/images/sumita/iso/ubuntu-9.04-server-amd64.iso', 0, 'Ubuntu iso', 0, 'ISO', 51, 'Creating');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (1, 'CentOS');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (2, 'Citrix');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (3, 'Debian');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (4, 'Oracle');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (5, 'RedHat');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (6, 'SUSE');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (7, 'Windows');INSERT INTO `vmops`.`guest_os_category` (id, name) VALUES (8, 'Other');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (1, 1, 'CentOS 4.5', 'CentOS 4.5');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (2, 1, 'CentOS 4.6', 'CentOS 4.6');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (3, 1, 'CentOS 4.7', 'CentOS 4.7');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (4, 1, 'CentOS 5.0', 'CentOS 5.0');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (5, 1, 'CentOS 5.0 x64', 'CentOS 5.0 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (6, 1, 'CentOS 5.1', 'CentOS 5.1');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (7, 1, 'CentOS 5.1 x64', 'CentOS 5.1 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (8, 1, 'CentOS 5.2', 'CentOS 5.2');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (9, 1, 'CentOS 5.2 x64', 'CentOS 5.2 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (10, 1, 'CentOS 5.3', 'CentOS 5.3');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (11, 1, 'CentOS 5.3 x64', 'CentOS 5.3 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (12, 2, 'Citrix XenApp', 'Citrix XenApp');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (13, 2, 'Citrix XenApp x64', 'Citrix XenApp x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (14, 3, 'Debian Lenny 5.0', 'Debian Lenny 5.0');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (15, 4, 'Oracle Enterprise Linux 5.0', 'Oracle Enterprise Linux 5.0');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (16, 4, 'Oracle Enterprise Linux 5.0 x64', 'Oracle Enterprise Linux 5.0 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (17, 4, 'Oracle Enterprise Linux 5.1', 'Oracle Enterprise Linux 5.1');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (18, 4, 'Oracle Enterprise Linux 5.1 x64', 'Oracle Enterprise Linux 5.1 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (19, 4, 'Oracle Enterprise Linux 5.2', 'Oracle Enterprise Linux 5.2');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (20, 4, 'Oracle Enterprise Linux 5.2 x64', 'Oracle Enterprise Linux 5.2 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (21, 5, 'Red Hat Enterprise Linux 4.5', 'Red Hat Enterprise Linux 4.5');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (22, 5, 'Red Hat Enterprise Linux 4.6', 'Red Hat Enterprise Linux 4.6');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (23, 5, 'Red Hat Enterprise Linux 4.7', 'Red Hat Enterprise Linux 4.7');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (24, 5, 'Red Hat Enterprise Linux 5.0', 'Red Hat Enterprise Linux 5.0');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (25, 5, 'Red Hat Enterprise Linux 5.0 x64', 'Red Hat Enterprise Linux 5.0 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (26, 5, 'Red Hat Enterprise Linux 5.1', 'Red Hat Enterprise Linux 5.1');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (27, 5, 'Red Hat Enterprise Linux 5.1 x64', 'Red Hat Enterprise Linux 5.1 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (28, 5, 'Red Hat Enterprise Linux 5.2', 'Red Hat Enterprise Linux 5.2');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (29, 5, 'Red Hat Enterprise Linux 5.2 x64', 'Red Hat Enterprise Linux 5.2 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (30, 5, 'Red Hat Enterprise Linux 5.3', 'Red Hat Enterprise Linux 5.3');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (31, 5, 'Red Hat Enterprise Linux 5.3 x64', 'Red Hat Enterprise Linux 5.3 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (32, 6, 'SUSE Linux Enterprise Server 9 SP4', 'SUSE Linux Enterprise Server 9 SP4');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (33, 6, 'SUSE Linux Enterprise Server 10 SP1', 'SUSE Linux Enterprise Server 10 SP1');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (34, 6, 'SUSE Linux Enterprise Server 10 SP1 x64', 'SUSE Linux Enterprise Server 10 SP1 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (35, 6, 'SUSE Linux Enterprise Server 10 SP2', 'SUSE Linux Enterprise Server 10 SP2');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (36, 6, 'SUSE Linux Enterprise Server 10 SP2 x64', 'SUSE Linux Enterprise Server 10 SP2 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (37, 6, 'SUSE Linux Enterprise Server 11', 'SUSE Linux Enterprise Server 11');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (38, 6, 'SUSE Linux Enterprise Server 11 x64', 'SUSE Linux Enterprise Server 11 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (39, 7, 'Windows 7', 'Windows 7');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (40, 7, 'Windows 7 x64', 'Windows 7 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (41, 7, 'Windows Server 2003', 'Windows Server 2003');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (42, 7, 'Windows Server 2003 x64', 'Windows Server 2003 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (43, 7, 'Windows Server 2008', 'Windows Server 2008');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (44, 7, 'Windows Server 2008 x64', 'Windows Server 2008 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (45, 7, 'Windows Server 2008 R2 x64', 'Windows Server 2008 R2 x64');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (46, 7, 'Windows 2000 SP4', 'Windows 2000 SP4');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (47, 7, 'Windows Vista', 'Windows Vista');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (48, 7, 'Windows XP SP2', 'Windows XP SP2');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (49, 7, 'Windows XP SP3', 'Windows XP SP3');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (50, 8, 'Other install media', 'Ubuntu');INSERT INTO `vmops`.`guest_os` (id, category_id, name, display_name) VALUES (51, 8, 'Other install media', 'Other');
