Schemas validation procedure was updated.

  * This change provides processing versioned schemas and test pillars.
  * readme was updated.

Change-Id: I609d1f83b2073929b6e169759fb4c9e315cc9942
Related-PROD: PROD-26201
diff --git a/README.rst b/README.rst
index 4942758..b85124c 100644
--- a/README.rst
+++ b/README.rst
@@ -14,6 +14,72 @@
 
     cookiecutter salt-formula
 
+Procedure of Data model and Schemas validation.
+===============================
+
+run_tests.sh script is able to validate data model by schemas and test pillars.
+It supports versioned and unversioned schemas and pillars. Schemas and pillars must contains yaml format.
+
+Unversioned items must be avaible in:
+
+.. code-block:: text
+
+    {FORMULA_NAME}/{FORMULA_NAME}/schemas/
+    {FORMULA_NAME}/tests/pillar/
+
+Versioned items must be avaible in:
+
+.. code-block:: text
+
+    {FORMULA_NAME}/{FORMULA_NAME}/schemas/{version}/
+    {FORMULA_NAME}/tests/pillar/{version}/
+
+You can run run_tests.sh  by following command:
+
+.. code-block:: shell
+
+    # cd <formula repository>
+    ./tests/run_tests.sh
+
+You can run run_tests.sh which inlude schema validation if schemas present by following command:
+
+.. code-block:: shell
+
+    # cd <formula repository>
+    ./tests/run_tests.sh model-validate
+
+Example schemas:
+
+.. code-block:: yaml
+
+    %YAML 1.1
+    ---
+    "$schema": "http://json-schema.org/draft-06/schema#"
+    title: {{cookiecutter.service_name}} daemon role
+    description: |
+      {{cookiecutter.service_name|capitalize}} daemon, server role
+    type: object
+    additionalProperties: false
+
+    required:
+      - enabled
+
+    properties:
+      enabled:
+        description: |
+          Enables {{cookiecutter.service_name}} daemon service
+        type: boolean
+
+Example pillar:
+
+.. code-block:: yaml
+    {{cookiecutter.service_name}}:
+      {{cookiecutter.role_name}}:
+        enabled: true
+
+You can read more about it here:
+    http://json-schema.org/implementations.html
+    http://github.com/Julian/jsonschema
 
 Init Test Kitchen configuration
 ===============================
diff --git "a/\173\173cookiecutter.service_name\175\175/tests/run_tests.sh" "b/\173\173cookiecutter.service_name\175\175/tests/run_tests.sh"
index 461fd8b..4665d34 100755
--- "a/\173\173cookiecutter.service_name\175\175/tests/run_tests.sh"
+++ "b/\173\173cookiecutter.service_name\175\175/tests/run_tests.sh"
@@ -5,7 +5,7 @@
 # Script requirments:
 #apt-get install -y python-yaml virtualenv git
 
-__ScriptVersion="2018.11.21"
+__ScriptVersion="2019.01.07"
 __ScriptName="run_tests.sh"
 __ScriptFullName="$0"
 __ScriptArgs="$*"
@@ -77,6 +77,12 @@
         state_name=$(basename ${pillar%.sls})
         echo -e "  ${state_name}:\n    - ${state_name}" >> ${SALT_PILLAR_DIR}/top.sls
     done
+    for pillar in $(find $PILLARDIR  -mindepth 2 -type f -iname *.sls); do
+        state_name=$(basename "${pillar%*.sls}")
+        os_release=$(echo $pillar | rev | cut -d'/' -f2 | rev)
+        grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
+        echo -e "  ${os_release}_${state_name}:\n    - ${os_release}.${state_name}" >> ${SALT_PILLAR_DIR}/top.sls
+    done
 }
 
 setup_salt() {
@@ -91,6 +97,12 @@
         state_name=$(basename ${pillar%.sls})
         echo -e "  ${state_name}:\n    - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls
     done
+    for pillar in $(find $PILLARDIR  -mindepth 2 -type f -iname *.sls); do
+        state_name=$(basename "${pillar%*.sls}")
+        os_release=$(echo $pillar | rev | cut -d'/' -f2 | rev)
+        grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
+        echo -e "  ${os_release}_${state_name}:\n    - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls
+    done
 
     cat << EOF > ${SALT_CONFIG_DIR}/minion
 file_client: local
@@ -226,7 +238,7 @@
     fetch_dependency "salt:https://github.com/salt-formulas/salt-formula-salt"
     link_modules
     salt_run saltutil.clear_cache; salt_run saltutil.refresh_pillar; salt_run saltutil.sync_all;
-    for role in ${SCHEMARDIR}/*.yaml; do
+    for role in $(find $SCHEMARDIR/* -maxdepth 0 -type f -iname *.yaml); do
       role_name=$(basename "${role%*.yaml}")
       for pillar in $(ls pillar/${role_name}*.sls | grep -v ${IGNORE_MODELVALIDATE_MASK} ); do
         pillar_name=$(basename "${pillar%*.sls}")
@@ -237,6 +249,13 @@
         salt_run -m ${DEPSDIR}/salt-formula-salt --id=${pillar_name} modelschema.model_validate ${FORMULA_NAME} ${role_name} || { log_err "Execution of model_validate ${_message} failed"; exit 1 ; }
       done
     done
+    for schema in $(find $SCHEMARDIR -mindepth 2 -type f -iname *.yaml); do
+        role_name=$(basename "${schema%*.yaml}")
+        os_release=$(echo $schema | rev | cut -d'/' -f2 | rev)
+        local _message="FORMULA:${FORMULA_NAME} ROLE:${role_name} against PILLAR:${role_name}"
+        log_info "model_validate ${_message}"
+        salt_run -m ${DEPSDIR}/salt-formula-salt --id=${os_release}_${role_name} modelschema.model_validate ${FORMULA_NAME} ${role_name} ${os_release} || { log_err "Execution of model_validate ${_message} failed"; exit 1 ; }
+    done
   else
     log_info "${SCHEMARDIR} not found!";
   fi