diff --git a/README.rst b/README.rst
index 3990213..bc1c626 100644
--- a/README.rst
+++ b/README.rst
@@ -22,7 +22,6 @@
               https_proxy: "url"
               ftp_proxy: "url"
               rsync_proxy: "url"
-              no_proxy: ['val1', 'val2']
               force: False
               lock_target: True
               extra_flags: [ '--verbose', '--progress', '--nosource', '--no-check-gpg', '--rsync-extra=none' ]
@@ -58,3 +57,6 @@
 directories which are using current cache. By removing this file you will flush
 cache and lead to update all repos during next state run.
 
+Set of `X_proxy` parameters could be set to empty line to overwrite proxy
+settings defined in environment variables. This serves like NO_PROXY setting
+which is not supported by debmirror.
diff --git a/_states/debmirror.py b/_states/debmirror.py
index 6001df1..832d749 100644
--- a/_states/debmirror.py
+++ b/_states/debmirror.py
@@ -99,12 +99,9 @@
 def _get_env(tgt):
     env = {}
     for k in ['http_proxy', 'https_proxy', 'ftp_proxy', 'rsync_proxy']:
-        if tgt.get(k, False):
+        if tgt.get(k, False) or tgt.get(k, False) == '':
             env[k] = tgt[k]
             env[k.upper()] = env[k]
-    if tgt.get('no_proxy', False):
-        env['no_proxy'] = ','.join(str(x) for x in tgt['no_proxy'])
-        env['no_proxy'.upper()] = env['no_proxy']
     return env
 
 
diff --git a/debmirror/schemas/client.yaml b/debmirror/schemas/client.yaml
index 65a7914..2dc5760 100644
--- a/debmirror/schemas/client.yaml
+++ b/debmirror/schemas/client.yaml
@@ -57,12 +57,6 @@
         type: string
         description: -|
           Specify proxy parameter.
-      no_proxy:
-        type: array
-        items:
-          type: string
-        description: -|
-          Specify list of host-exludes for proxy.
       extra_flags:
         type: array
         items:
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index ad30dd9..cf8cc1f 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -1,22 +1,18 @@
 #!/usr/bin/env bash
-
 ###
+# Script source: https://gerrit.mcp.mirantis.com/#/admin/projects/salt-formulas/cookiecutter-salt-formula
 # Script requirments:
 #apt-get install -y python-yaml virtualenv git
-
-__ScriptVersion="2018.08.16"
+__ScriptVersion="2019.01.07"
 __ScriptName="run_tests.sh"
 __ScriptFullName="$0"
 __ScriptArgs="$*"
-
 set -e
 [ -n "$DEBUG" ] && set -x
-
 CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 METADATA=${CURDIR}/../metadata.yml
 FORMULA_NAME=$(cat $METADATA | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']")
 FORMULA_META_DIR=${CURDIR}/../${FORMULA_NAME}/meta
-
 ## Overrideable parameters
 PILLARDIR=${PILLARDIR:-${CURDIR}/pillar}
 BUILDDIR=${BUILDDIR:-${CURDIR}/build}
@@ -24,30 +20,23 @@
 MOCK_BIN_DIR=${MOCK_BIN_DIR:-${CURDIR}/mock_bin}
 DEPSDIR=${BUILDDIR}/deps
 SCHEMARDIR=${SCHEMARDIR:-"${CURDIR}/../${FORMULA_NAME}/schemas/"}
-
 SALT_FILE_DIR=${SALT_FILE_DIR:-${BUILDDIR}/file_root}
 SALT_PILLAR_DIR=${SALT_PILLAR_DIR:-${BUILDDIR}/pillar_root}
 SALT_CONFIG_DIR=${SALT_CONFIG_DIR:-${BUILDDIR}/salt}
 SALT_CACHE_DIR=${SALT_CACHE_DIR:-${SALT_CONFIG_DIR}/cache}
 SALT_CACHE_EXTMODS_DIR=${SALT_CACHE_EXTMODS_DIR:-${SALT_CONFIG_DIR}/cache_master_extmods}
-
 SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR} --log-file=/dev/null"
