在packer及其ansible provisioner中处理主机有界变量需求的正确方法是什么?
Packer使用ansible provisioner,但对于CentOS8/RHEL8,它必须将CentOS8主机上的ansible_python_interpreter
设置为平台python。然而,我的剧本有本地和远程步骤,所以我只想为该主机设置那个变量。通常,我不会在我的供应商中使用库存。
"extra_arguments":
[
"-v",
"-e", "ansible_python_interpreter=/usr/libexec/platform-python"
]
我认为我的选择是
- 了解如何通过extra_arguments传递宿主变量
- 通过早期的provisioner设置库存,并在其中设置变量,以便稍后使用
请告诉我你发现了什么是好的解决方案
在这种情况下,包装商ansible provisioner inventory_directory将是一个关键的助手。
- 为打包机ansible provisioner设置inventory_directory选项,以定义ansible在其中创建将目标主机定义为
default
的库存文件的ansible库存目录的位置 - 为
default
主机填充主机变量文件,其中包含Centos8/RHEL8首选python解释器所需的变量
包装机预紧器
"provisioners": [
{
"type": "ansible",
"playbook_file": "../../../playbooks/linux-agent-provision.yml",
"inventory_directory": "./inventory",
"extra_arguments":
[
"-v",
...
]
},
...
/库存目录
inventory/host_vars
inventory/host_vars/default.yml
inventory/host_vars/default.yml
ansible_python_interpreter: /usr/libexec/platform-python