public function execute(HarbormasterBuild $build, HarbormasterBuildTarget $build_target)
 {
     $settings = $this->getSettings();
     // Create the lease.
     $lease = id(new DrydockLease())->setResourceType('host')->setAttributes(array('platform' => $settings['platform']))->queueForActivation();
     // Wait until the lease is fulfilled.
     // TODO: This will throw an exception if the lease can't be fulfilled;
     // we should treat that as build failure not build error.
     $lease->waitUntilActive();
     // Create the associated artifact.
     $artifact = $build->createArtifact($build_target, $settings['name'], HarbormasterBuildArtifact::TYPE_HOST);
     $artifact->setArtifactData(array('drydock-lease' => $lease->getID()));
     $artifact->save();
 }
 public function execute(HarbormasterBuild $build, HarbormasterBuildTarget $build_target)
 {
     $settings = $this->getSettings();
     $variables = $build_target->getVariables();
     $path = $this->mergeVariables('vsprintf', $settings['path'], $variables);
     $artifact = $build->loadArtifact($settings['hostartifact']);
     $lease = $artifact->loadDrydockLease();
     $interface = $lease->getInterface('filesystem');
     // TODO: Handle exceptions.
     $file = $interface->saveFile($path, $settings['name']);
     // Insert the artifact record.
     $artifact = $build->createArtifact($build_target, $settings['name'], HarbormasterBuildArtifact::TYPE_FILE);
     $artifact->setArtifactData(array('filePHID' => $file->getPHID()));
     $artifact->save();
 }