2014-02-22 40 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