Я создаю прототип Ansible с помощью Vagrant и использую «vagrant Provision» для создания своего стека. Я определил роли для создания базовой системы, веб-сервера, сервера базы данных и сервера приложений. (Основная система будет состоять из ролей, которые потребуются для любого типа системы, например, для установки системных пакетов и пользователей).
Я хотел бы настроить Vagrant для выполнения всех ролей (чтобы установить все на одной виртуальной машине), но в производственной среде я мог бы захотеть установить только определенные роли на определенных машинах. Как лучше всего структурировать мою книгу и инвентарный файл, чтобы я мог разместить на одном сервере машину Vagrant и группу производственных машин с несколькими серверами?
Будет ли это включать в себя создание нескольких пьес? Один для Vagrant и один для каждой конфигурации? Если так, это может привести к большому дублированию кода.
Вот что у меня пока есть, но не работает ...
Вот полный проект: https://github.com/JoeJasinski/docker-ansible-web
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provision :ansible do |ansible|
ansible.playbook = "ansible/site.yml"
ansible.verbose = "vvv"
ansible.extra_vars = {}
ansible.inventory_path = "ansible/inventory.ini"
ansible.sudo = true
ansible.groups = {
"nginxServer" => ["nginxServer",],
"djangoServer" => ["djangoServer",],
"postgresServer" => ["postgresServer",]
}
end
inventory.ini
[nginxServer]
127.0.0.1
[djangoServer]
127.0.0.1
[postgresServer]
127.0.0.1
site.yml
---
- name: Base states
hosts: all
vars:
- update_apt_cache: yes
vars_files:
- env_vars/base.yml
roles:
- role: base
- { role: users, tags: ['users'] }
- { role: sites, tags: ['sites'] }
- name: Nginx Host
hosts: nginxServer
vars:
- update_apt_cache: yes
vars_files:
- env_vars/base.yml
roles:
- { role: supervisor, tags: ['supervisor'] }
- { role: nginx, tags: ['nginx'] }
- name: Django Host
hosts: djangoServer
vars:
- update_apt_cache: yes
vars_files:
- env_vars/base.yml
roles:
- { role: supervisor, tags: ['supervisor'] }
- { role: django, tags: ['django'] }
- name: Postgres Host
hosts: postgresServer
vars:
- update_apt_cache: yes
vars_files:
- env_vars/base.yml
roles:
- { role: postgres, tags: ['postgres'],}
- { role: postgis, tags: ['postgis'], }