Vagrant Ansible local provisioner có thể chạy bằng mấy cách?

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