Пример #1
0
 def run_once(self):
     sig = getattr(signal, self.config['listen_signal'])
     dkrcmd = AsyncDockerCmd(self, 'run', self.sub_stuff['subargs'],
                             timeout=self.config['docker_timeout'])
     self.logdebug("Starting background docker command, "
                   "timeout %s seconds: "
                   "%s", self.config['docker_timeout'], dkrcmd.command)
     dkrcmd.verbose = True
     # Runs in background
     self.sub_stuff['dkrcmd'] = dkrcmd
     dkrcmd.execute()
     pid = dkrcmd.process_id
     ss = self.config['secret_sauce']
     while True:
         stdout = dkrcmd.stdout
         if stdout.count(ss) >= 1:
             break
         time.sleep(0.1)
     wait_start = self.config['wait_start']
     self.loginfo("Container running, waiting %d seconds to send signal"
                  % wait_start)
     # Allow noticable time difference for date command,
     # and eat into dkrcmd timeout after receiving signal.
     time.sleep(wait_start)
     self.failif(not utils.pid_is_alive(pid),
                 "Pid %s not running after wait: %s"
                 % (pid, dkrcmd.exit_status))
     self.loginfo("Signaling pid %d with signal %s",
                  pid, self.config['listen_signal'])
     utils.signal_pid(pid, sig)
     self.loginfo("Waiting up to %d seconds for exit",
                  dkrcmd.timeout)
     # Throw exception if takes > docker_timeout to exit
     dkrcmd.wait()
    def run_once(self):
        self.loginfo("Starting background docker command, timeout %s seconds",
                     self.config['docker_timeout'])

        in_pipe_r, in_pipe_w = os.pipe()
        dkrcmd = AsyncDockerCmd(self, 'run', self.sub_stuff['subargs'],
                                timeout=self.config['docker_timeout'])
        dkrcmd.verbose = True
        dkrcmd.timeout = 10
        # Runs in background
        dkrcmd.execute(in_pipe_r)
        self.sub_stuff['dkrcmd'] = dkrcmd
        wait = self.config['wait_interactive_cmd']
        icmd = self.config['interactive_cmd'] + "\n"
        # Allow noticable time difference for date command,
        # and eat into dkrcmd timeout after receiving signal.
        time.sleep(wait)
        os.write(in_pipe_w, icmd)

        self.loginfo("Waiting up to %d seconds for exit",
                     dkrcmd.timeout)
        # Throw exception if takes > docker_timeout to exit

        self.loginfo("Container running, waiting %d seconds to finish.", wait)
        self.logdebug("interactive cmds %s", icmd)
        time.sleep(wait)
        os.close(in_pipe_w)
        dkrcmd.wait()