role で使う変数の名前が衝突しないよう配慮すると、素朴に辞書を定義して名前空間を導入したいと考えると思う:
--- # roles/mackerel-agent/defaults/main.yml mackerel_agent: pid_file: '...' id: '...'
ところが Ansible の Variables は辞書の deep merge を行ってくれないので、デフォルト値の一部上書きができない:
--- # host_vars/app001.yml mackerel_agent: id: '...' # !!! mackerel_agent.pid_file が未定義になる !!!
なので辞書を用いて衝突を回避するのは諦めて、気をつけるしかなさそう:
--- # roles/mackerel-agent/defaults/main.yml mackerel_agent_pid_file: '...' mackerel_agent_id: '...'