Beispiel #1
0
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')
Beispiel #2
0
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')
Beispiel #3
0
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()
Beispiel #4
0
        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
Beispiel #5
0
 def test_fun():
     """raise exc.TreadmillError('test')."""
     raise exc.TreadmillError('test')
Beispiel #6
0
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)