Пример #1
0
 public function getPreprocessedTemplate($force = false)
 {
     // Gather dependencies and create blueprint references
     $this->getStackName();
     $this->getProfile();
     $this->getParameters();
     $this->getTags();
     // convert templates paths to template objects
     $templates = [];
     foreach ($this->getTemplates() as $key => $templateFile) {
         $templateFile = $this->getBasePath() . '/' . $this->valueResolver->resolvePlaceholders($templateFile, $this, 'template');
         $realTemplateFile = realpath($templateFile);
         if ($realTemplateFile === false || !is_file($realTemplateFile) || !is_readable($realTemplateFile)) {
             throw new \Exception('Could not find template file ' . $templateFile . ' referenced in blueprint ' . $this->name);
         }
         $templates[] = is_int($key) ? new Template($realTemplateFile) : new PrefixedTemplate($key, $realTemplateFile);
     }
     foreach ($this->getOptionalTemplates() as $key => $templateFile) {
         $templateFile = $this->getBasePath() . '/' . $this->valueResolver->resolvePlaceholders($templateFile, $this, 'optionalTemplates');
         $realTemplateFiles = glob($templateFile);
         foreach ($realTemplateFiles as $realTemplateFile) {
             if ($realTemplateFile && is_file($realTemplateFile) && is_readable($realTemplateFile)) {
                 $templates[] = is_int($key) ? new Template($realTemplateFile) : new PrefixedTemplate($key, $realTemplateFile);
             }
         }
     }
     if (count($templates) === 0) {
         throw new \Exception('No template(s) found');
     }
     $additionalData = ['Metadata' => [Stack::METADATA_KEY => $this->getBlueprintReference()]];
     if ($force) {
         $additionalData['Resources'] = ['Force' . time() => ['Type' => 'AWS::CloudFormation::WaitConditionHandle']];
     }
     $description = null;
     if (!empty($this->blueprintConfig['description'])) {
         $description = $this->valueResolver->resolvePlaceholders($this->blueprintConfig['description'], $this, 'description');
     }
     $templateMerger = new TemplateMerger();
     return $templateMerger->merge($templates, $description, $additionalData);
 }