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