Packer + Ansible,如何指定清单文件

5
当我使用Vagrant时,可以在Vagrantfile中指定清单文件。
例如:
config.vm.provision "ansible" do |ansible|
    ansible.playbook = "my_folder/playbook.yml"
    ansible.inventory_path = "my_folder/inventory_file"
end

当我使用packer时,如何配置inventory_file?

在packer的官方文档中,我没有看到任何相关信息:

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

因为我运行我的packer.json时,需要指定inventory文件,这是输出结果:

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,”的清单文件,但我不知道原因。
如何指定我的清单文件?
谢谢!

你能展示一下你的 packer.json 文件中 Ansible 的部分吗? - leucos
"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" # 这是一个本地 playbook } ]我正在将我的本地 ansible 文件夹复制到 /tmp/my_folder,然后运行 ansible,但我不能指定我的清单文件 :/ - fj123x
2个回答

5

我的猜测是,由于ansible与packer使用本地连接 (-c local),因此不需要提供清单文件。

你只需要确保在你的playbook中,-hosts行包含all127.0.0.1,就可以正常运行了。


4

如果playbook仅用于您的Packer构建,则设置hosts: all是可以的。

如果您要重复使用一个需要针对清单文件中指定的主机运行的playbook,例如:

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

[db_servers]
db.example.com

如果您想将本地主机添加到某些群组中,则可以将 inventory_groups 属性添加到您的 ansible-local 配置文件中。Packer 将把本地主机分配到这些群组中:

"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文档中Optional子部分,其中包括ansible-local provisioner配置参考


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接