public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('root');
$rootNode->children()->variableNode('vars')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->end()->arrayNode('blueprints')->useAttributeAsKey('stackname')->isRequired()->cannotBeEmpty()->prototype('array')->children()->scalarNode('stackname')->end()->scalarNode('description')->end()->variableNode('parameters')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->end()->variableNode('tags')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->end()->variableNode('vars')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->end()->variableNode('env')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->end()->variableNode('before')->end()->variableNode('after')->end()->scalarNode('basepath')->isRequired()->end()->variableNode('template')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->beforeNormalization()->ifString()->then(function ($value) {
return array($value);
})->end()->end()->variableNode('optionalTemplates')->treatTrueLike(array())->treatFalseLike(array())->treatNullLike(array())->defaultValue(array())->beforeNormalization()->ifString()->then(function ($value) {
return array($value);
})->end()->end()->scalarNode('stackPolicy')->end()->variableNode('profile')->end()->variableNode('account')->end()->scalarNode('OnFailure')->end()->scalarNode('Capabilities')->end()->end()->end()->end();
return $treeBuilder;
}