starcluster.static

Package starcluster :: Module static |
[hide private]
[frames] | no frames]

# Source Code for Module starcluster.static

      1  #!/usr/bin/env python
      2  """
      3  Module for storing static data structures
      4  """
      5  import os
      6  import sys
      7  import getpass
      8  import tempfile
      9
     10
     11 -def __expand_all(path):
     12      path = os.path.expanduser(path)
     13      path = os.path.expandvars(path)
     14      return path
     15
     16
     17 -def __makedirs(path, exit_on_failure=False):
     18      if not os.path.exists(path):
     19          try:
     20              os.makedirs(path)
     21          except OSError:
     22              if exit_on_failure:
     23                  sys.stderr.write("!!! ERROR - %s *must* be a directory\n" %
     24                                   path)
     25      elif not os.path.isdir(path) and exit_on_failure:
     26          sys.stderr.write("!!! ERROR - %s *must* be a directory\n" % path)
     27          sys.exit(1)
     28
     29
     30 -def create_sc_config_dirs():
     31      __makedirs(STARCLUSTER_CFG_DIR, exit_on_failure=True)
     32      __makedirs(STARCLUSTER_PLUGIN_DIR)
     33      __makedirs(STARCLUSTER_LOG_DIR)
     34
     35
     36  VERSION = "0.92.1"
     37  PID = os.getpid()
     38  TMP_DIR = tempfile.gettempdir()
     39  if os.path.exists("/tmp"):
     40      TMP_DIR = "/tmp"
     41  CURRENT_USER = 'unknown_user'
     42  try:
     43      CURRENT_USER = getpass.getuser()
     44  except:
     45      pass
     46  SSH_TEMPLATE = 'ssh -i %s %s@%s'
     47
     48  STARCLUSTER_CFG_DIR = os.path.join(os.path.expanduser('~'), '.starcluster')
     49  STARCLUSTER_CFG_FILE = os.path.join(STARCLUSTER_CFG_DIR, 'config')
     50  STARCLUSTER_PLUGIN_DIR = os.path.join(STARCLUSTER_CFG_DIR, 'plugins')
     51  STARCLUSTER_LOG_DIR = os.path.join(STARCLUSTER_CFG_DIR, 'logs')
     52  STARCLUSTER_RECEIPT_DIR = "/var/run/starcluster"
     53  STARCLUSTER_RECEIPT_FILE = os.path.join(STARCLUSTER_RECEIPT_DIR, "receipt.pkl")
     54  STARCLUSTER_OWNER_ID = 342652561657
     55
     56  DEBUG_FILE = os.path.join(STARCLUSTER_LOG_DIR, 'debug.log')
     57  SSH_DEBUG_FILE = os.path.join(STARCLUSTER_LOG_DIR, 'ssh-debug.log')
     58  AWS_DEBUG_FILE = os.path.join(STARCLUSTER_LOG_DIR, 'aws-debug.log')
     59  CRASH_FILE = os.path.join(STARCLUSTER_LOG_DIR, 'crash-report-%d.txt' % PID)
     60
     61  # StarCluster BASE AMIs (i386/x86_64)
     62  BASE_AMI_32 = "ami-8cf913e5"
     63  BASE_AMI_64 = "ami-0af31963"
     64
     65  SECURITY_GROUP_PREFIX = "@sc"
     66  SECURITY_GROUP_TEMPLATE = '-'.join([SECURITY_GROUP_PREFIX, "%s"])
     67  MASTER_GROUP_NAME = "masters"
     68  MASTER_GROUP = SECURITY_GROUP_TEMPLATE % MASTER_GROUP_NAME
     69  MASTER_GROUP_DESCRIPTION = "StarCluster Master Nodes"
     70  VOLUME_GROUP_NAME = "volumecreator"
     71  VOLUME_GROUP = SECURITY_GROUP_TEMPLATE % VOLUME_GROUP_NAME
     72
     73  IGNORE_GROUPS = [MASTER_GROUP]
     74
     75  INSTANCE_STATES = ['pending', 'running', 'shutting-down',
     76                     'terminated', 'stopping', 'stopped']
     77
     78  VOLUME_STATUS = ['creating', 'available', 'in-use',
     79                   'deleting', 'deleted', 'error']
     80  VOLUME_ATTACH_STATUS = ['attaching', 'attached', 'detaching', 'detached']
     81
     82  INSTANCE_TYPES = {
     83      't1.micro': ['i386', 'x86_64'],
     84      'm1.small': ['i386'],
     85      'm1.large': ['x86_64'],
     86      'm1.xlarge': ['x86_64'],
     87      'c1.medium': ['i386'],
     88      'c1.xlarge': ['x86_64'],
     89      'm2.xlarge': ['x86_64'],
     90      'm2.2xlarge': ['x86_64'],
     91      'm2.4xlarge': ['x86_64'],
     92      'cc1.4xlarge': ['x86_64'],
     93      'cg1.4xlarge': ['x86_64'],
     94  }
     95
     96  MICRO_INSTANCE_TYPES = ['t1.micro']
     97
     98  CLUSTER_COMPUTE_TYPES = ['cc1.4xlarge']
     99
    100  CLUSTER_GPU_TYPES = ['cg1.4xlarge']
    101
    102  CLUSTER_TYPES = CLUSTER_COMPUTE_TYPES + CLUSTER_GPU_TYPES
    103
    104  CLUSTER_REGIONS = ['us-east-1']
    105
    106  PROTOCOLS = ['tcp', 'udp', 'icmp']
    107
    108  WORLD_CIDRIP = '0.0.0.0/0'
    109
    110  DEFAULT_SSH_PORT = 22
    111
    112  AVAILABLE_SHELLS = {
    113      "bash": True,
    114      "zsh": True,
    115      "csh": True,
    116      "ksh": True,
    117      "tcsh": True,
    118  }
    119
    120  GLOBAL_SETTINGS = {
    121      # setting, type, required?, default, options, callback
    122      'default_template': (str, False, None, None, None),
    123      'enable_experimental': (bool, False, False, None, None),
    124      'refresh_interval': (int, False, 30, None, None),
    125      'web_browser': (str, False, None, None, None),
    126      'include': (list, False, [], None, None),
    127  }
    128
    129  AWS_SETTINGS = {
    130      'aws_access_key_id': (str, True, None, None, None),
    131      'aws_secret_access_key': (str, True, None, None, None),
    132      'aws_user_id': (str, False, None, None, None),
    133      'ec2_cert': (str, False, None, None, None),
    134      'ec2_private_key': (str, False, None, None, None),
    135      'aws_port': (int, False, None, None, None),
    136      'aws_ec2_path': (str, False, '/', None, None),
    137      'aws_s3_path': (str, False, '/', None, None),
    138      'aws_is_secure': (bool, False, True, None, None),
    139      'aws_region_name': (str, False, None, None, None),
    140      'aws_region_host': (str, False, None, None, None),
    141      'aws_s3_host': (str, False, None, None, None),
    142  }
    143
    144  KEY_SETTINGS = {
    145      'key_location': (str, True, None, None, __expand_all),
    146  }
    147
    148  EBS_VOLUME_SETTINGS = {
    149      'volume_id': (str, True, None, None, None),
    150      'device': (str, False, None, None, None),
    151      'partition': (int, False, None, None, None),
    152      'mount_path': (str, True, None, None, None),
    153  }
    154
    155  PLUGIN_SETTINGS = {
    156      'setup_class': (str, True, None, None, None),
    157  }
    158
    159  PERMISSION_SETTINGS = {
    160      # either you're specifying an ip-based rule
    161      'ip_protocol': (str, False, 'tcp', PROTOCOLS, None),
    162      'from_port': (int, True, None, None, None),
    163      'to_port': (int, True, None, None, None),
    164      'cidr_ip': (str, False, '0.0.0.0/0', None, None),
    165      # or you're allowing full access to another security group
    166      # skip this for now...these two options are mutually exclusive to
    167      # the four settings above and source_group is  less commonly
    168      # used. address this when someone requests it.
    169      #'source_group': (str, False, None),
    170      #'source_group_owner': (int, False, None),
    171  }
    172
    173  CLUSTER_SETTINGS = {
    174      'spot_bid': (float, False, None, None, None),
    175      'cluster_size': (int, True, None, None, None),
    176      'cluster_user': (str, False, 'sgeadmin', None, None),
    177      'cluster_shell': (str, False, 'bash', AVAILABLE_SHELLS.keys(), None),
    178      'master_image_id': (str, False, None, None, None),
    179      'master_instance_type': (str, False, None, INSTANCE_TYPES.keys(), None),
    180      'node_image_id': (str, True, None, None, None),
    181      'node_instance_type': (list, True, [], None, None),
    182      'availability_zone': (str, False, None, None, None),
    183      'keyname': (str, True, None, None, None),
    184      'extends': (str, False, None, None, None),
    185      'volumes': (list, False, [], None, None),
    186      'plugins': (list, False, [], None, None),
    187      'permissions': (list, False, [], None, None),
    188      'disable_queue': (bool, False, False, None, None),
    189      'force_spot_master': (bool, False, False, None, None),
    190  }
    191