/ /ネストされたハッシュの配列をVagrantのansible_localプロビジョナーのansible.host_varsに渡すことはできません-vagrant、ansible

Vagrantのansible_localのプロビジョナリで、ネストされたハッシュ配列をanonymous.host_varsに渡すことはできません。

ホストマシンがVagrantボックスで実行されているPostgreSQLインスタンスに接続できるようにカスタムHBAエントリを追加しようとしています。

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

私はエラーを受け取りました:

AnsibleUndefinedVariable:「unicodeオブジェクト」には属性「type」がありません

ホスト変数のネストされた(複雑な)構成値を渡すにはどうすればよいですか? 私のVagrantfileのすぐ内側

回答:

回答№1は2

自動生成されたインベントリファイル/ tmp / vagrant-ansible / Inventory / vagrant_ansible_local_inventoryのホストエントリについて、ホスト変数が1行でどのようにエンコードされているかを確認します。

#Vagrantによって生成  デフォルト ... 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

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

生成されたインベントリファイルは次のようになります。

#Vagrantによって生成  デフォルト ... 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