У меня есть Makefile, который генерирует шаблон облачной информации с использованием jinja2 (последняя команда: j2 source-template.j2.yml parameter-file.j2data.yml> final-cloudformation.yml). Он сопоставляет исходный шаблон с соответствующим параметром j2data file и генерирует окончательный файл в render / dev или rendered / prodall. Некоторый код из текущего поколения:
EC2DC_TEMPLATE := templates/ec2dc.j2.yml
EC2DC_DEV_APP := jiraDC
EC2DC_PROD_APP := jiraDC
RENDERED_DIR := templates/rendered
# Main targets
.DEFAULT: build
.PHONY: build release
build: EC2DC_DEV EC2DC_PRODALL
EC2DC_DEV: $(patsubst %,${RENDERED_DIR}/dev/%-ec2dc.cfn.yml, ${EC2DC_DEV_APP})
EC2DC_PRODALL: $(patsubst %,${RENDERED_DIR}/prodAll/%-ec2dc.cfn.yml, ${EC2DC_PROD_APP})
${RENDERED_DIR}/%-ec2dc.cfn.yml: parameters/%.j2data.yml ${EC2DC_TEMPLATE} | dirs
@echo Rendering $@ CloudFormation Template
@j2 ${EC2DC_TEMPLATE} $< > $@
# Create directories
.PHONY: dirs
dirs:
@echo "Creating directories"
@mkdir -p templates/rendered/dev templates/rendered/prod templates/rendered/prodAll build
Теперь это дает вывод, как показано ниже (и, как я уже сказал, сгенерированный шаблон облачной информации имеет "тот же" префикс, что и файл параметров) Вывод:
echo "Creating directories:"
echo Rendering templates/rendered/dev/jiraDC-ec2dc.cfn.yml CloudFormation Template
j2 templates/ec2dc.j2.yml parameters/dev/jiraDC.j2data.yml > templates/rendered/dev/jiraDC-ec2dc.cfn.yml
echo Rendering templates/rendered/prodAll/jiraDC-ec2dc.cfn.yml CloudFormation Template
j2 templates/ec2dc.j2.yml parameters/prodAll/jiraDC.j2data.yml > templates/rendered/prodAll/jiraDC-ec2dc.cfn.yml
Вопросы:
1. Я не могу понять, как он сопоставляет соответствующий файл параметров в строке: $ {RENDERED_DIR} /% - ec2d c .cfn.yml : параметры /%. j2data.yml $ {EC2DC_TEMPLATE} | dirs, поскольку мне нужно, чтобы имя файла назначения отличалось от имени файла параметров.
2. Что означает | dirs
pipe в приведенной выше команде? Означает ли труба и затем dirs, что она вызывает цель dirs "до" генерации целей?
3. Как выше работает в "для" l oop?
Теперь мне нужно добавить код для выполнения команд j2, где он использует «тот же» файл параметров, что и выше, но окончательное имя шаблона отличается. (Исходный шаблон ie jiraAdmin и целевой шаблон ie jiraAdmin.cfn - имена файлов не важны, но они определенно не могут совпадать с именем файла параметра, так как это поколение файла уже существует в коде) Пример: параметры j2 templates / jiraAdmin.j2.yml /dev/jiraDC.j2data.yml> templates / rendered / dev / jiraAdmin.cfn.yml или j2 templates / jiraAdmin.j2.yml параметры / prodAll / jiraD C .j2data.yml> шаблоны / rendered / prodAll /jiraAdmin.cfn.yml
Пожалуйста, помогите разобраться с этим и указателями (или, если возможно, некоторыми фрагментами), как мне этого добиться?