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 getpass
      7  import tempfile
      8
      9  VERSION = "0.92rc1"
     10  PID = os.getpid()
     11  TMP_DIR = tempfile.gettempdir()
     12  if os.path.exists("/tmp"):
     13      TMP_DIR = "/tmp"
     14  CURRENT_USER = 'unknown_user'
     15  try:
     16      CURRENT_USER = getpass.getuser()
     17  except:
     18      pass
     19  SSH_TEMPLATE = 'ssh -i %s %s@%s'
     20  DEBUG_FILE = os.path.join(TMP_DIR, 'starcluster-debug-%s.log' % CURRENT_USER)
     21  SSH_DEBUG_FILE = os.path.join(TMP_DIR, 'starcluster-ssh-%s.log' % CURRENT_USER)
     22  AWS_DEBUG_FILE = os.path.join(TMP_DIR, 'starcluster-aws-%s.log' % CURRENT_USER)
     23
     24  STARCLUSTER_CFG_DIR = os.path.join(os.path.expanduser('~'), '.starcluster')
     25  STARCLUSTER_CFG_FILE = os.path.join(STARCLUSTER_CFG_DIR, 'config')
     26  STARCLUSTER_PLUGIN_DIR = os.path.join(STARCLUSTER_CFG_DIR, 'plugins')
     27  STARCLUSTER_RECEIPT_DIR = "/var/run/starcluster"
     28  STARCLUSTER_RECEIPT_FILE = os.path.join(STARCLUSTER_RECEIPT_DIR, "receipt.pkl")
     29  STARCLUSTER_OWNER_ID = 342652561657
     30
     31  # StarCluster BASE AMIs (i386/x86_64)
     32  BASE_AMI_32 = "ami-8cf913e5"
     33  BASE_AMI_64 = "ami-0af31963"
     34
     35  SECURITY_GROUP_PREFIX = "@sc"
     36  SECURITY_GROUP_TEMPLATE = '-'.join([SECURITY_GROUP_PREFIX, "%s"])
     37  MASTER_GROUP_NAME = "masters"
     38  MASTER_GROUP = SECURITY_GROUP_TEMPLATE % MASTER_GROUP_NAME
     39  MASTER_GROUP_DESCRIPTION = "StarCluster Master Nodes"
     40  VOLUME_GROUP_NAME = "volumecreator"
     41  VOLUME_GROUP = SECURITY_GROUP_TEMPLATE % VOLUME_GROUP_NAME
     42
     43  IGNORE_GROUPS = [MASTER_GROUP]
     44
     45  INSTANCE_STATES = ['pending', 'running', 'shutting-down',
     46                     'terminated', 'stopping', 'stopped']
     47
     48  VOLUME_STATUS = ['creating', 'available', 'in-use',
     49                   'deleting', 'deleted', 'error']
     50  VOLUME_ATTACH_STATUS = ['attaching', 'attached', 'detaching', 'detached']
     51
     52  INSTANCE_TYPES = {
     53      't1.micro': ['i386', 'x86_64'],
     54      'm1.small': ['i386'],
     55      'm1.large': ['x86_64'],
     56      'm1.xlarge': ['x86_64'],
     57      'c1.medium': ['i386'],
     58      'c1.xlarge': ['x86_64'],
     59      'm2.xlarge': ['x86_64'],
     60      'm2.2xlarge': ['x86_64'],
     61      'm2.4xlarge': ['x86_64'],
     62      'cc1.4xlarge': ['x86_64'],
     63      'cg1.4xlarge': ['x86_64'],
     64  }
     65
     66  MICRO_INSTANCE_TYPES = ['t1.micro']
     67
     68  CLUSTER_COMPUTE_TYPES = ['cc1.4xlarge']
     69
     70  CLUSTER_GPU_TYPES = ['cg1.4xlarge']
     71
     72  CLUSTER_TYPES = CLUSTER_COMPUTE_TYPES + CLUSTER_GPU_TYPES
     73
     74  PROTOCOLS = ['tcp', 'udp', 'icmp']
     75
     76  AVAILABLE_SHELLS = {
     77      "bash": True,
     78      "zsh": True,
     79      "csh": True,
     80      "ksh": True,
     81      "tcsh": True,
     82  }
     83
     84  GLOBAL_SETTINGS = {
     85      # setting, type, required?, default, options, callback
     86      'default_template': (str, False, None, None, None),
     87      'enable_experimental': (bool, False, False, None, None),
     88      'refresh_interval': (int, False, 30, None, None),
     89  }
     90
     91  AWS_SETTINGS = {
     92      'aws_access_key_id': (str, True, None, None, None),
     93      'aws_secret_access_key': (str, True, None, None, None),
     94      'aws_user_id': (str, False, None, None, None),
     95      'ec2_cert': (str, False, None, None, None),
     96      'ec2_private_key': (str, False, None, None, None),
     97      'aws_port': (int, False, None, None, None),
     98      'aws_ec2_path': (str, False, '/', None, None),
     99      'aws_s3_path': (str, False, '/', None, None),
    100      'aws_is_secure': (bool, False, True, None, None),
    101      'aws_region_name': (str, False, None, None, None),
    102      'aws_region_host': (str, False, None, None, None),
    103      'aws_s3_host': (str, False, None, None, None),
    104  }
    105
    106  KEY_SETTINGS = {
    107      'key_location': (str, True, None, None, os.path.expanduser),
    108  }
    109
    110  EBS_VOLUME_SETTINGS = {
    111      'volume_id': (str, True, None, None, None),
    112      'device': (str, False, None, None, None),
    113      'partition': (int, False, None, None, None),
    114      'mount_path': (str, True, None, None, None),
    115  }
    116
    117  PLUGIN_SETTINGS = {
    118      'setup_class': (str, True, None, None, None),
    119  }
    120
    121  PERMISSION_SETTINGS = {
    122      # either you're specifying an ip-based rule
    123      'ip_protocol': (str, False, 'tcp', PROTOCOLS, None),
    124      'from_port': (int, True, None, None, None),
    125      'to_port': (int, True, None, None, None),
    126      'cidr_ip': (str, False, '0.0.0.0/0', None, None),
    127      # or you're allowing full access to another security group
    128      # skip this for now...these two options are mutually exclusive to
    129      # the four settings above and source_group is  less commonly
    130      # used. address this when someone requests it.
    131      #'source_group': (str, False, None),
    132      #'source_group_owner': (int, False, None),
    133  }
    134
    135  CLUSTER_SETTINGS = {
    136      'spot_bid': (float, False, None, None, None),
    137      'cluster_size': (int, True, None, None, None),
    138      'cluster_user': (str, False, 'sgeadmin', None, None),
    139      'cluster_shell': (str, False, 'bash', AVAILABLE_SHELLS.keys(), None),
    140      'master_image_id': (str, False, None, None, None),
    141      'master_instance_type': (str, False, None, INSTANCE_TYPES.keys(), None),
    142      'node_image_id': (str, True, None, None, None),
    143      'node_instance_type': (list, True, [], None, None),
    144      'availability_zone': (str, False, None, None, None),
    145      'keyname': (str, True, None, None, None),
    146      'extends': (str, False, None, None, None),
    147      'volumes': (list, False, [], None, None),
    148      'plugins': (list, False, [], None, None),
    149      'permissions': (list, False, [], None, None),
    150      'disable_queue': (bool, False, False, None, None),
    151  }
    152