-
 IGNORE_MODELVALIDATE_MASK=${IGNORE_MODELVALIDATE_MASK:-"novalidate"}
-
 if [ "x${SALT_VERSION}" != "x" ]; then
     PIP_SALT_VERSION="==${SALT_VERSION}"
 fi
-
 ## Functions
 log_info() {
     echo -e "[INFO] $*"
 }
-
 log_err() {
     echo -e "[ERROR] $*" >&2
 }
-
 setup_virtualenv() {
     log_info "Setting up Python virtualenv"
     dependency_check virtualenv
@@ -58,7 +47,6 @@
        python -m pip install -r ${CURDIR}/test-requirements.txt
     fi
 }
-
 setup_mock_bin() {
     # If some state requires a binary, a lightweight replacement for
     # such binary can be put into MOCK_BIN_DIR for test purposes
@@ -67,7 +55,6 @@
         export PATH
     fi
 }
-
 setup_pillar() {
     [ ! -d ${SALT_PILLAR_DIR} ] && mkdir -p ${SALT_PILLAR_DIR}
     echo "base:" > ${SALT_PILLAR_DIR}/top.sls
@@ -76,63 +63,64 @@
         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() {
     [ ! -d ${SALT_FILE_DIR} ] && mkdir -p ${SALT_FILE_DIR}
     [ ! -d ${SALT_CONFIG_DIR} ] && mkdir -p ${SALT_CONFIG_DIR}
     [ ! -d ${SALT_CACHE_DIR} ] && mkdir -p ${SALT_CACHE_DIR}
     [ ! -d ${SALT_CACHE_EXTMODS_DIR} ] && mkdir -p ${SALT_CACHE_EXTMODS_DIR}
-
     echo "base:" > ${SALT_FILE_DIR}/top.sls
     for pillar in ${PILLARDIR}/*.sls; do
         grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
         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
 cachedir: ${SALT_CACHE_DIR}
 extension_modules:  ${SALT_CACHE_EXTMODS_DIR}
 verify_env: False
 minion_id_caching: False
-
 file_roots:
   base:
   - ${SALT_FILE_DIR}
   - ${CURDIR}/..
-
 pillar_roots:
   base:
   - ${SALT_PILLAR_DIR}
   - ${PILLARDIR}
 EOF
 }
-
 fetch_dependency() {
     # example: fetch_dependency "linux:https://github.com/salt-formulas/salt-formula-linux"
     dep_name="$(echo $1|cut -d : -f 1)"
     dep_source="$(echo $1|cut -d : -f 2-)"
     dep_root="${DEPSDIR}/$(basename $dep_source .git)"
     dep_metadata="${dep_root}/metadata.yml"
-
     dependency_check git
     [ -d $dep_root ] && { log_info "Dependency $dep_name already fetched"; return 0; }
-
     log_info "Fetching dependency $dep_name"
     [ ! -d ${DEPSDIR} ] && mkdir -p ${DEPSDIR}
     git clone $dep_source ${DEPSDIR}/$(basename $dep_source .git)
     ln -s ${dep_root}/${dep_name} ${SALT_FILE_DIR}/${dep_name}
-
     METADATA="${dep_metadata}" install_dependencies
 }
-
 link_modules(){
     # Link modules *.py files to temporary salt-root
     local SALT_ROOT=${1:-$SALT_FILE_DIR}
     local SALT_ENV=${2:-$DEPSDIR}
-
     mkdir -p "${SALT_ROOT}/_modules/"
     # from git, development versions
     find ${SALT_ENV} -maxdepth 3 -mindepth 3 -path '*_modules*' -iname "*.py" -type f -print0 | while read -d $'\0' file; do
@@ -140,7 +128,6 @@
     done
     salt_run saltutil.sync_all
 }
-
 install_dependencies() {
     grep -E "^dependencies:" ${METADATA} >/dev/null || return 0
     (python - | while read dep; do fetch_dependency "$dep"; done) << EOF
@@ -149,24 +136,20 @@
     print '%s:%s' % (dep["name"], dep["source"])
 EOF
 }
-
 clean() {
     log_info "Cleaning up ${BUILDDIR}"
     [ -d ${BUILDDIR} ] && rm -rf ${BUILDDIR} || exit 0
 }
-
 salt_run() {
     [ -e ${VENV_DIR}/bin/activate ] && source ${VENV_DIR}/bin/activate
     python $(which salt-call) ${SALT_OPTS} $*
 }
-
 prepare() {
     if [[ -f ${BUILDDIR}/.prepare_done ]]; then
       log_info "${BUILDDIR}/.prepare_done exist, not rebuilding BUILDDIR"
       return
     fi
     [[ -d ${BUILDDIR} ]] && mkdir -p ${BUILDDIR}
-
     [[ ! -f "${VENV_DIR}/bin/activate" ]] && setup_virtualenv
     setup_mock_bin
     setup_pillar
@@ -175,27 +158,22 @@
     link_modules
     touch ${BUILDDIR}/.prepare_done
 }
-
 lint_releasenotes() {
     [[ ! -f "${VENV_DIR}/bin/activate" ]] && setup_virtualenv
     source ${VENV_DIR}/bin/activate
     reno lint ${CURDIR}/../
 }
-
 lint() {
 #    lint_releasenotes
     log_err "TODO: lint_releasenotes"
 }
-
 run() {
     for pillar in ${PILLARDIR}/*.sls; do
         grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
         state_name=$(basename ${pillar%.sls})
         salt_run grains.set 'noservices' False force=True
-
         echo "Checking state ${FORMULA_NAME}.${state_name} ..."
         salt_run --id=${state_name} state.show_sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1)
-
         # Check that all files in 'meta' folder can be rendered using any valid pillar
         for meta in `find ${FORMULA_META_DIR} -type f`; do
             meta_name=$(basename ${meta})
@@ -206,14 +184,12 @@
         done
     done
 }
-
 real_run() {
     for pillar in ${PILLARDIR}/*.sls; do
         state_name=$(basename ${pillar%.sls})
         salt_run --id=${state_name} state.sls ${FORMULA_NAME} || { log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1; }
     done
 }
-
 run_model_validate(){
   # Run modelschema.model_validate validation.
   # TEST iterateble, run for `each formula ROLE against each ROLE_PILLARNAME`
@@ -225,7 +201,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}")
@@ -236,23 +212,26 @@
         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
 }
-
 dependency_check() {
   local DEPENDENCY_COMMANDS=$*
-
   for DEPENDENCY_COMMAND in $DEPENDENCY_COMMANDS; do
     which $DEPENDENCY_COMMAND > /dev/null || ( log_err "Command \"$DEPENDENCY_COMMAND\" can not be found in default path."; exit 1; )
   done
 }
-
 _atexit() {
     RETVAL=$?
     trap true INT TERM EXIT
-
     if [ $RETVAL -ne 0 ]; then
         log_err "Execution failed"
     else
@@ -260,14 +239,10 @@
     fi
     return $RETVAL
 }
-
 ## Main
-
 log_info "Running version: ${__ScriptVersion}"
 log_info "Command line: '${__ScriptFullName} ${__ScriptArgs}'"
-
 trap _atexit INT TERM EXIT
-
 case $1 in
     clean)
         clean
diff --git a/tests/test-requirements.txt b/tests/test-requirements.txt
index 7188b2b..bc7dc7f 100644
--- a/tests/test-requirements.txt
+++ b/tests/test-requirements.txt
@@ -1,3 +1,4 @@
 jsonschema
 reno
 setuptools<45.0.0
+msgpack<1.0.0
