Extend template definition options

This change adds:
  - support for template definition from the metadata
  - forcing index creation from the defined template
diff --git a/README.rst b/README.rst
index 8c4bddc..eb8a67b 100644
--- a/README.rst
+++ b/README.rst
@@ -145,7 +145,7 @@
           host: elasticsearch.host
           port: 9200
 
-Client where you download an index template that is stored in the direcotry
+Client where you download an index template that is stored in the directory
 *files/*:
 
 .. code-block:: yaml
@@ -161,6 +161,37 @@
             enabled: true
             template: elasticsearch/files/my_index_template.json
 
+Client where you download an index template from the metadata definition and force index creation:
+
+.. code-block:: yaml
+
+    elasticsearch:
+      client:
+        enabled: true
+        server:
+          host: elasticsearch.host
+          port: 9200
+        index:
+          my_index:
+            enabled: true
+            force_operation: true
+            definition:
+              template: notifications
+              settings:
+                number_of_shards: 5
+                number_of_replicas: 1
+              mappings:
+                notification:
+                  properties:
+                    applicationId:
+                      type: long
+                    content:
+                      type: text
+                      fields:
+                        keyword:
+                          type: keyword
+                          ignore_above: 256
+
 Read more
 =========
 
diff --git a/elasticsearch/client/init.sls b/elasticsearch/client/init.sls
index 9621bbb..c950026 100644
--- a/elasticsearch/client/init.sls
+++ b/elasticsearch/client/init.sls
@@ -6,17 +6,44 @@
 
 {%- for index_name, index in client.get('index', {}).iteritems() %}
 elasticsearch_index_{{ index_name }}:
+
   {%- if index.get('enabled', False) %}
-  elasticsearch_index_template.present:
+  {% set operation = 'create' %}
+
+  {%- if index.definition is defined %}
+  {% set definition = index.definition %}
+  {%- endif %}
+
+  {%- if index.template is defined %}
   {%- import_json index.template as definition %}
+  {%- endif %}
+
+  {%- if definition is defined %}
+  elasticsearch_index_template.present:
   - name: {{ index_name }}
   - definition: '{{ definition|json }}'
   {%- else %}
+  cmd.run:
+  - name: echo "No definition specified for index {{ index_name }}"
+  {%- endif %}
+
+  {%- else %}
+
+  {% set operation = 'delete' %}
   elasticsearch_index_template.absent:
   - name: {{ index_name }}
   {%- endif %}
+
   - require:
     - pkg: elasticsearch_client_packages
+
+{%- if index.get('force_operation', False) %}
+elasticsearch_index_{{ index_name }}_{{ operation }}:
+  module.run:
+    - name: elasticsearch.index_{{ operation }}
+    - index: {{ index_name }}
+{%- endif %}
+
 {%- endfor %}
 
-{%- endif %}
+{%- endif %}
\ No newline at end of file