Ansible&流浪的发展环境

时间:2016-01-07 13:01:30

标签: ssh vagrant ansible

我刚刚发现了Ansible,它很棒!我已经编写了一些很酷的剧本来管理我的服务器上的0downtime docker部署,但由于我有时不得不使用糟糕的互联网连接,我浪费了相当多的时间等待事情发生。所以我想,我可能能够针对boot2docker运行Ansible,但没有成功,经过一些研究后,我意识到它太过于hacky而且它永远不会像我的实际Ubuntu服务器那样。所以在这里我试图让它与Vagrant一​​起工作。

我想要像笔记本电脑>这样的东西。 Ansible> Vagrant Box ;不想从Vagrant Box中运行剧本!

VagrantFile

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.ssh.forward_agent = true
end

vagrant ssh-config

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile "/Users/cesco/Code/vagrant/.vagrant/machines/default/virtualbox/private_key"
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

感谢一些问题,我能够做到这一点:

$ vagrant ssh-config > vagrant-ssh
$ ssh -F vagrant-ssh default
$ vagrant@vagrant-ubuntu-trusty-64:~$

但每次我尝试在流浪盒上运行Ansible ping时,我都会继续localhost | FAILED => SSH Error: Permission denied (publickey,password).

Ansible库存

[staging]
vagrant@localhost

Ansible config

[ssh_connection]
ssh_args = -o   UserKnownHostsFile=/dev/null \
           -o   StrictHostKeyChecking=no \
           -o   PasswordAuthentication=no \
           -o   IdentityFile=/Users/cesco/.vagrant.d/insecure_private_key \
           -o   IdentitiesOnly=yes \
           -o   LogLevel=FATAL \
           -p 2222

如何将ssh文件翻译为ansible Configurantion? 它也不能在命令行上运行!

ssh -vvv vagrant@localhost -p 2222 -i /Users/cesco/.vagrant.d/insecure_private_key -o IdentitiesOnly=yes -o LogLevel=FATAL -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

2 个答案:

答案 0 :(得分:2)

要使用vagrant和经典的ssh连接,首先将另一个私有IP添加到您的Vagrant文​​件中。

config.vm.network "private_network", ip: "192.168.1.2"

重新加载您的实例

vagrant reload

然后您可以使用私钥通过ssh进行连接。

ssh -vvv vagrant@192.168.1.2 -p 2222 -i /Users/cesco/.vagrant.d/insecure_private_key 

这是最好的方法。

答案 1 :(得分:0)

你误解了。流浪的ansible插件不会从流浪者那里运行ansible,而是从你的本地方框SSH进入流浪者。这是要走的路,因为这意味着只需进行一些小改动就可以定位远程主机。

要使其正常工作,您需要在Vagrantfile中添加以下内容:

  config.vm.provision "ansible" do |ansible|
      ansible.playbook = "ansible/vagrant.yml"
      ansible.sudo = true
      ansible.ask_vault_pass = true       # comment out if you don't need
      ansible.verbose = 'vv'              # comment out if you don't want

      ansible.groups = {
        "tag_Role_myrole" => ["myrole"]
      }

      ansible.extra_vars = {
        role: "myrole"
      }
  end

  # Set the name of the VM. 
  config.vm.define "myrole" do |myrole|
    luigi.vm.hostname = "myrole"
  end

使用以下代码创建/更新您的ansible.cfg文件

hostfile = ../.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

创建一个hosts广告资源文件,其中包含:

localhost=127.0.0.1  ansible_connection=local

现在vagrant up将调出并配置实例,或运行vagrant provision来(重新)设置正在运行的流浪者。

直接针对你的流浪汉使用剧本:

ansible-playbook -u vagrant --private-key=~/.vagrant.d/insecure_private_key yourplaybook.yml