コード例 #1
0
ファイル: PlaybookJob.php プロジェクト: AidasK/dogpro
 public function handle(Pusher $pusher)
 {
     $timeStarted = time();
     $key = $this->writePrivateKey();
     try {
         $this->release->update(['status' => Release::RUNNING, 'started_at' => new \DateTime()]);
         $ansible = new Ansible($this->release->path(), Release::INVENTORY_FILENAME, Release::PLAYBOOK_FILENAME, $this->release->inventory->params + ['private_key' => $key]);
         $process = $ansible->play();
         $process->start();
         $lastOut = $process->getOutput();
         while ($process->isRunning() && !$this->release->isCancelled()) {
             $out = $process->getOutput();
             if ($lastOut != $out) {
                 $this->updateRelease($process);
                 $pusher->trigger(['releases'], "release-" . $this->release->id, $this->release->toArray());
                 $lastOut = $out;
             }
             sleep(1);
         }
         if ($process->isRunning()) {
             $process->stop(0);
         }
         $this->fs()->delete($key);
         $this->updateRelease($process);
         if ($this->release->status == Release::CANCELLED) {
             $pusher->trigger(['releases'], "release-" . $this->release->id, $this->release->toArray());
         } elseif ($process->getExitCode() == 0) {
             $this->notifier()->notifySuccess($this->release);
             $this->release->update(['status' => Release::COMPLETED, 'time' => time() - $timeStarted]);
             $pusher->trigger(['releases'], "release-" . $this->release->id, $this->release->toArray());
         } else {
             $this->notifier()->notifyFailure($this->release, $process->getErrorOutput());
             throw new AnsibleException($this->release, $ansible, $process->getErrorOutput());
         }
     } catch (\Exception $e) {
         $this->release->update(['status' => Release::ERROR, 'time' => time() - $timeStarted]);
         $pusher->trigger(['releases'], "release-" . $this->release->id, $this->release->toArray());
         $this->fs()->delete($key);
         throw $e;
     }
 }
コード例 #2
0
ファイル: AnsibleException.php プロジェクト: AidasK/dogpro
 /**
  * @param Release $release
  * @param Ansible $ansible
  * @param string $message
  */
 public function __construct(Release $release, Ansible $ansible, $message = "")
 {
     $this->ansible = $ansible;
     $message = sprintf("Error while running ansible (%s/%s): %s", $ansible->getPlaybookFile(), $ansible->getInventoryFile(), $message);
     parent::__construct($release, $message);
 }