我正在尝试添加一个自定义 HBA 条目以允许主机连接到在 Vagrant 框上运行的 PostgreSQL 实例:
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "provisioning/playbook.yml"
ansible.galaxy_role_file = "provisioning/requirements.yml"
ansible.host_vars = {
"default" => {
"postgresql_listen_addresses" => "*",
"postgresql_pg_hba_custom" => [{
"type" => "host",
"database" => "vagrant",
"user" => "vagrant",
"address" => "samenet",
"method" => "password"
}],
"database_name" => "vagrant",
"database_username" => "vagrant",
"database_password" => "password",
"node_environment" => "development"
}
}
end
Run Code Online (Sandbox Code Playgroud)
我收到错误:
AnsibleUndefinedVariable: 'unicode object' 没有属性 'type'
如何在 Vagrantfile 中为宿主变量传递嵌套(复杂)配置值?
检查主机变量如何在自动生成的清单文件 /tmp/vagrant-ansible/inventory/vagrant_ansible_local_inventory 中的主机条目的单行中编码:
# 由 Vagrant 生成
默认 ... postgresql_pg_hba_custom=[{"type"=>"host", "database"=>"vagrant", "user"=>"vagrant", "address"=>"samenet", "method"=>"密码"}] database_name=vagrant database_username=vagrant database_password=密码 node_environment=development
传递给 postgresql_pg_hba_custom 的值的格式无效。
关于变量的Ansible 文档指出:
从 Ansible 1.2 开始,您还可以将额外的变量作为引用的 JSON 传递,如下所示:
--extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'
因此,您应该将复杂值作为包裹在单引号中的 JSON 传递。您可以使用 Ruby 的JSON 模块和字符串插值,而不是手动制作值:
config.vm.provision "ansible_local" do |ansible|
require 'json'
postgresql_pg_hba_custom = [{
"type" => "host",
"database" => "vagrant",
"user" => "vagrant",
"address" => "samenet",
"method" => "password"
}]
ansible.playbook = "provisioning/playbook.yml"
ansible.galaxy_role_file = "provisioning/requirements.yml"
ansible.host_vars = {
"default" => {
"postgresql_listen_addresses" => "*",
"postgresql_pg_hba_custom" => "'#{postgresql_pg_hba_custom.to_json}'",
"database_name" => "vagrant",
"database_username" => "vagrant",
"database_password" => "password",
"node_environment" => "development"
}
}
end
Run Code Online (Sandbox Code Playgroud)
生成的清单文件现在将是:
# 由 Vagrant 生成
默认 ... postgresql_pg_hba_custom='[{"type":"host","database":"vagrant","user":"vagrant","address":"samenet","method":"password"}] ' database_name=vagrant database_username=vagrant database_password=密码 node_environment=development
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |