Vagrant Ansible local provisioner là chức năng tự động chạy Ansible sau khi máy ảo khởi dộng lên xong.
Để chạy được Vagrant Ansible local provisioner thì Vagrant box Linux được đóng gói phải cài sẵn Ansible để làm Ansible control node.
Cũng có thể kết hợp Vagrant shell provisioner để cài Ansible trước để sau đó chạy được Vagrant Ansible local provisioner.
Sau đây là hình chạy Linux LVM EXT4 filesystem XFS filesystem fullstack bằng Ansible playbook kiểu Vagrant Ansible local provisioner.
Điều thú vị là bạn có thể kết hợp Vagrant Bash provisioner với Vagrant Ansible local provisioner để chạy theo nhiều cách khác nhau
Đây là cách 2 để chạy Ansible playbook trực tiếp từ Vagrant Ansible local provisioner.
Có khá nhiều ví dụ mẫu về cấu hình Vagrant Ansible local provisioner trong Vagrantfile như bên dưới:
Vagrant.configure("2") do |config|
# Run Ansible from the Vagrant VM
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
end
end
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
ansible.install_mode = "pip"
ansible.version = "2.2.1.0"
end
sudo pip install --upgrade ansible==2.2.1.0
curl https://bootstrap.pypa.io/get-pip.py | sudo python
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
ansible.install_mode = "pip"
ansible.pip_install_cmd = "https_proxy=http://your.proxy.server:port curl -s https://bootstrap.pypa.io/get-pip.py | sudo https_proxy=http/your.proxy.server:port python"
ansible.version = "2.2.1.0"
end
https_proxy=http://your.proxy.server:port curl -s https://bootstrap.pypa.io/get-pip.py | sudo https_proxy=http://your.proxy.server:porpython
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
ansible.install_mode = "pip_args_only"
ansible.pip_args = "-r /vagrant/requirements.txt"
end
sudo pip install -r /vagrant/requirements.txt
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
ansible.install_mode = :pip
ansible.pip_args = "--index-url https://pypi.internal"
end
sudo pip install --index-url https://pypi.internal --upgrade ansible
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
config.vm.provision "ansible_local" do |ansible|
ansible.become = true
ansible.playbook = "playbook.yml"
ansible.galaxy_role_file = "requirements.yml"
ansible.galaxy_roles_path = "/etc/ansible/roles"
ansible.galaxy_command = "sudo ansible-galaxy install --role-file=%{role_file} --roles-path=%{roles_path} --force"
end
end
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.define "node1" do |machine|
machine.vm.network "private_network", ip: "172.17.177.21"
end
config.vm.define "node2" do |machine|
machine.vm.network "private_network", ip: "172.17.177.22"
end
config.vm.define 'controller' do |machine|
machine.vm.network "private_network", ip: "172.17.177.11"
machine.vm.provision :ansible_local do |ansible|
ansible.playbook = "example.yml"
ansible.verbose = true
ansible.install = true
ansible.limit = "all" # or only "nodes" group, etc.
ansible.inventory_path = "inventory"
end
end
end
controller ansible_connection=local
node1 ansible_host=172.17.177.21 ansible_ssh_private_key_file=/vagrant/.vagrant/machines/node1/virtualbox/private_key
node2 ansible_host=172.17.177.22 ansible_ssh_private_key_file=/vagrant/.vagrant/machines/node2/virtualbox/private_key
[nodes]
node[1:2]
[defaults]
host_key_checking = no
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes