include classpath("application.conf")

whisk {
  couchdb {
    protocol = "{{ db.protocol }}"
    host     = "{{ db.host }}"
    port     = "{{ db.port }}"
    username = "{{ db.credentials.admin.user }}"
    password = "{{ db.credentials.admin.pass }}"
    provider = "{{ db.provider }}"
    databases {
      WhiskAuth       = "{{ db.whisk.auth }}"
      WhiskEntity     = "{{ db.whisk.actions }}"
      WhiskActivation = "{{ db.whisk.activations }}"
    }
  }
  {% if db.artifact_store.backend == 'MongoDB' %}
  mongodb {
    uri         = "{{ db.mongodb.connect_string }}"
    database    = "{{ db.mongodb.database }}"
  }

  spi {
    ArtifactStoreProvider = org.apache.openwhisk.core.database.mongodb.MongoDBArtifactStoreProvider
  }
  {% endif %}
}
