#linux #makefile
#linux #makefile
Вопрос:
Вытаскиваю волосы из этого. Я уверен, что это очень просто. Когда я запускаю:
make django_servers ENV="staging"
В приведенном ниже Makefile я получаю следующую ошибку, когда она попадает в строку $(MAKE) scoring_worker_servers ${ENV}
:
make[1]: *** No rule to make target 'staging'. Stop.
Я включил весь Makefile.
# Put any command that doesn't create a file here (almost all of the commands)
.PHONY:
help
beat_servers
database_servers
default_celery_worker_servers
django_servers
webapp_servers
rabbit_servers
renew_ssl
scoring_worker_servers
usage:
@echo "Available commands:"
@echo "help Display available commands"
@echo "beat_servers Push ansible config to beat_servers"
@echo "database_servers Push ansible config to database servers"
@echo "default_celery_worker_servers Push ansible config to default celery worker servers"
@echo "django_servers Push ansible config to django servers"
@echo "webapp_servers Push ansible config to webapp servers"
@echo "rabbit_servers Push ansible config to rabbit servers"
@echo "renew_ssl Renew SSL certificates and push to required servers"
@echo "scoring_worker_servers Push ansible config to scoring worker servers"
help:
$(MAKE) usage
beat_servers:
@ansible-playbook ansible/beat_servers.yml -i ansible/inventories/${ENV}/beat --vault-id ansible/password.txt
database_servers:
@ansible-playbook ansible/database_servers.yml -i ansible/inventories/${ENV}/database --vault-id ansible/password.txt
default_celery_worker_servers:
@ansible-playbook ansible/default_celery_worker_servers.yml -i ansible/inventories/${ENV}/default_celery_worker --vault-id ansible/password.txt
scoring_worker_servers:
@ansible-playbook ansible/scoring_worker_servers.yml -i ansible/inventories/${ENV}/scoring_worker --vault-id ansible/password.txt
django_servers:
@ansible-playbook ansible/django_servers.yml -i ansible/inventories/${ENV}/django --vault-id ansible/password.txt
$(MAKE) default_celery_worker_servers ${ENV}
$(MAKE) scoring_worker_servers ${ENV}
$(MAKE) beat_servers ${ENV}
webapp_servers:
@ansible-playbook ansible/webapp_servers.yml -i ansible/inventories/${ENV}/webapp --vault-id ansible/password.txt
rabbit_servers:
@ansible-playbook ansible/rabbit_servers.yml -i ansible/inventories/${ENV}/rabbit --vault-id ansible/password.txt
renew_ssl:
@certbot renew --dns-cloudflare-credentials /cloudflare/cloudflare.ini
$(MAKE) django_servers ${ENV}
$(MAKE) webapp_servers ${ENV}
Комментарии:
1. Похоже, вы пишете императивную программу, в которой вы указываете кучу шагов, которые должны быть выполнены по порядку. Bash лучше подходит для такого рода вещей. Вот пример того, как написать скрипт с выбираемыми подкомандами: gist.github.com/waylan/4080362
Ответ №1:
Вы не можете передать значение ENV в качестве параметра make
. Но вы можете установить для него переменную:
$(MAKE) scoring_worker_servers ENV=$(ENV)
Комментарии:
1. … голоса, поданные лицами с репутацией менее 15, записываются, но не изменяют публично отображаемую оценку публикации: (