Exemplo n.º 1
0
 def _get_evidence(self):
   evidence = buildbot_state.collect_evidence('fake_dir')
   evidence['desired_buildbot_state'] = {
       'desired_state': self.desired_buildbot_state,
       'transition_time_utc': self.desired_transition_time,
   }
   return evidence
Exemplo n.º 2
0
 def _get_evidence(self):
     evidence = buildbot_state.collect_evidence('fake_dir')
     evidence['desired_buildbot_state'] = {
         'desired_state': self.desired_buildbot_state,
         'transition_time_utc': self.desired_transition_time,
     }
     return evidence
Exemplo n.º 3
0
def run_state_machine_pass(
    logger, matchlist, abs_master_directory, emergency_file, desired_state,
    transition_time_utc, enable_gclient_sync, prod, connection_timeout,
    hostname, builder_filters):
  # pragma: no cover
  if os.path.exists(os.path.join(abs_master_directory, emergency_file)):
    logger.error('%s detected in %s, aborting!',
        emergency_file, abs_master_directory)
    return 1

  if not master_hostname_is_valid(hostname, abs_master_directory, logger):
    return 1

  evidence = buildbot_state.collect_evidence(
      abs_master_directory,
      connection_timeout=connection_timeout,
      builder_filters=builder_filters)
  evidence['desired_buildbot_state'] = {
      'desired_state': desired_state,
      'transition_time_utc': transition_time_utc,
  }

  state, action_name, action_items = matchlist.execution_list(evidence)
  execution_list = list(
      master.convert_action_items_to_cli(
      action_items, abs_master_directory,
      enable_gclient=enable_gclient_sync))
  logger.info('%s: current state: %s', abs_master_directory, state)
  logger.info('%s: performing action: %s', abs_master_directory, action_name)

  if execution_list:
    if prod:
      logger.info('production run, executing:')
    else:
      logger.info('dry run, not executing:')
    for cmd in execution_list:
      logger.info('*  %s (in %s)', cmd['cmd'], cmd['cwd'])
      if prod:
        try:
          with daemon.flock(cmd['lockfile']):
            subprocess.check_call(
                [str(x) for x in cmd['cmd']],
                cwd=cmd['cwd'],
                close_fds=True)
        except daemon.LockAlreadyLocked:
          logger.warn('  lock on %s could not be acquired, no action taken.',
              cmd['lockfile'])
  else:
    logger.info('no action to be taken.')
  return 0
Exemplo n.º 4
0
def run_state_machine_pass(logger, matchlist, abs_master_directory,
                           emergency_file, desired_state, transition_time_utc,
                           enable_gclient_sync, prod, connection_timeout,
                           hostname):
    # pragma: no cover
    if os.path.exists(os.path.join(abs_master_directory, emergency_file)):
        logger.error('%s detected in %s, aborting!', emergency_file,
                     abs_master_directory)
        return 1

    if not master_hostname_is_valid(hostname, abs_master_directory, logger):
        return 1

    evidence = buildbot_state.collect_evidence(
        abs_master_directory, connection_timeout=connection_timeout)
    evidence['desired_buildbot_state'] = {
        'desired_state': desired_state,
        'transition_time_utc': transition_time_utc,
    }

    state, action_name, action_items = matchlist.execution_list(evidence)
    execution_list = list(
        master.convert_action_items_to_cli(action_items,
                                           abs_master_directory,
                                           enable_gclient=enable_gclient_sync))
    logger.info('%s: current state: %s', abs_master_directory, state)
    logger.info('%s: performing action: %s', abs_master_directory, action_name)

    if execution_list:
        if prod:
            logger.info('production run, executing:')
        else:
            logger.info('dry run, not executing:')
        for cmd in execution_list:
            logger.info('*  %s (in %s)', cmd['cmd'], cmd['cwd'])
            if prod:
                try:
                    with daemon.flock(cmd['lockfile']):
                        subprocess.check_call([str(x) for x in cmd['cmd']],
                                              cwd=cmd['cwd'],
                                              close_fds=True)
                except daemon.LockAlreadyLocked:
                    logger.warn(
                        '  lock on %s could not be acquired, no action taken.',
                        cmd['lockfile'])
    else:
        logger.info('no action to be taken.')
    return 0