Я знаю, что у Ansible проблемы с Windows. Вот почему я не хочу использовать его для своего хоста. Я хочу создать локальную виртуальную машину Linux, работающую в VirtualBox.

Мне было интересно, может ли кто-нибудь сказать мне, возможно ли использовать vagrant для создания двух независимых виртуальных машин на одном компьютере. Затем установите Ansible на одну из этих виртуальных машин и войдите в нее с помощью SSH. Оттуда используйте виртуальную машину Linux с Ansible в качестве хоста, чтобы подготовить другую виртуальную машину Linux, которая была создана через хост-машину Windows. Итак, это не виртуальная машина внутри виртуальной машины. Это всего лишь две виртуальные машины, работающие в Windows с использованием vagrant, а затем SSH для одной из этих виртуальных машин, чтобы использовать Ansible для подготовки другой виртуальной машины.

Шаги:

  1. Vagrant VM 1 и установка Ansible
  2. Бродяга ВМ 2
  3. SSH к ВМ 1
  4. Используйте Ansible для подготовки ВМ 2 с помощью ВМ 1.

Это можно сделать? Извините, если это сбивает с толку.

3
CodyK 29 Окт 2015 в 16:52

2 ответа

Лучший ответ

Теперь есть новый локальный провайдер Ansible в Vagrant 1.8.0, который можно использовать в своем сценарии.

Особенно посмотрите раздел документации "Советы и хитрости", там есть точное решение (которое сработало для меня).

Ниже приведен мой Vagrantfile для этого сценария (немного отличается от того, который указан в документации), который также решает потенциальные проблемы с разрешениями ssh и «исполняемым» файлом инвентаризации (если вы используете Cygwin):

Vagrant.configure(2) do |config|
  config.vm.synced_folder "./", "/vagrant", 
     owner: "vagrant",
     mount_options: ["dmode=775,fmode=600"]

  config.vm.define "vm2" do |machine|
    machine.vm.box = "box-cutter/ubuntu1404-desktop"
    machine.vm.network "private_network", ip: "172.17.177.21"
  end

  config.vm.define 'vm1' do |machine|
    machine.vm.box = "ubuntu/trusty64"
    machine.vm.network "private_network", ip: "172.17.177.11"    

    machine.vm.provision :ansible_local do |ansible|
      ansible.provisioning_path = "/vagrant"
      ansible.playbook = "provisioning/playbook.yml"      
      ansible.limit = "vm2"
      ansible.inventory_path = "inventory"
      ansible.verbose = "vvv"
      ansible.install = true    
    end
  end
end

И инвентарный файл:

vm1 ansible_connection=local
vm2 ansible_ssh_host=172.17.177.21 ansible_ssh_private_key_file=/vagrant/.vagrant/machines/vm2/virtualbox/private_key
4
Łukasz Wiatrak 27 Дек 2015 в 23:36

Чтобы подготовить блок, вам не обязательно делать это с помощью другого блока, в этом сценарии Windows вы можете просто написать свои playbook, поделиться им с гостем и нажать ansible-playbook, используя shell обеспечение.

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

$script = <<SCRIPT
sudo apt-get install -y software-properties-common
sudo apt-add-repository -y ppa:ansible/ansible
sudo apt-get update
sudo apt-get install -y ansible
ansible-playbook /home/vagrant/provisioning/playbook.yml
SCRIPT

config.vm.synced_folder "./provisioning", "/home/vagrant/provisioning"

config.vm.provision "shell", inline: $script

end

Первые строки станут доступными на вашем ящике, затем он будет нацелен на playbook, которым вы поделились с вашим ящиком, и запустит playbooks.

Это пример. Однажды я использовал этот подход, чтобы подготовить свой рабочий бродячий ящик, надеюсь, эта идея может вам помочь.

3
Carlos Guzman 29 Окт 2015 в 18:35