# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: db-config,v 1.19 2007/02/01 21:09:22 faiyaza Exp $
-#
+# $Id: db-config 7454 2007-12-11 18:55:00Z faiyaza $
+# $HeadURL$
from plc_config import PLCConfiguration
import sys
'error_cmd': '',
'ignore_cmd_errors': False,
'always_update': False},
- {'enabled': True,
- 'source': 'PlanetLabConf/keys.php?role=admin',
- 'dest': '/home/pl_admin/.ssh/authorized_keys',
- 'file_permissions': '644',
- 'file_owner': 'pl_admin',
- 'file_group': 'pl_admin',
- 'preinstall_cmd': 'grep -q pl_admin /etc/passwd',
- 'postinstall_cmd': '/bin/chmod 700 /home/pl_admin/.ssh',
- 'error_cmd': '',
- 'ignore_cmd_errors': False,
- 'always_update': False},
-
# Log rotation configuration
{'enabled': True,
'source': 'PlanetLabConf/logrotate.conf',
'ignore_cmd_errors': False,
'always_update': False},
- # XXX Required for old Node Manager
- # Node Manager configuration
- {'enabled': True,
- 'source': 'PlanetLabConf/pl_nm.conf',
- 'dest': '/etc/planetlab/pl_nm.conf',
- 'file_permissions': '644',
- 'file_owner': 'root',
- 'file_group': 'root',
- 'preinstall_cmd': '',
- 'postinstall_cmd': '/etc/init.d/pl_nm restart',
- 'error_cmd': '',
- 'ignore_cmd_errors': False,
- 'always_update': False},
- {'enabled': True,
- 'source': 'PlanetLabConf/RootResources/plc_slice_pool.php',
- 'dest': '/home/pl_nm/RootResources/plc_slice_pool',
- 'file_permissions': '644',
- 'file_owner': 'pl_nm',
- 'file_group': 'pl_nm',
- 'preinstall_cmd': '',
- 'postinstall_cmd': '',
- 'error_cmd': '',
- 'ignore_cmd_errors': False,
- 'always_update': False},
- {'enabled': True,
- 'source': 'PlanetLabConf/RootResources/pl_conf.py',
- 'dest': '/home/pl_nm/RootResources/pl_conf',
- 'file_permissions': '644',
- 'file_owner': 'pl_nm',
- 'file_group': 'pl_nm',
- 'preinstall_cmd': '',
- 'postinstall_cmd': '/etc/init.d/pl_nm restart',
- 'error_cmd': '',
- 'ignore_cmd_errors': False,
- 'always_update': False},
- {'enabled': True,
- 'source': 'PlanetLabConf/RootResources/pl_netflow.py',
- 'dest': '/home/pl_nm/RootResources/pl_netflow',
- 'file_permissions': '644',
- 'file_owner': 'pl_nm',
- 'file_group': 'pl_nm',
- 'preinstall_cmd': '',
- 'postinstall_cmd': '',
- 'error_cmd': '',
- 'ignore_cmd_errors': False,
- 'always_update': False},
-
# XXX Required for old Node Manager
# Proper configuration
{'enabled': True,
'file_owner': 'root',
'file_group': 'root',
'preinstall_cmd': '',
- 'postinstall_cmd': '/etc/init.d/pl_nm restart',
+ 'postinstall_cmd': '',
'error_cmd': '',
'ignore_cmd_errors': True,
'always_update': False},
'always_update': False},
# Ping of death configuration
+ # the 'restart' postcommand doesn't work, b/c the pod script doesn't support it.
{'enabled': True,
'source': 'PlanetLabConf/ipod.conf.php',
'dest': '/etc/ipod.conf',
'file_owner': 'root',
'file_group': 'root',
'preinstall_cmd': '',
- 'postinstall_cmd': '',
+ 'postinstall_cmd': '/etc/init.d/pod start',
'error_cmd': '',
'ignore_cmd_errors': False,
'always_update': False},
{'name': "net_max_rate",
'description': "Maximum bandwidth (kbps)",
'min_role_id': 10},
- {'name': "net_i2min_rate",
+ {'name': "net_i2_min_rate",
'description': "Minimum bandwidth over I2 routes (kbps)",
'min_role_id': 10},
- {'name': "net_i2max_rate",
+ {'name': "net_i2_max_rate",
'description': "Maximum bandwidth over I2 routes (kbps)",
'min_role_id': 10},
{'name': "net_max_kbyte",
{'name': "net_thresh_kbyte",
'description': "KByte limit before warning and throttling.",
'min_role_id': 10},
- {'name': "net_i2max_kbyte",
+ {'name': "net_i2_max_kbyte",
'description': "Maximum daily network Tx KByte limit to I2 hosts.",
'min_role_id': 10},
- {'name': "net_i2thresh_kbyte",
+ {'name': "net_i2_thresh_kbyte",
'description': "KByte limit to I2 hosts before warning and throttling.",
'min_role_id': 10},
{'name': "net_share",
'description': "Number of bandwidth shares",
'min_role_id': 10},
- {'name': "net_i2share",
+ {'name': "net_i2_share",
'description': "Number of bandwidth shares over I2 routes",
'min_role_id': 10},
-
# Disk quota
{'name': "disk_max",
'description': "Disk quota (1k disk blocks)",
# Proper operations
{'name': "proper_op",
'description': "Proper operation (e.g. bind_socket)",
- 'min_role_id': 10},
-
- # XXX Required for old Node Manager
- # Special attributes applicable to Slice Creation Service (pl_conf) slice
- {'name': "plc_slice_type",
- 'description': "Type of slice rspec to be created",
- 'min_role_id': 20},
- {'name': "plc_agent_version",
- 'description': "Version of PLC agent (slice creation service) software to be deployed",
- 'min_role_id': 10},
- {'name': "plc_ticket_pubkey",
- 'description': "Public key used to verify PLC-signed tickets",
'min_role_id': 10}
]
else:
UpdateSliceAttributeType(default_attribute_type['name'], default_attribute_type)
- # Get contents of SSL public certificate used for signing slice tickets
- try:
- plc_ticket_pubkey = ""
- for line in file(plc_ma_sa['ca_ssl_key_pub']):
- # Skip comments
- if line[0:5] != "-----":
- # XXX The embedded newlines matter, do not strip()!
- plc_ticket_pubkey += line
- except:
- plc_ticket_pubkey = '%KEY%'
+ # Setup default slice attribute types
+ default_setting_types = [
+
+ {'category' : "general",
+ 'name' : "ifname",
+ 'description': "Set interface name, instead of eth0 or the like",
+ 'min_role_id' : 40},
+ {'category' : "general",
+ 'name' : "driver",
+ 'description': "Use this to specify an alternate driver",
+ 'min_role_id' : 40 },
+ {'category' : "general",
+ 'name' : "alias",
+ 'description': "Allows to reuse an interface as eth0:alias",
+ 'min_role_id' : 40},
+
+ {'category' : "hidden",
+ 'name' : "backdoor",
+ 'description': "For testing new settings",
+ 'min_role_id' : 10},
+
+ ] + [
+ { "category" : "WiFi",
+ "name" : x,
+ "description" : "802.11 %s -- see %s"%(y,z),
+ "min_role_id" : 40 } for (x,y,z) in [
+ ("mode","Mode","iwconfig"),
+ ("essid","ESSID","iwconfig"),
+ ("nw","Network Id","iwconfig"),
+ ("freq","Frequency","iwconfig"),
+ ("channel","Channel","iwconfig"),
+ ("sens","sensitivity threshold","iwconfig"),
+ ("rate","Rate","iwconfig"),
+ ("key","key","iwconfig key"),
+ ("key1","key1","iwconfig key [1]"),
+ ("key2","key2","iwconfig key [2]"),
+ ("key3","key3","iwconfig key [3]"),
+ ("key4","key4","iwconfig key [4]"),
+ ("securitymode","Security mode","iwconfig enc"),
+ ("iwconfig","Additional parameters to iwconfig","ifup-wireless"),
+ ("iwpriv","Additional parameters to iwpriv","ifup-wireless"),
+ ]
+ ]
- # Create/update system slices
- legacy_slices = [
- # XXX Required for old Node Manager
- {'name': "pl_conf",
- 'description': "PlanetLab Slice Creation Service (SCS)",
- 'url': url,
- 'instantiation': "plc-instantiated",
- # Renew forever
- 'expires': sys.maxint,
- 'attributes': [('plc_slice_type', "VServerSlice"),
- ('plc_agent_version', "1.0"),
- ('plc_ticket_pubkey', plc_ticket_pubkey)]},
- # XXX Required for old Node Manager
- {'name': "pl_conf_vserverslice",
- 'description': "Default attributes for vserver slices",
- 'url': url,
- 'instantiation': "plc-instantiated",
- # Renew forever
- 'expires': sys.maxint,
- 'attributes': [('cpu_share', "32"),
- ('plc_slice_type', "VServerSlice"),
- ('disk_max', "5000000")]},
- ]
+ # Get list of existing attribute types
+ setting_types = GetNodeNetworkSettingTypes()
+ setting_types = [setting_type['name'] for setting_type in setting_types]
+
+ # Create/update default slice setting types
+ for default_setting_type in default_setting_types:
+ if default_setting_type['name'] not in setting_types:
+ AddNodeNetworkSettingType(default_setting_type)
+ else:
+ UpdateNodeNetworkSettingType(default_setting_type['name'], default_setting_type)
+
+ # Create/update system slices
default_slices = [
# PlanetFlow
{'name': plc['slice_prefix'] + "_netflow",
('proper_op', "create_socket"),
('proper_op', "bind_socket")]},
]
-
- ### xxx - to review once new node manager rolls out
- # if PLC_SLICE_PREFIX is left to default - this is meant for the public PL only
- if plc['slice_prefix'] == 'pl':
- # create both legacy slices together with netflow through default_slices
- default_slices += legacy_slices
- else:
- # we use another slice prefix : disable legacy slices if already created
- for legacy_slice in legacy_slices:
- try:
- DeleteSlice(legacy_slice['name'])
- except:
- pass
for default_slice in default_slices:
slices = GetSlices([default_slice['name']])
https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
-Click the Reinstall link, then reboot the node.
+Update the BootState to 'Reinstall', then reboot the node.
If you have already performed this step and are still receiving this
message, please reply so that we may investigate the problem.
The most common reason for authentication failure is that the
authentication key stored in the node configuration file, does not
-match the key on record. Regenerate the node configuration file by
-visiting:
+match the key on record.
-https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
+There are two possible steps to resolve the problem.
-Click the Configuration File link, and save the downloaded file as
-plnode.txt on either a floppy disk or a USB flash drive. Click the
-Boot link, then reboot the node.
+1. If you have used an All-in-one BootCD that includes the plnode.txt file,
+ then please check your machine for any old boot media, either in the
+ floppy drive, or on a USB stick. It is likely that an old configuration
+ is being used instead of the new configuration stored on the BootCD.
+Or,
+2. If you are using Generic BootCD image, then regenerate the node
+ configuration file by visiting:
+
+ https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
+
+ Under 'Download', follow the 'Download plnode.txt file for %(hostname)s'
+ option, and save the downloaded file as plnode.txt on either a floppy
+ disk or a USB flash drive. Be sure the 'Boot State' is set to 'Boot',
+ and, then reboot the node.
If you have already performed this step and are still receiving this
-message, please reply so that we may investigate the problem.
+message, please reply so that we can help investigate the problem.
"""
},
https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
-Click the Reinstall link, then reboot the node.
+Change the 'Boot State' to 'Reinstall', and then reboot the node.
If you have already performed this step and are still receiving this
message, please reply so that we may investigate the problem.
https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
-Correct any errors, click the Reinstall link, then reboot the node.
+Correct any errors, and change the 'Boot State' to 'Reinstall', and then
+reboot the node.
If you have already performed this step and are still receiving this
message, please reply so that we may investigate the problem.
https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
Click the Configuration File link, and save the downloaded file as
-plnode.txt on either a floppy disk or a USB flash drive. Click the
-Reinstall link, then reboot the node.
+plnode.txt on either a floppy disk or a USB flash drive. Change the
+'Boot State' to 'Reinstall', and then reboot the node.
If you have already performed this step and are still receiving this
message, please reply so that we may investigate the problem.
https://%(PLC_WWW_HOST)s:%(PLC_WWW_SSL_PORT)d/db/nodes/?id=%(node_id)d
-Click the Reinstall link, then reboot the node.
+Change the 'Boot State' to 'Reinstall', and then reboot the node.
If you have already performed this step and are still receiving this
message, please reply so that we may investigate the problem.
]
for template in message_templates:
- messages = GetMessages([template['message_id']])
- if not messages:
- AddMessage(template)
+ messages = GetMessages([template['message_id']])
+ if not messages:
+ AddMessage(template)
+
+
+ ### Setup Initial PCU information
+ pcu_types = [{'model': 'AP79xx',
+ 'name': 'APC AP79xx',
+ 'pcu_protocol_types': [{ 'port': 80,
+ 'protocol': 'APC79xxHttp',
+ 'supported': False},
+ { 'port': 23,
+ 'protocol': 'APC79xx',
+ 'supported': True},
+ { 'port': 22,
+ 'protocol': 'APC79xx',
+ 'supported': True}],
+ },
+ {'model': 'Masterswitch',
+ 'name': 'APC Masterswitch',
+ 'pcu_protocol_types': [{ 'port': 80,
+ 'protocol': 'APCMasterHttp',
+ 'supported': False},
+ { 'port': 23,
+ 'protocol': 'APCMaster',
+ 'supported': True},
+ { 'port': 22,
+ 'protocol': 'APCMaster',
+ 'supported': True}],
+ },
+ {'model': 'DS4-RPC',
+ 'name': 'BayTech DS4-RPC',
+ 'pcu_protocol_types': [{ 'port': 80,
+ 'protocol': 'BayTechHttp',
+ 'supported': False},
+ { 'port': 23,
+ 'protocol': 'BayTech',
+ 'supported': True},
+ { 'port': 22,
+ 'protocol': 'BayTech',
+ 'supported': True}],
+ },
+ {'model': 'IP-41x_IP-81x',
+ 'name': 'Dataprobe IP-41x & IP-81x',
+ 'pcu_protocol_types': [ { 'port': 23,
+ 'protocol': 'IPALTelnet',
+ 'supported': True},
+ { 'port': 80,
+ 'protocol': 'IPALHttp',
+ 'supported': False}],
+ },
+ {'model': 'DRAC3',
+ 'name': 'Dell RAC Version 3',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'DRAC4',
+ 'name': 'Dell RAC Version 4',
+ 'pcu_protocol_types': [{ 'port': 443,
+ 'protocol': 'DRACRacAdm',
+ 'supported': True},
+ { 'port': 80,
+ 'protocol': 'DRACRacAdm',
+ 'supported': False},
+ { 'port': 22,
+ 'protocol': 'DRAC',
+ 'supported': True}],
+ },
+ {'model': 'ePowerSwitch',
+ 'name': 'ePowerSwitch 1/4/8x',
+ 'pcu_protocol_types': [{ 'port': 80,
+ 'protocol': 'ePowerSwitch',
+ 'supported': True}],
+ },
+ {'model': 'ilo2',
+ 'name': 'HP iLO2 (Integrated Lights-Out)',
+ 'pcu_protocol_types': [{ 'port': 443,
+ 'protocol': 'HPiLOHttps',
+ 'supported': True},
+ { 'port': 22,
+ 'protocol': 'HPiLO',
+ 'supported': True}],
+ },
+ {'model': 'ilo1',
+ 'name': 'HP iLO version 1',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'PM211-MIP',
+ 'name': 'Infratec PM221-MIP',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'AMT2.5',
+ 'name': 'Intel AMT v2.5 (Active Management Technology)',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'AMT3.0',
+ 'name': 'Intel AMT v3.0 (Active Management Technology)',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'WTI_IPS-4',
+ 'name': 'Western Telematic (WTI IPS-4)',
+ 'pcu_protocol_types': [],
+ },
+ {'model': 'unknown',
+ 'name': 'Unknown Vendor or Model',
+ 'pcu_protocol_types': [{ 'port': 443,
+ 'protocol': 'UnknownPCU',
+ 'supported': False},
+ { 'port': 80,
+ 'protocol': 'UnknownPCU',
+ 'supported': False},
+ { 'port': 23,
+ 'protocol': 'UnknownPCU',
+ 'supported': False},
+ { 'port': 22,
+ 'protocol': 'UnknownPCU',
+ 'supported': False}],
+ }]
+
+ # Get all model names
+ pcu_models = [type['model'] for type in GetPCUTypes()]
+ for type in pcu_types:
+ protocol_types = type['pcu_protocol_types']
+ # Take this value out of the struct.
+ del type['pcu_protocol_types']
+ if type['model'] not in pcu_models:
+ # Add the name/model info into DB
+ id = AddPCUType(type)
+ # for each protocol, also add this.
+ for ptype in protocol_types:
+ AddPCUProtocolType(id, ptype)
+
if __name__ == '__main__':
main()