5

当我使用 vagrant 时,我可以在 Vagrantfile 中指定库存文件。

例子:

config.vm.provision "ansible" do |ansible|
    ansible.playbook = "my_folder/playbook.yml"
    ansible.inventory_path = "my_folder/inventory_file"
end

使用打包程序时如何配置inventory_file?

我在打包机的官方文档中看不到任何相关信息:

http://www.packer.io/docs/provisioners/ansible-local.html

我需要指定库存文件,因为当我运行我的 packer.json 时,这是输出:

digitalocean: Executing Ansible: ansible-playbook /tmp/my_folder/playbook.yml -c local -i "127.0.0.1,"
digitalocean:
digitalocean: PLAY [foo] ******************************************************************
digitalocean: skipping: no hosts matched

Packer 似乎使用了一个名为“127.0.0.1”的库存文件,我不知道为什么。

如何指定我的库存文件?

谢谢!

4

2 回答 2

5

好吧,我的猜测是,由于带有 packer 的 ansible 使用本地连接(-c local),因此不需要提供库存文件。

您只需要确保在您的剧本中,您的-hosts行包含allor127.0.0.1并且它应该运行正常。

于 2014-02-23T09:51:47.793 回答
4

hosts: all如果 playbook 专门用于您的 Packer 构建,则设置很好。

如果您正在重复使用还需要针对清单文件中指定的主机运行的剧本,例如:

[web_servers]
web1.example.com
web2.example.com

[db_servers]
db.example.com

...然后您可以将inventory_groups属性添加到您的ansible-local配置器,Packer 会将 localhost 分配给这些组:

"provisioners": [ 
  { "type": "file", "source": "my_folder", "destination": "/tmp/" }, 
  { "type": "shell", "script": "provisioner.sh" }, 
  { 
    "type": "ansible-local", 
    "staging_directory": "/tmp/my_folder",
    "playbook_file": "my_folder/playbook.yml",
    "inventory_groups": "web_servers"
  }
]

有关更多详细信息,请参阅 Packer 文档的可选子部分以获取ansible-local provisioner 配置参考

于 2017-02-22T21:46:57.197 回答