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

Ste*_*enW 63 macos ansible ansible-inventory

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

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

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

leu*_*cos 71

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

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

现在你没有提到是否要使用vagrant中可用ansible provisionner,或者你想手动配置你的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
Run Code Online (Sandbox Code Playgroud)

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

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

ansible-playbook -i hosts provision.yml --ask-pass --sudo
Run Code Online (Sandbox Code Playgroud)

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

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

祝好运 !

  • 很棒的答案!我和流浪汉玩了两天,我一直回到这个答案和你发布的链接.谢谢你! (2认同)
  • 对于后来的读者:`hostfile`是**弃用**,使用`inventory`**而不是**. (2认同)

cou*_*ing 40

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

  • 谢谢.我不得不创建目录`/ usr/local/etc/ansible /`并在其中放置一个hosts文件,这与Linux不同. (4认同)

Dom*_*tro 7

我喜欢使用bash环境变量,因为我的基础项目与其他用户共享.您可以简单地export ANSIBLE_HOSTS=/pathTo/inventory/将其作为主机文件或具有多个文件的目录.

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


Jan*_*gen 6

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

我将 ansible.cfg 文件下载到

/Users/"yourUser"/.ansible
Run Code Online (Sandbox Code Playgroud)

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

inventory      = /Users/"yourUser"/.ansible 
Run Code Online (Sandbox Code Playgroud)

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

localhost              ansible_connection=local
Run Code Online (Sandbox Code Playgroud)

在主机文件中并尝试使用

ansible -m ping all
Run Code Online (Sandbox Code Playgroud)