2014-02-22 43 views
52

我想用Ansible開始配置我的Vagrantbox,但我無法弄清楚如何處理主機文件。在Mac OS X上存儲Ansible主機文件的位置

根據文檔應存入/etc/ansible/hosts,但我無法在我的系統(Mac OS X)上找到它。我還看到了一些示例,其中host.ini文件位於與vagrant文​​件相鄰的文檔根目錄中。

所以我的問題是你將存儲你的hostfile設置一個單一的流浪者箱子?

回答

61

雖然Ansible將嘗試在默認情況/etc/ansible/hosts,有幾種方式來告訴ansible到哪裏尋找一個替代清單文件:

  • 使用-i命令行開關,並通過您的庫存文件路徑
  • hostfile = path_to_hostfile~/.ansible.cfgconfiguration file
  • 使用export ANSIBLE_HOSTS=path_to_hostfile[defaults]部分由DomaNitro在他的回答提出

現在你不提,如果你想使用ansible provisionner available in vagrant,或者如果你想手動配備你的流浪主機。

我們去的流浪ansible provisionner第一:

創建一個目錄(如測試),並建立內部的流浪文件:你什麼時候

Vagrant.configure("2") do |config| 

    config.vm.box = "precise64-v1.2" 
    config.vm.box_url = "http://files.vagrantup.com/precise64.box" 

    config.vm.define :webapp do |webapp| 
    webapp.vm.hostname = "webapp.local" 
    webapp.vm.network :private_network, ip: "192.168.123.2" 
    webapp.vm.provider "virtualbox" do |v| 
     v.customize ["modifyvm", :id, "--memory", 200, "--name", "vagrant-docs", "--natdnshostresolver1", "on"] 
    end 
    end 

    # 
    # Provisionning 
    # 
    config.vm.provision :ansible do |ansible| 
    ansible.playbook = "provision.yml" 
    ansible.inventory_path = "hosts" 
    ansible.sudo = true 
    # 
    # Use anible.tags if you want to restrict what `vagrant provision` 
    # Here is a list of possible tags 
    # ansible.tags = "foo bar" 
    # 
    # Use ansible.verbose to see detailled output for ansible runs 
    # ansible.verbose = 'vvv' 
    # 
    # Customize your stuff here 
    ansible.extra_vars = { 
     some_var: 42, 
     foo: "bar", 
    } 
    end 
end 

現在:

Vagrantfile運行vagrant up(或vagrant provision),Vangrant's ansible provionner將在與Vagrantfile相同的目錄中查找文件名hosts,並嘗試應用劇本。

您也可以手動運行它,而不是訴諸放浪的ansible provisionner:

ansible-playbook -i hosts provision.yml --ask-pass --sudo 

注意流浪+ VirtualBox虛擬+ Ansible三人並不總是相處得很好。有一些版本組合是有問題的。如果遇到問題,請嘗試升級到最新版本(特別是關於網絡)。

{} shameless_plug你可以找到一個更廣泛的例子混合流浪漢,ansible here {/ shameless_plug}

祝你好運!

+2

大答案的人!我一直在玩流浪兩天,我一直回到這個答案和你發佈的鏈接。 Thx男人! – StenW

+0

謝謝。樂意效勞 ! – leucos

+1

我愛你解決了這個問題,但也指出了一個更好的方法來完成同樣的事情... – jsh

3

如果您使用Vagrant的可靠配置器,Vagrant會自動生成一個Ansible hosts文件(名爲vagrant_ansible_inventory_default)並配置ansible-playbook以使用該文件。它看起來像這樣:

# Generated by Vagrant 

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 

它調用流浪主機「默認」,所以你的戲要麼是指「默認」或「全部」。

6

我喜歡使用bash環境變量,因爲我的基礎項目是與其他用戶共享的。 你可以簡單地export ANSIBLE_HOSTS=/pathTo/inventory/這可以是一個主機文件或一個多文件目錄。

你也可以在你的〜/ .bash_profile中寫下它的持久性 其他一些變量可以這樣設置,而不是維護一個conf文件以獲取更多信息,在ansible/lib/ansible/constants中檢查源代碼。 py

37

如果您使用Brew安裝Ansible,您很可能會在/usr/local/etc/ansible/hosts找到默認主機文件。但是,正如其他人指出的那樣,您可能只想更改默認值。

+4

謝謝。我不得不創建一個目錄'/ usr/local/etc/ansible /',並將一個hosts文件放入其中,與Linux不同。 – vikas027

+0

@counterbeing如果您通過macports安裝了相同的行爲。你可以做一個simlink,雖然 – Buzut

+0

如果你通過pip安裝它,它在哪裏? http://docs.ansible.com/ansible/intro_installation.html#latest-releases-on-mac-osx –

0

這裏是一個說明在Mac上安裝Ansible後做什麼,它的工作對我來說:ansible-tips-and-tricks.readthedocs.io

我下載的ansible.cfg文件

/Users/"yourUser"/.ansible 

事後你可以編輯ansible。 cfg文件通過取消註釋

inventory  = /Users/"yourUser"/.ansible 

行並指定到上面顯示的文件夾的路徑。您也可以在此文件夾中創建主機文件。嘗試一下當地,你可以把

localhost    ansible_connection=local 

在hosts文件,並嘗試一下與

ansible -m ping all