71

我正在尝试开始使用 Ansible 来配置我的 Vagrantbox,但我不知道如何处理主机文件。

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

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

4

6 回答 6

78

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

  • 使用-i命令行开关并传递您的库存文件路径
  • 添加配置文件inventory = path_to_hostfile[defaults]部分~/.ansible.cfg
  • export ANSIBLE_HOSTS=path_to_hostfile按照 DomaNitro 在他的回答中的建议使用

现在您没有提及是否要使用vagrant 中可用的 ansible 配置器,或者您是否想手动配置您的 vagrant 主机。

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

创建一个目录(例如 test),并在里面创建一个 Vagrant 文件:

流浪文件

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(or vagrant provision) 时,Vangrant 的 ansible provionner 将在与 Vagrantfile 相同的目录中查找文件名hosts,并尝试应用provision.ymlplaybook。

您也可以手动运行它,而无需求助于 Vagrant 的 ansible provisionner :

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

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

{sameless_plug} 你可以在这里找到一个更广泛的混合 vagrant 和 ansible 的例子{ /sameless_plug}

祝你好运 !

于 2014-02-22T20:16:50.480 回答
45

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

于 2014-08-13T22:16:30.940 回答
7

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

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

于 2014-02-26T15:36:28.300 回答
3

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

# Generated by Vagrant

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

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

于 2014-02-23T02:20:55.880 回答
3

这是在 Mac 上安装 Ansible 后要做什么的描述,它对我有用:ansible-tips-and-tricks.readthedocs.io

我将 ansible.cfg 文件下载到

/Users/"yourUser"/.ansible

然后您可以通过取消注释来编辑 ansible.cfg 文件

inventory      = /Users/"yourUser"/.ansible 

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

localhost              ansible_connection=local

在主机文件中并尝试使用

ansible -m ping all
于 2018-01-05T09:21:50.187 回答
0

在Mac上我曾经sudo find / -type d -name "ansible" 2> /dev/null找到它,但我没有.../ansible/hosts从盒子里拿出文件夹,可能是因为我brew按照上面阅读的方式安装,所以我在路径创建/etc/ansible/hosts

于 2020-07-31T18:25:59.270 回答