在Mac OS X上存储Ansible主机文件的位置

时间:2014-02-22 18:42:25

标签: macos ansible ansible-inventory

我正在尝试使用Ansible来配置我的Vagrantbox,但我无法弄清楚如何处理主机文件。

根据文档,应该在/etc/ansible/hosts中存储,但我在我的系统(Mac OS X)上找不到这个。我还看到了host.ini文件位于文档根目录中与vagrant文​​件相邻的示例。

所以我的问题是你在哪里存储你的主机文件来设置一个流浪盒?

6 个答案:

答案 0 :(得分:70)

虽然Ansible默认会尝试/etc/ansible/hosts,但有几种方法可以告诉ansible在哪里查找备用库存文件:

  • 使用-i命令行开关并传递您的广告资源文件路径
  • hostfile = path_to_hostfile configuration file
  • [defaults]部分添加~/.ansible.cfg
  • 按照DomaNitro的回答
  • 使用export ANSIBLE_HOSTS=path_to_hostfile

现在您没有提及是否要使用ansible provisionner available in vagrant,或者您是否想要手动配置您的流浪汉主机。

我们先来看看Vagrant ansible供应商:

创建目录(例如测试),并在其中创建一个Vagrant文​​件:

<强> Vagrantfile

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

现在,当您运行vagrant up(或vagrant provision)时,Vangrant的ansible provionner将在与Vagrantfile相同的目录中查找文件名hosts,并尝试应用{{ 1}}剧本。

您也可以手动运行它,而无需使用Vagrant的ansible配置器:

provision.yml

请注意,Vagrant + Virtualbox + Ansible三人组并不总能相处得很好。有些版本的组合存在问题。如果遇到问题(特别是关于网络),请尝试升级到最新版本。

{shameless_plug}你可以找到一个更广泛的例子,混合流浪汉和ansible here {/ shameless_plug}

祝你好运!

答案 1 :(得分:38)

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

答案 2 :(得分:7)

我喜欢使用bash环境变量,因为我的基础项目与其他用户共享。 你可以简单地export ANSIBLE_HOSTS=/pathTo/inventory/这可以是一个主机文件或一个包含多个文件的目录。

你也可以在你的〜/ .bash_profile中使用它来写它的持久性 一堆其他变量可以设置这种方式,而不是维护一个conf文件以获取更多信息,检查ansible / lib / ansible / constants.py中的源代码

答案 3 :(得分:3)

如果您使用Vagrant的ansible配置器,Vagrant将自动生成Ansible主机文件(称为vagrant_ansible_inventory_default)并配置ansible-playbook以使用该文件。它看起来像这样:

# Generated by Vagrant

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

它将Vagrant主机称为“默认”,因此您的播放应该引用“默认”或“全部”。

答案 4 :(得分:0)

以下是在Mac上安装Ansible后要做的操作说明,它对我有用:ansible-tips-and-tricks.readthedocs.io

我将ansible.cfg文件下载到

/Users/"yourUser"/.ansible

然后您可以通过取消注释

来编辑ansible.cfg文件
inventory      = /Users/"yourUser"/.ansible 

行并指定ansible文件夹的路径,如上所示。您也可以在此文件夹中创建hosts文件。要在本地试用,你可以把

localhost              ansible_connection=local

在hosts文件中并使用

进行试用
ansible -m ping all

答案 5 :(得分:0)

在Mac上,我使用sudo find / -type d -name "ansible" 2> /dev/null进行查找, 但是我没有包装盒中的.../ansible/hosts文件夹,可能是因为如上所述,我使用brew进行了安装,所以我在路径/etc/ansible/hosts上创建了