def _check_required_attributes(configured): """Check that all required attributes are populated.""" if 'proid' not in configured: raise exc.TreadmillError('Missing required attribute: proid') if 'environment' not in configured: raise exc.TreadmillError('Missing required attribute: environment')
def _validate(rsrc): """Validate instance manifest.""" memory_mb = utils.megabytes(rsrc['memory']) if memory_mb < 100: raise exc.TreadmillError( 'memory size should be larger than or equal to 100M') disk_mb = utils.megabytes(rsrc['disk']) if disk_mb < 100: raise exc.TreadmillError( 'disk size should be larger than or equal to 100M')
def send_event( type_=None, instanceid=None, summary=None, event_time=None, on_success_callback=_noop, **kwargs): """Send event to SNS. """ admin_cell = admin.Cell(context.GLOBAL.ldap.conn) cell = admin_cell.get(context.GLOBAL.cell) data = cell['data'] sns_alert_arn = data['sns_topic'] if sns_alert_arn is None: raise exc.TreadmillError('SNS Topic ARN not found') message = {'type_': type_, 'instanceid': instanceid, 'summary': summary, 'event_time': event_time} if kwargs: message.update(kwargs) success = snsclient.publish_to_sns(sns_client=awscontext.GLOBAL.sns, message=message, subject='Treadmill Alert', topic_arn=sns_alert_arn) if success: on_success_callback()
def create(rsrc_id, rsrc, count=1): """Create (configure) instance.""" _LOGGER.info('create: count = %s, %s %r', count, rsrc_id, rsrc) admin_app = admin.Application(context.GLOBAL.ldap.conn) if not rsrc: configured = admin_app.get(rsrc_id) _LOGGER.info('Configured: %s %r', rsrc_id, configured) else: # Make sure defaults are present configured = admin_app.from_entry(admin_app.to_entry(rsrc)) app.verify_feature(rsrc.get('features', [])) if '_id' in configured: del configured['_id'] _validate(configured) if instance_plugin: configured = instance_plugin.add_attributes( rsrc_id, configured) if 'proid' not in configured: raise exc.TreadmillError('Missing required attribute: proid') if 'environment' not in configured: raise exc.TreadmillError( 'Missing required attribute: environment') if 'identity_group' not in configured: configured['identity_group'] = None if 'affinity' not in configured: configured['affinity'] = '{0}.{1}'.format(*rsrc_id.split('.')) scheduled = master.create_apps(context.GLOBAL.zk.conn, rsrc_id, configured, count) return scheduled
def test_fun(): """raise exc.TreadmillError('test').""" raise exc.TreadmillError('test')
def create_treadmill_cgroups(system_cpu_shares, treadmill_cpu_shares, treadmill_core_cpu_shares, treadmill_apps_cpu_shares, treadmill_cpu_cores, treadmill_mem, treadmill_core_mem): """This is the core cgroup setup. Should be applied to a cleaned env.""" create('cpu', 'system') create('cpu', 'treadmill') create('cpu', 'treadmill/core') create('cpu', 'treadmill/apps') cgroups.set_value('cpu', 'treadmill', 'cpu.shares', treadmill_cpu_shares) cgroups.set_value('cpu', 'system', 'cpu.shares', system_cpu_shares) cgroups.set_value('cpu', 'treadmill/core', 'cpu.shares', treadmill_core_cpu_shares) cgroups.set_value('cpu', 'treadmill/apps', 'cpu.shares', treadmill_apps_cpu_shares) create('cpuacct', 'system') create('cpuacct', 'treadmill') create('cpuacct', 'treadmill/core') create('cpuacct', 'treadmill/apps') create('cpuset', 'system') create('cpuset', 'treadmill') mems = cgroups.get_value('cpuset', '', 'cpuset.mems') cgroups.set_value('cpuset', 'system', 'cpuset.mems', mems) cgroups.set_value('cpuset', 'treadmill', 'cpuset.mems', mems) cores_max = sysinfo.cpu_count() - 1 if treadmill_cpu_cores > cores_max: raise exc.TreadmillError('Not enough cpu cores.') if treadmill_cpu_cores > 0: cgroups.set_value('cpuset', 'treadmill', 'cpuset.cpus', '%d-%d' % (0, treadmill_cpu_cores - 1)) cgroups.set_value('cpuset', 'system', 'cpuset.cpus', '%d-%d' % (treadmill_cpu_cores, cores_max)) else: cgroups.set_value('cpuset', 'treadmill', 'cpuset.cpus', '%d-%d' % (0, cores_max)) cgroups.set_value('cpuset', 'system', 'cpuset.cpus', '%d-%d' % (0, cores_max)) create('memory', 'system') create('memory', 'treadmill') if cgroups.get_value('memory', 'treadmill', 'memory.use_hierarchy') != 1: cgroups.set_value('memory', 'treadmill', 'memory.use_hierarchy', '1') set_memory_hardlimit('treadmill', treadmill_mem) oom_value = 'oom_kill_disable 0\nunder_oom 0\n' if cgroups.get_data('memory', 'treadmill', 'memory.oom_control') != oom_value: cgroups.set_value('memory', 'treadmill', 'memory.oom_control', '0') create('memory', 'treadmill/core') create('memory', 'treadmill/apps') set_memory_hardlimit('treadmill/core', treadmill_core_mem) cgroups.set_value('memory', 'treadmill/core', 'memory.soft_limit_in_bytes', treadmill_core_mem) # It is possible to use qualifiers in the input, for calculation of the # difference, get memory limits in bytes as defined in cgroup. total_mem_bytes = cgroups.get_value('memory', 'treadmill', 'memory.limit_in_bytes') core_mem_bytes = cgroups.get_value('memory', 'treadmill/core', 'memory.limit_in_bytes') apps_mem_bytes = (total_mem_bytes - core_mem_bytes) set_memory_hardlimit('treadmill/apps', apps_mem_bytes)