Я пытался в течение нескольких дней настраивать Ansible, чтобы использовать его для загрузки среды dev для моего проекта и, во-вторых, развертывания для бета-версий и живых серверов. Проект не такой большой, но кажется, что Ansible недостаточно гибкий, когда речь идет о небольших проектах.Ansible: как обрабатывать серверы на одном хосте?
Инвентарь
[development]
web_server ansible_connection=docker
db_server ansible_connection=docker
[production]
web_server ansible_host=10.10.10.10 ansible_user=tom ansible_connection=ssh
db_server ansible_host=10.10.10.10 ansible_user=tom ansible_connection=ssh
Я хочу, чтобы держать web_server
и db_server
псевдонимов нетронутыми, так что я могу переключаться между разработкой и производством в моем сценарии без шума. Основная проблема заключается в том, что я не могу понять, как создать playbook, который будет хорошо работать с вышеуказанной настройкой.
Это решение не работает, так как оно выполняет все задачи дважды!
---
- hosts: staging
tasks:
- name: Setup web server
command: uptime
delegate_to: web_server
- name: Setup db server
command: ls
delegate_to: db_server
Это решение решает вышеуказанную проблему, но она выводит неправильный псевдоним (web_server
даже при выполнении задачи дб)!
---
- hosts: staging
run_once: true
tasks:
- name: Setup web servers
command: uptime
delegate_to: web_server
- name: Setup db servers
command: ls
delegate_to: db_server
Это решение было бы правдоподобно, но анзибль не поддерживает доступ к отдельному узлу из группы:
---
- hosts: staging:web_server
tasks:
- name: Deploy to web server
command: uptime
---
- hosts: staging:db_server
tasks:
- name: Deploy to db server
command: ls
Есть ли способ добиться того, чего я хочу? Безразличный чувствует себя довольно ограничительным, пока этот момент не станет обломком после всей похвалы, которую я слышал об этом.
-------------------------- Редактировать после предложения удондана ---------------- ------
Я попробовал предложение удондана, и оно, похоже, сработало. Однако, когда я добавляю новую группу в инвентарь, она ломается.
[development]
web_server ansible_connection=docker
db_server ansible_connection=docker
[staging]
web_server ansible_host=20.20.20.20 ansible_user=tom ansible_connection=ssh
db_server ansible_host=20.20.20.20 ansible_user=tom ansible_connection=ssh
[production]
web_server ansible_host=10.10.10.10 ansible_user=tom ansible_connection=ssh
db_server ansible_host=10.10.10.10 ansible_user=tom ansible_connection=ssh
В этом случае IP-сервер промежуточного (20.20.20.20) будет использоваться при запуске производства пьес.
Это похоже на решение проблемы! Однако я удивляюсь, как Ansible знает, какие псевдонимы 'web_server' и' db_server' использовать? Связано ли это с именем 'имя группы == имя файла'? – Pithikos
После игры с этим, это фактически не решает проблему. Если я добавлю промежуточную группу с одинаковыми именами псевдонимов, но с разными IP-адресами, производственные машины будут использоваться вместо промежуточных! – Pithikos
Да, мне было интересно, будет ли это на самом деле работать таким образом ... но я не был уверен, потому что вы не показывали, как именно вы используете свой инвентарь. Я обновил свой ответ. – udondan