{%- from "ceph/map.jinja" import common with context -%}

{%- if common.get("manage_keyring", False) -%}

[client.{{ name }}]
    key = {{ keyring.key }}
    {%- if keyring.caps is defined %}
      {%- for cap_name, cap in  keyring.caps.iteritems() %}
    caps {{ cap_name }} = "{{ cap }}"
      {%- endfor %}
    {%- endif %}

{%- else %}

  {%- for name, keyring in node_grains.ceph.get("ceph_keyring", {}).iteritems() %}

    {%- if name == 'admin' %}

[client.{{ name }}]
    key = {{ keyring.key }}
    {%- if keyring.caps is defined %}
      {%- for cap_name, cap in  keyring.get("caps", {}).iteritems() %}
    caps {{ cap_name }} = "{{ cap }}"
      {%- endfor %}
    {%- endif %}

    {%- endif %}

  {%- endfor %}

{%- endif %}
