diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f3d74a9a581e18a14a85530b6451f4afea0765c9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.pyc
+*~
diff --git a/README.rst b/README.rst
index 4d42fe0c55632f3747e454005f70e93d4e3435c4..591a4e0b16cc8deec86ad49cfc28896ec8ccb93e 100644
--- a/README.rst
+++ b/README.rst
@@ -45,6 +45,11 @@ debconf.
     cryptographically insecure, future formula versions should use the
     newly available ``random.get_str`` method.
 
+``mysql.disabled``
+------------------
+
+Ensure that the MySQL service is not running.
+
 ``mysql.database``
 ------------------
 
@@ -91,26 +96,3 @@ Install the MySQL development libraries and header files.
     Note that this state is not installed by the mysql meta-state unless you set
     your pillar data accordingly. 
 
-Updating the supported parameters
-=================================
-
-The ``supported_params.yaml`` file contains the full listing of options that
-are acceptable in the MySQL options file.  On occassion, especially on new
-releases of MySQL, this file may need to be updated.  To update, run the
-supplied script (requires Python 3.x)::
-
-    ./scripts/parse_supported_params.py -o ./mysql/supported_params.yaml
-
-This script will scrape the options from the official MySQL documentation
-online, and thus requires web access.  Scraping is inherently brittle, though
-this script has been defensively coded, where possible.
-
-Once the ``supported_params.yaml`` file has been updated, commit the result to
-the repository.
-
-Support for new applications
-----------------------------
-
-To add support for configuration of other MySQL applications, add the URL and
-section identifier into the relevant section of the script.  Consult the
-comments in the code to determine where your section should be added.
diff --git a/mysql/client.sls b/mysql/client.sls
index 33628e691a96a56b6cb4f7027896a21f225aff76..ed2791f44980e14421559374d5a463eac0e2528e 100644
--- a/mysql/client.sls
+++ b/mysql/client.sls
@@ -1,7 +1,6 @@
 {% from "mysql/defaults.yaml" import rawmap with context %}
-{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
+{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:lookup')) %}
 
 mysql:
-  pkg:
-    - installed
+  pkg.installed:
     - name: {{ mysql.client }}
diff --git a/mysql/database.sls b/mysql/database.sls
index ae0a4bccd75966b9759c4a7ec2154e94fb0dc26a..4f9d5021acd1be9810ead1edc517af1802f3df37 100644
--- a/mysql/database.sls
+++ b/mysql/database.sls
@@ -1,5 +1,5 @@
 {% from "mysql/defaults.yaml" import rawmap with context %}
-{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
+{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:lookup')) %}
 
 {% set mysql_root_pass = salt['pillar.get']('mysql:server:root_password', salt['grains.get']('server_id')) %}
 {% set db_states = [] %}
diff --git a/mysql/defaults.yaml b/mysql/defaults.yaml
index f21ea79210aaf4e676d40d09b51cb0700edd6ca0..c66b7320b0d138f7a3552c6868cf00b1b54a6c10 100644
--- a/mysql/defaults.yaml
+++ b/mysql/defaults.yaml
@@ -1,4 +1,7 @@
 # vim: sts=2 ts=2 sw=2 et ai
+#
+# SET ALL PARAMS IN CONFIG SECTION USING UNDERSCORE, NOT HYPHEN
+# so that it works correctly
 {% load_yaml as rawmap %}
 Ubuntu:
   server: mysql-server
@@ -18,20 +21,20 @@ Ubuntu:
         nice: 0
       mysqld:
         user: mysql
-        pid-file: /var/run/mysqld/mysqld.pid
+        pid_file: /var/run/mysqld/mysqld.pid
         socket: /var/run/mysqld/mysqld.sock
         port: 3306
         basedir: /usr
         datadir: /var/lib/mysql
         tmpdir: /tmp
-        lc-messages-dir:  /usr/share/mysql
-        skip-external-locking: noarg_present
-        bind-address: 127.0.0.1
+        lc_messages_dir:  /usr/share/mysql
+        skip_external_locking: noarg_present
+        bind_address: 127.0.0.1
         key_buffer_size: 16M
         max_allowed_packet: 16M
         thread_stack: 192K
         thread_cache_size: 8
-        myisam-recover: BACKUP
+        myisam_recover: BACKUP
         query_cache_limit: 1M
         query_cache_size: 16M
         log_error: /var/log/mysql/error.log 
@@ -39,10 +42,10 @@ Ubuntu:
         max_binlog_size: 100M          
       mysqldump:
         quick: noarg_present
-        quote-names: noarg_present
+        quote_names: noarg_present
         max_allowed_packet: 16M
       isamchk:
-        key_buffer: 16M
+        key_buffer_size: 16M
     append: |
       !includedir /etc/mysql/conf.d/
 Debian:
@@ -63,30 +66,30 @@ Debian:
         nice: 0
       mysqld:
         user: mysql
-        pid-file: /var/run/mysqld/mysqld.pid
+        pid_file: /var/run/mysqld/mysqld.pid
         socket: /var/run/mysqld/mysqld.sock
         port: 3306
         basedir: /usr
         datadir: /var/lib/mysql
         tmpdir: /tmp
-        lc-messages-dir:  /usr/share/mysql
-        skip-external-locking: noarg_present
-        bind-address: 127.0.0.1
+        lc_messages_dir:  /usr/share/mysql
+        skip_external_locking: noarg_present
+        bind_address: 127.0.0.1
         key_buffer_size: 16M
         max_allowed_packet: 16M
         thread_stack: 192K
         thread_cache_size: 8
-        myisam-recover: BACKUP
+        myisam_recover: BACKUP
         query_cache_limit: 1M
         query_cache_size: 16M
         expire_logs_days: 10
         max_binlog_size: 100M          
       mysqldump:
         quick: noarg_present
-        quote-names: noarg_present
+        quote_names: noarg_present
         max_allowed_packet: 16M
       isamchk:
-        key_buffer: 16M
+        key_buffer_size: 16M
     append: |
       !includedir /etc/mysql/conf.d/
 CentOS:
@@ -99,15 +102,15 @@ CentOS:
     file: /etc/my.cnf
     sections:
       mysqld_safe:
-        log-error: /var/log/mysqld.log
-        pid-file: /var/run/mysqld/mysqld.pid
+        log_error: /var/log/mysqld.log
+        pid_file: /var/run/mysqld/mysqld.pid
       mysqld:
         datadir: /var/lib/mysql
         socket: /var/lib/mysql/mysql.sock
         user: mysql
         port: 3306
-        bind-address: 127.0.0.1
-        symbolic-links: 0
+        bind_address: 127.0.0.1
+        symbolic_links: 0
 RedHat:
   server: mysql-server
   client: mysql
@@ -118,15 +121,33 @@ RedHat:
     file: /etc/my.cnf
     sections:
       mysqld_safe:
-        log-error: /var/log/mysqld.log
-        pid-file: /var/run/mysqld/mysqld.pid
+        log_error: /var/log/mysqld.log
+        pid_file: /var/run/mysqld/mysqld.pid
+      mysqld:
+        datadir: /var/lib/mysql
+        socket: /var/lib/mysql/mysql.sock
+        user: mysql
+        port: 3306
+        bind_address: 127.0.0.1
+        symbolic_links: 0
+Fedora:
+  server: mariadb-server
+  client: mariadb
+  service: mariadb
+  python: MySQL-python
+  config:
+    file: /etc/my.cnf.d/server.cnf
+    sections:
+      mysqld_safe:
+        log_error: /var/log/mysqld.log
+        pid_file: /var/run/mysqld/mysqld.pid
       mysqld:
         datadir: /var/lib/mysql
         socket: /var/lib/mysql/mysql.sock
         user: mysql
         port: 3306
-        bind-address: 127.0.0.1
-        symbolic-links: 0
+        bind_address: 127.0.0.1
+        symbolic_links: 0
 Amazon:
   server: mysql-server
   client: mysql
@@ -137,15 +158,15 @@ Amazon:
     file: /etc/my.cnf
     sections:
       mysqld_safe:
-        log-error: /var/log/mysqld.log
-        pid-file: /var/run/mysqld/mysqld.pid
+        log_error: /var/log/mysqld.log
+        pid_file: /var/run/mysqld/mysqld.pid
       mysqld:
         datadir: /var/lib/mysql
         socket: /var/lib/mysql/mysql.sock
         user: mysql
         port: 3306
-        bind-address: 127.0.0.1
-        symbolic-links: 0
+        bind_address: 127.0.0.1
+        symbolic_links: 0
 Gentoo:
   server: dev-db/mysql
   client: dev-db/mysql
@@ -159,43 +180,43 @@ Gentoo:
         port: 3306
         socket: /var/run/mysqld/mysqld.sock
       mysql:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       mysqladmin:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       mysqlcheck:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       mysqldump:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       mysqlimport:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       mysqlshow:
-        character-sets-dir: /usr/share/mysql/charsets
-        default-character-set: utf8
+        character_sets_dir: /usr/share/mysql/charsets
+        default_character_set: utf8
       myisamchk:
-        character-sets-dir: /usr/share/mysql/charsets
+        character_sets_dir: /usr/share/mysql/charsets
         key_buffer: 20M
         sort_buffer_size: 20M
         read_buffer: 2M
         write_buffer: 2M
       myisampack:
-        character-sets-dir: /usr/share/mysql/charsets
+        character_sets_dir: /usr/share/mysql/charsets
       mysqld_safe:
-        err-log: /var/log/mysql/mysql.err
+        err_log: /var/log/mysql/mysql.err
       mysqld:
-        character-set-server: utf8
+        character_set_server: utf8
         user: mysql
         port: 3306
         socket: /var/run/mysqld/mysqld.sock
-        pid-file: /var/run/mysqld/mysqld.pid
-        log-error: /var/log/mysql/mysqld.err
+        pid_file: /var/run/mysqld/mysqld.pid
+        log_error: /var/log/mysql/mysqld.err
         basedir: /usr
         datadir: /var/lib/mysql
-        skip-external-locking: noarg_present
+        skip_external_locking: noarg_present
         key_buffer_size: 16M
         max_allowed_packet: 1M
         table_open_cache: 64
@@ -205,9 +226,9 @@ Gentoo:
         read_rnd_buffer_size: 512K
         myisam_sort_buffer_size: 8M
         language: /usr/share/mysql/english
-        bind-address: 127.0.0.1
-        log-bin: noarg_present
-        server-id: 1
+        bind_address: 127.0.0.1
+        log_bin: noarg_present
+        server_id: 1
         tmpdir: /tmp/
         innodb_buffer_pool_size: 16M
         innodb_additional_mem_pool_size: 2M
@@ -227,7 +248,7 @@ Gentoo:
         read_buffer: 2M
         write_buffer: 2M
       mysqlhotcopy:
-        interactive-timeout: noarg_present
+        interactive_timeout: noarg_present
 FreeBSD:
   server: mysql56-server
   client: mysql56-client
diff --git a/mysql/disabled.sls b/mysql/disabled.sls
new file mode 100644
index 0000000000000000000000000000000000000000..ddcea6ff4787ef61026cdff97390ebd01eae21ab
--- /dev/null
+++ b/mysql/disabled.sls
@@ -0,0 +1,7 @@
+{% from "mysql/defaults.yaml" import rawmap with context %}
+{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
+
+mysql:
+  service.dead:
+      - name: {{ mysql.service }}
+      - enable: False
diff --git a/mysql/files/my.cnf b/mysql/files/my.cnf
index cfb1146d971c1cbbb007169e9d5b3f5d61319845..8e976412b9f3d6b924a754255e3a077668499161 100644
--- a/mysql/files/my.cnf
+++ b/mysql/files/my.cnf
@@ -1,30 +1,40 @@
 # DO NOT CHANGE THIS FILE!
 # This config is generated by SALTSTACK
 # and all change will be overrided on next salt call
-{% from "mysql/defaults.yaml" import rawmap with context %}
-{% from "mysql/supported_params.yaml" import supported_params with context %}
-{%- set datamap = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
-{%- for section_name, supparams in supported_params.items() %}
-[{{ section_name }}]
-	{%- for allowedparam in supparams|default([]) %}
-	{%- set indents = 40 - allowedparam|count %}
-	{%- set mparam = salt['pillar.get']('mysql:server:'+section_name+':'+allowedparam, false) %}
-	{%- if mparam %}
-		{%- if mparam == "noarg_present" %}
-{{ allowedparam }}
-		{%- else %}
-{{ allowedparam }}{{ '='|indent(indents, true) }} {{ mparam }} 
-		{%- endif %}
-	{%- else %}
-		{%- if datamap.config.sections[section_name] is defined %}
-		{%- if datamap.config.sections[section_name][allowedparam] is defined %}
-			{%- if datamap.config.sections[section_name][allowedparam] == "noarg_present" %}
-{{ allowedparam }}
-			{%- else %}
-{{ allowedparam }}{{ '='|indent(indents, true) }} {{ datamap.config.sections[section_name][allowedparam] }} 
-			{%- endif %}
-		{%- endif %}
-		{%- endif %}
-	{%- endif %}
-	{%- endfor %}
-{% endfor %}
+{#-
+===== FETCH DATA =====
+-#}
+{%- from "mysql/defaults.yaml" import rawmap with context -%}
+{%- from "mysql/supported_sections.yaml" import supported_sections with context -%}
+{%- set datamap = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) -%}
+{#-
+===== COMBINE DATA =====
+-#}
+{%- set goodParamList = datamap.config.sections -%}
+{%- for section_name in supported_sections -%}
+	{%- set sectdict = datamap.config.sections[section_name] | default({}) -%}
+	{%- for mparam, mvalue in salt['pillar.get']('mysql:server:'+section_name, {}).items() -%}
+		{%- set mparamUnderscore = mparam | replace('-','_') -%}
+		{%- do sectdict.update({mparamUnderscore:mvalue}) -%}
+	{%- endfor -%}
+	{%- do goodParamList.update({section_name:sectdict}) -%}
+{%- endfor -%}
+{#-
+===== PRINT DATA =====
+-#}
+{%- for sname,sdata in goodParamList.items() -%}
+{%- if sdata %}
+
+[{{ sname }}]
+{%- for mparam, mvalue in sdata.items()|default([])|sort -%}
+{%- set indents = 40 - mparam|count %}
+{% if mvalue == "noarg_present" -%}
+{{ mparam }}
+{%- else -%}
+{{ mparam }}{{ '='|indent(indents, true) }} {{ mvalue }} 
+{%- endif -%}
+{%- endfor -%}
+{%- endif -%}
+{%- endfor %}
+
+{{ datamap.config.append | default('') }}
diff --git a/mysql/files/usr-my.cnf b/mysql/files/usr-my.cnf
new file mode 100644
index 0000000000000000000000000000000000000000..2a18dd34196eb1c99996d15bd28ff82222fc7d5e
--- /dev/null
+++ b/mysql/files/usr-my.cnf
@@ -0,0 +1,7 @@
+# DO NOT CHANGE THIS FILE!
+# This config is generated by SALTSTACK
+# and all change will be overrided on next salt call
+#
+# this file was created by mysql-server package
+# and replaced with saltstack
+# to prevent default my.cnf parameters overriding
diff --git a/mysql/python.sls b/mysql/python.sls
index 38b18789c048eb2449ab47b0c659c00cee915fa3..9288fe3e268f84faf7d531e2b1e29645ae6d6de6 100644
--- a/mysql/python.sls
+++ b/mysql/python.sls
@@ -2,6 +2,5 @@
 {%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
 
 mysql_python:
-  pkg:
-    - installed
+  pkg.installed:
     - name: {{ mysql.python }}
diff --git a/mysql/server.sls b/mysql/server.sls
index 5b9ac2de4657a8129b3314748c2dddde02979d33..a89065e51f618a19874963c32d6649a8adfd035c 100644
--- a/mysql/server.sls
+++ b/mysql/server.sls
@@ -1,5 +1,5 @@
 {% from "mysql/defaults.yaml" import rawmap with context %}
-{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:server:lookup')) %}
+{%- set mysql = salt['grains.filter_by'](rawmap, grain='os', merge=salt['pillar.get']('mysql:lookup')) %}
 
 {% set os = salt['grains.get']('os', None) %}
 {% set os_family = salt['grains.get']('os_family', None) %}
@@ -56,7 +56,7 @@ mysql_delete_anonymous_user_{{ host }}:
 mysqld:
   pkg.installed:
     - name: {{ mysql.server }}
-{% if os_family == 'Debian' %}
+{% if os_family == 'Debian' and mysql_root_password %}
     - require:
       - debconf: mysql_debconf
 {% endif %}
@@ -78,3 +78,14 @@ mysql_config:
     - group: root
     - mode: 644
     {% endif %}
+
+# official oracle mysql repo
+# creates this file, that rewrites /etc/mysql/my.cnf setting
+# so, make it empty
+mysql_additional_config:
+  file.managed:
+    - name: /usr/my.cnf
+    - source: salt://mysql/files/usr-my.cnf
+    - create: False
+    - watch_in:
+      - service: mysqld
diff --git a/mysql/supported_params.yaml b/mysql/supported_params.yaml
deleted file mode 100644
index ff2496baf71afc5102efcad7e7515a313dda93d0..0000000000000000000000000000000000000000
--- a/mysql/supported_params.yaml
+++ /dev/null
@@ -1,980 +0,0 @@
-# vim
-{#- Do not edit this YAML file by hand. See README.rst for how to update -#}
-{% load_yaml as supported_params %}
-# From https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html
-{% for section in ['client', 'mysql'] %}
-{{ section  }}:
-  - help
-  - auto-rehash
-  - auto-vertical-output
-  - batch
-  - binary-mode
-  - bind-address
-  - character-sets-dir
-  - column-names
-  - column-type-info
-  - comments
-  - compress
-  - connect-expired-password
-  - database
-  - debug
-  - debug-check
-  - debug-info
-  - default-auth
-  - default-character-set
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - delimiter
-  - disable-named-commands
-  - enable-cleartext-plugin
-  - execute
-  - force
-  - histignore
-  - host
-  - html
-  - ignore-spaces
-  - init-command
-  - line-numbers
-  - local-infile
-  - login-path
-  - named-commands
-  - no-auto-rehash
-  - no-beep
-  - no-defaults
-  - one-database
-  - pager
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - print-defaults
-  - prompt
-  - protocol
-  - quick
-  - raw
-  - reconnect
-  - safe-updates
-  - secure-auth
-  - server-public-key-path
-  - shared-memory-base-name
-  - show-warnings
-  - sigint-ignore
-  - silent
-  - skip-column-names
-  - skip-line-numbers
-  - socket
-  - ssl
-  - syslog
-  - table
-  - tee
-  - unbuffered
-  - user
-  - verbose
-  - version
-  - vertical
-  - wait
-  - xml
-  - connect_timeout
-  - max_allowed_packet
-  - max_join_size
-  - net_buffer_length
-  - select_limit
-{% endfor %}
-# From https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
-mysqldump:
-  - bind-address
-  - compress
-  - default-auth
-  - host
-  - login-path
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - protocol
-  - secure-auth
-  - socket
-  - ssl
-  - user
-  - max_allowed_packet
-  - net_buffer_length
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - no-defaults
-  - print-defaults
-  - add-drop-database
-  - add-drop-table
-  - add-drop-trigger
-  - all-tablespaces
-  - no-create-db
-  - no-create-info
-  - no-tablespaces
-  - replace
-  - allow-keywords
-  - comments
-  - debug
-  - debug-check
-  - debug-info
-  - dump-date
-  - force
-  - log-error
-  - skip-comments
-  - verbose
-  - help
-  - version
-  - character-sets-dir
-  - default-character-set
-  - no-set-names
-  - set-charset
-  - apply-slave-statements
-  - delete-master-logs
-  - dump-slave
-  - include-master-host-port
-  - master-data
-  - set-gtid-purged
-  - compact
-  - compatible
-  - complete-insert
-  - create-options
-  - fields
-  - hex-blob
-  - lines-terminated-by
-  - quote-names
-  - result-file
-  - tab
-  - tz-utc
-  - xml
-  - all-databases
-  - databases
-  - events
-  - ignore-error
-  - ignore-table
-  - no-data
-  - routines
-  - tables
-  - triggers
-  - where
-  - disable-keys
-  - extended-insert
-  - insert-ignore
-  - opt
-  - quick
-  - skip-opt
-  - add-locks
-  - flush-logs
-  - flush-privileges
-  - lock-all-tables
-  - lock-tables
-  - no-autocommit
-  - order-by-primary
-  - shared-memory-base-name
-  - single-transaction
-# From https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html
-mysqld_safe:
-  - help
-  - basedir
-  - core-file-size
-  - datadir
-  - defaults-extra-file
-  - defaults-file
-  - ledir
-  - log-error
-  - malloc-lib
-  - mysqld
-  - mysqld-version
-  - nice
-  - no-defaults
-  - open-files-limit
-  - pid-file
-  - plugin-dir
-  - port
-  - skip-kill-mysqld
-  - socket
-  - syslog
-  - syslog-tag
-  - timezone
-  - user
-# From http://dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html
-mysqlhotcopy:
-  - help
-  - addtodest
-  - allowold
-  - checkpoint
-  - chroot
-  - debug
-  - dryrun
-  - flushlog
-  - host
-  - keepold
-  - method
-  - noindices
-  - password
-  - port
-  - old_server
-  - quiet
-  - record_log_pos
-  - regexp
-  - resetmaster
-  - resetslave
-  - socket
-  - suffix
-  - tmpdir
-  - user
-# From http://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html
-mysqladmin:
-  - help
-  - bind-address
-  - character-sets-dir
-  - compress
-  - count
-  - debug
-  - debug-check
-  - debug-info
-  - default-auth
-  - default-character-set
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - enable-cleartext-plugin
-  - force
-  - host
-  - login-path
-  - no-beep
-  - no-defaults
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - print-defaults
-  - protocol
-  - relative
-  - show-warnings
-  - secure-auth
-  - shared-memory-base-name
-  - silent
-  - sleep
-  - socket
-  - ssl
-  - user
-  - verbose
-  - version
-  - vertical
-  - wait
-  - connect_timeout
-  - shutdown_timeout
-# From http://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html
-mysqlcheck:
-  - help
-  - all-databases
-  - all-in-1
-  - analyze
-  - auto-repair
-  - bind-address
-  - character-sets-dir
-  - check
-  - check-only-changed
-  - check-upgrade
-  - compress
-  - databases
-  - debug
-  - debug-check
-  - debug-info
-  - default-character-set
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - extended
-  - default-auth
-  - fast
-  - fix-db-names
-  - fix-table-names
-  - force
-  - host
-  - login-path
-  - medium-check
-  - no-defaults
-  - optimize
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - print-defaults
-  - protocol
-  - quick
-  - repair
-  - secure-auth
-  - shared-memory-base-name
-  - silent
-  - skip-database
-  - socket
-  - ssl
-  - tables
-  - use-frm
-  - user
-  - verbose
-  - version
-  - write-binlog
-# From http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html
-mysqlimport:
-  - help
-  - bind-address
-  - character-sets-dir
-  - columns
-  - compress
-  - debug
-  - debug-check
-  - debug-info
-  - default-character-set
-  - default-auth
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - delete
-  - fields
-  - force
-  - host
-  - ignore
-  - ignore-lines
-  - lines-terminated-by
-  - local
-  - lock-tables
-  - login-path
-  - low-priority
-  - no-defaults
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - print-defaults
-  - protocol
-  - replace
-  - secure-auth
-  - shared-memory-base-name
-  - silent
-  - socket
-  - ssl
-  - user
-  - use-threads
-  - verbose
-  - version
-# From http://dev.mysql.com/doc/refman/5.7/en/mysqlshow.html
-mysqlshow:
-  - help
-  - bind-address
-  - character-sets-dir
-  - compress
-  - count
-  - debug
-  - debug-check
-  - debug-info
-  - default-character-set
-  - default-auth
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - host
-  - keys
-  - login-path
-  - no-defaults
-  - password
-  - pipe
-  - plugin-dir
-  - port
-  - print-defaults
-  - protocol
-  - secure-auth
-  - shared-memory-base-name
-  - show-table-type
-  - socket
-  - ssl
-  - status
-  - user
-  - verbose
-  - version
-# From http://dev.mysql.com/doc/refman/5.7/en/myisampack.html
-myisampack:
-  - help
-  - backup
-  - character-sets-dir
-  - debug
-  - force
-  - join
-  - silent
-  - test
-  - tmpdir
-  - verbose
-  - version
-  - wait
-# From https://dev.mysql.com/doc/refman/5.7/en/myisamchk.html
-{% for section in ['myisamchk', 'isamchk'] %}
-{{ section  }}:
-  - analyze
-  - backup
-  - block-search
-  - check
-  - check-only-changed
-  - correct-checksum
-  - data-file-length
-  - debug
-  - decode_bits
-  - defaults-extra-file
-  - defaults-file
-  - defaults-group-suffix
-  - description
-  - extend-check
-  - fast
-  - force
-  - force
-  - ft_max_word_len
-  - ft_min_word_len
-  - ft_stopword_file
-  - HELP
-  - help
-  - information
-  - key_buffer_size
-  - keys-used
-  - max-record-length
-  - medium-check
-  - myisam_block_size
-  - myisam_sort_buffer_size
-  - no-defaults
-  - parallel-recover
-  - print-defaults
-  - quick
-  - read_buffer_size
-  - read-only
-  - recover
-  - safe-recover
-  - set-auto-increment
-  - set-collation
-  - silent
-  - sort_buffer_size
-  - sort-index
-  - sort_key_blocks
-  - sort-records
-  - sort-recover
-  - stats_method
-  - tmpdir
-  - unpack
-  - update-state
-  - verbose
-  - version
-  - write_buffer_size
-{% endfor %}
-# From https://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html
-mysqld:
-  - abort-slave-event-count
-  - allow-suspicious-udfs
-  - ansi
-  - autocommit
-  - basedir
-  - big-tables
-  - bind-address
-  - binlog_cache_size
-  - binlog-checksum
-  - binlog_direct_non_transactional_updates
-  - binlog-do-db
-  - binlog-format
-  - binlog_group_commit_sync_delay
-  - binlog_group_commit_sync_no_delay_count
-  - binlog-ignore-db
-  - binlog-row-event-max-size
-  - binlog_row_image
-  - binlog-rows-query-log-events
-  - binlog_stmt_cache_size
-  - binlogging_impossible_mode
-  - block_encryption_mode
-  - bootstrap
-  - bulk_insert_buffer_size
-  - character-set-client-handshake
-  - character-set-filesystem
-  - character-set-server
-  - character-sets-dir
-  - chroot
-  - collation-server
-  - completion_type
-  - concurrent_insert
-  - connect_timeout
-  - console
-  - core-file
-  - daemon_memcached_enable_binlog
-  - daemon_memcached_engine_lib_name
-  - daemon_memcached_engine_lib_path
-  - daemon_memcached_option
-  - daemon_memcached_r_batch_size
-  - daemon_memcached_w_batch_size
-  - datadir
-  - debug
-  - debug-sync-timeout
-  - default-authentication-plugin
-  - default_authentication_plugin
-  - default_password_lifetime
-  - default-storage-engine
-  - default-time-zone
-  - default_tmp_storage_engine
-  - default_week_format
-  - delay-key-write
-  - delayed_insert_limit
-  - delayed_insert_timeout
-  - delayed_queue_size
-  - des-key-file
-  - disconnect_on_expired_password
-  - disconnect-slave-event-count
-  - div_precision_increment
-  - enable-named-pipe
-  - enforce_gtid_consistency
-  - enforce-gtid-consistency
-  - event-scheduler
-  - executed-gtids-compression-period
-  - exit-info
-  - expire_logs_days
-  - explicit_defaults_for_timestamp
-  - external-locking
-  - federated
-  - flush
-  - flush_time
-  - ft_boolean_syntax
-  - ft_max_word_len
-  - ft_min_word_len
-  - ft_query_expansion_limit
-  - ft_stopword_file
-  - gdb
-  - general-log
-  - general_log_file
-  - group_concat_max_len
-  - gtid-mode
-  - help
-  - ignore-builtin-innodb
-  - ignore-db-dir
-  - init_connect
-  - init-file
-  - init_slave
-  - innodb
-  - innodb_adaptive_flushing
-  - innodb_adaptive_flushing_lwm
-  - innodb_adaptive_hash_index
-  - innodb_adaptive_max_sleep_delay
-  - innodb_additional_mem_pool_size
-  - innodb_api_bk_commit_interval
-  - innodb_api_disable_rowlock
-  - innodb_api_enable_binlog
-  - innodb_api_enable_mdl
-  - innodb_api_trx_level
-  - innodb_autoextend_increment
-  - innodb_autoinc_lock_mode
-  - innodb_buffer_pool_chunk_size
-  - innodb_buffer_pool_dump_at_shutdown
-  - innodb_buffer_pool_dump_now
-  - innodb_buffer_pool_dump_pct
-  - innodb_buffer_pool_filename
-  - innodb_buffer_pool_instances
-  - innodb_buffer_pool_load_abort
-  - innodb_buffer_pool_load_at_startup
-  - innodb_buffer_pool_load_now
-  - innodb_buffer_pool_size
-  - innodb_change_buffer_max_size
-  - innodb_change_buffering
-  - innodb_checksum_algorithm
-  - innodb_checksums
-  - innodb_cmp_per_index_enabled
-  - innodb_commit_concurrency
-  - innodb_compression_failure_threshold_pct
-  - innodb_compression_level
-  - innodb_compression_pad_pct_max
-  - innodb_concurrency_tickets
-  - innodb_create_intrinsic
-  - innodb_data_file_path
-  - innodb_data_home_dir
-  - innodb_disable_sort_file_cache
-  - innodb_doublewrite
-  - innodb_fast_shutdown
-  - innodb_file_format
-  - innodb_file_format_check
-  - innodb_file_format_max
-  - innodb_file_per_table
-  - innodb_fill_factor
-  - innodb_flush_log_at_trx_commit
-  - innodb_flush_method
-  - innodb_flush_neighbors
-  - innodb_flushing_avg_loops
-  - innodb_force_load_corrupted
-  - innodb_force_recovery
-  - innodb_ft_aux_table
-  - innodb_ft_cache_size
-  - innodb_ft_enable_diag_print
-  - innodb_ft_enable_stopword
-  - innodb_ft_max_token_size
-  - innodb_ft_min_token_size
-  - innodb_ft_num_word_optimize
-  - innodb_ft_result_cache_limit
-  - innodb_ft_server_stopword_table
-  - innodb_ft_sort_pll_degree
-  - innodb_ft_total_cache_size
-  - innodb_ft_user_stopword_table
-  - innodb_io_capacity
-  - innodb_io_capacity_max
-  - innodb_large_prefix
-  - innodb_lock_wait_timeout
-  - innodb_locks_unsafe_for_binlog
-  - innodb_log_buffer_size
-  - innodb_log_compressed_pages
-  - innodb_log_file_size
-  - innodb_log_files_in_group
-  - innodb_log_group_home_dir
-  - innodb_log_write_ahead_size
-  - innodb_lru_scan_depth
-  - innodb_max_dirty_pages_pct
-  - innodb_max_dirty_pages_pct_lwm
-  - innodb_max_purge_lag
-  - innodb_max_purge_lag_delay
-  - innodb_max_undo_log_size
-  - innodb_monitor_disable
-  - innodb_monitor_enable
-  - innodb_monitor_reset
-  - innodb_monitor_reset_all
-  - innodb_old_blocks_pct
-  - innodb_old_blocks_time
-  - innodb_online_alter_log_max_size
-  - innodb_open_files
-  - innodb_optimize_fulltext_only
-  - innodb_optimize_point_storage
-  - innodb_page_cleaners
-  - innodb_page_size
-  - innodb_print_all_deadlocks
-  - innodb_purge_batch_size
-  - innodb_purge_rseg_truncate_frequency
-  - innodb_purge_threads
-  - innodb_random_read_ahead
-  - innodb_read_ahead_threshold
-  - innodb_read_io_threads
-  - innodb_read_only
-  - innodb_replication_delay
-  - innodb_rollback_on_timeout
-  - innodb_rollback_segments
-  - innodb_sort_buffer_size
-  - innodb_spin_wait_delay
-  - innodb_stats_auto_recalc
-  - innodb_stats_method
-  - innodb_stats_on_metadata
-  - innodb_stats_persistent
-  - innodb_stats_persistent_sample_pages
-  - innodb_stats_sample_pages
-  - innodb_stats_transient_sample_pages
-  - innodb-status-file
-  - innodb_status_output
-  - innodb_status_output_locks
-  - innodb_strict_mode
-  - innodb_support_xa
-  - innodb_sync_array_size
-  - innodb_sync_spin_loops
-  - innodb_table_locks
-  - innodb_temp_data_file_path
-  - innodb_thread_concurrency
-  - innodb_thread_sleep_delay
-  - innodb_undo_directory
-  - innodb_undo_log_truncate
-  - innodb_undo_logs
-  - innodb_undo_tablespaces
-  - innodb_use_native_aio
-  - innodb_use_sys_malloc
-  - innodb_write_io_threads
-  - interactive_timeout
-  - internal_tmp_disk_storage_engine
-  - join_buffer_size
-  - keep_files_on_create
-  - key_buffer_size
-  - key_cache_age_threshold
-  - key_cache_block_size
-  - key_cache_division_limit
-  - language
-  - large-pages
-  - lc-messages
-  - lc-messages-dir
-  - lock_wait_timeout
-  - log-bin
-  - log-bin-index
-  - log-bin-trust-function-creators
-  - log_bin_use_v
-  - log-bin-use-v
-  - log-error
-  - log_error_verbosity
-  - log-isam
-  - log-output
-  - log-queries-not-using-indexes
-  - log-raw
-  - log-short-format
-  - log-slave-updates
-  - log_slave_updates
-  - log-slow-admin-statements
-  - log-slow-slave-statements
-  - log_syslog
-  - log_syslog_facility
-  - log_syslog_include_pid
-  - log_syslog_tag
-  - log-tc
-  - log-tc-size
-  - log_timestamps
-  - log-warnings
-  - long_query_time
-  - low-priority-updates
-  - lower_case_table_names
-  - master-info-file
-  - master_info_repository
-  - master-info-repository
-  - master-retry-count
-  - master-verify-checksum
-  - max_allowed_packet
-  - max_binlog_cache_size
-  - max-binlog-dump-events
-  - max_binlog_size
-  - max_binlog_stmt_cache_size
-  - max_connect_errors
-  - max_connections
-  - max_delayed_threads
-  - max_error_count
-  - max_heap_table_size
-  - max_join_size
-  - max_length_for_sort_data
-  - max_prepared_stmt_count
-  - max_relay_log_size
-  - max_seeks_for_key
-  - max_sort_length
-  - max_sp_recursion_depth
-  - max_statement_time
-  - max_user_connections
-  - max_write_lock_count
-  - memlock
-  - min-examined-row-limit
-  - myisam-block-size
-  - myisam_data_pointer_size
-  - myisam_max_sort_file_size
-  - myisam_mmap_size
-  - myisam-recover-options
-  - myisam_repair_threads
-  - myisam_sort_buffer_size
-  - myisam_stats_method
-  - myisam_use_mmap
-  - ndb-batch-size
-  - ndb-blob-write-batch-bytes
-  - ndb-cluster-connection-pool
-  - ndb-connectstring
-  - ndb-deferred-constraints
-  - ndb_deferred_constraints
-  - ndb_distribution
-  - ndb-distribution
-  - ndb_eventbuffer_max_alloc
-  - ndb_force_send
-  - ndb_index_stat_enable
-  - ndb_index_stat_option
-  - ndb-log-apply-status
-  - ndb_log_apply_status
-  - ndb-log-empty-epochs
-  - ndb-log-transaction-id
-  - ndb_log_updated_only
-  - ndb-mgmd-host
-  - ndb_optimized_node_selection
-  - ndb_report_thresh_binlog_epoch_slip
-  - ndb_report_thresh_binlog_mem_usage
-  - ndb_show_foreign_key_mock_tables
-  - ndb_use_transactions
-  - ndb-wait-setup
-  - net_buffer_length
-  - net_read_timeout
-  - net_retry_count
-  - net_write_timeout
-  - new
-  - offline_mode
-  - old
-  - old-alter-table
-  - old-style-user-limits
-  - open-files-limit
-  - optimizer_prune_level
-  - optimizer_search_depth
-  - optimizer_switch
-  - partition
-  - performance_schema
-  - performance_schema_accounts_size
-  - performance-schema-consumer-events-stages-current
-  - performance-schema-consumer-events-stages-history
-  - performance-schema-consumer-events-stages-history-long
-  - performance-schema-consumer-events-statements-current
-  - performance-schema-consumer-events-statements-history
-  - performance-schema-consumer-events-statements-history-long
-  - performance-schema-consumer-events-transactions-current
-  - performance-schema-consumer-events-transactions-history
-  - performance-schema-consumer-events-transactions-history-long
-  - performance-schema-consumer-events-waits-current
-  - performance-schema-consumer-events-waits-history
-  - performance-schema-consumer-events-waits-history-long
-  - performance-schema-consumer-global-instrumentation
-  - performance-schema-consumer-statements-digest
-  - performance-schema-consumer-thread-instrumentation
-  - performance_schema_digests_size
-  - performance_schema_events_stages_history_long_size
-  - performance_schema_events_stages_history_size
-  - performance_schema_events_statements_history_long_size
-  - performance_schema_events_statements_history_size
-  - performance_schema_events_transactions_history_long_size
-  - performance_schema_events_transactions_history_size
-  - performance_schema_events_waits_history_long_size
-  - performance_schema_events_waits_history_size
-  - performance_schema_hosts_size
-  - performance-schema-instrument
-  - performance_schema_max_cond_classes
-  - performance_schema_max_cond_instances
-  - performance_schema_max_file_classes
-  - performance_schema_max_file_handles
-  - performance_schema_max_file_instances
-  - performance_schema_max_memory_classes
-  - performance_schema_max_metadata_locks
-  - performance_schema_max_mutex_classes
-  - performance_schema_max_mutex_instances
-  - performance_schema_max_prepared_statements_instances
-  - performance_schema_max_program_instances
-  - performance_schema_max_rwlock_classes
-  - performance_schema_max_rwlock_instances
-  - performance_schema_max_socket_classes
-  - performance_schema_max_socket_instances
-  - performance_schema_max_stage_classes
-  - performance_schema_max_statement_classes
-  - performance_schema_max_statement_stack
-  - performance_schema_max_table_handles
-  - performance_schema_max_table_instances
-  - performance_schema_max_thread_classes
-  - performance_schema_max_thread_instances
-  - performance_schema_session_connect_attrs_size
-  - performance_schema_setup_actors_size
-  - performance_schema_setup_objects_size
-  - performance_schema_users_size
-  - pid-file
-  - plugin
-  - plugin_dir
-  - plugin-load
-  - plugin-load-add
-  - port
-  - port-open-timeout
-  - preload_buffer_size
-  - profiling_history_size
-  - query_alloc_block_size
-  - query_cache_limit
-  - query_cache_min_res_unit
-  - query_cache_size
-  - query_cache_type
-  - query_cache_wlock_invalidate
-  - query_prealloc_size
-  - range_alloc_block_size
-  - read_buffer_size
-  - read_only
-  - read_rnd_buffer_size
-  - relay-log
-  - relay-log-index
-  - relay_log_index
-  - relay-log-info-file
-  - relay_log_info_file
-  - relay-log-info-repository
-  - relay_log_purge
-  - relay_log_recovery
-  - relay-log-recovery
-  - relay_log_space_limit
-  - replicate-do-db
-  - replicate-do-table
-  - replicate-ignore-db
-  - replicate-ignore-table
-  - replicate-rewrite-db
-  - replicate-same-server-id
-  - replicate-wild-do-table
-  - replicate-wild-ignore-table
-  - report-host
-  - report-password
-  - report-port
-  - report-user
-  - rpl_stop_slave_timeout
-  - safe-user-create
-  - secure-auth
-  - secure-file-priv
-  - server-id
-  - session_track_schema
-  - session_track_state_change
-  - session_track_system_variables
-  - shared_memory
-  - show-slave-auth-info
-  - simplified_binlog_gtid_recovery
-  - skip-character-set-client-handshake
-  - skip-concurrent-insert
-  - skip-event-scheduler
-  - skip_external_locking
-  - skip-grant-tables
-  - skip-host-cache
-  - skip-name-resolve
-  - skip-ndbcluster
-  - skip-networking
-  - skip-new
-  - skip-partition
-  - skip-show-database
-  - skip-slave-start
-  - skip-ssl
-  - skip-stack-trace
-  - slave_allow_batching
-  - slave_checkpoint_group
-  - slave-checkpoint-group
-  - slave_checkpoint_period
-  - slave-checkpoint-period
-  - slave_compressed_protocol
-  - slave_exec_mode
-  - slave-load-tmpdir
-  - slave-max-allowed-packet
-  - slave-net-timeout
-  - slave-parallel-type
-  - slave-parallel-workers
-  - slave-rows-search-algorithms
-  - slave-skip-errors
-  - slave-sql-verify-checksum
-  - slave_transaction_retries
-  - slave_type_conversions
-  - slow_launch_time
-  - slow-query-log
-  - slow_query_log_file
-  - slow-start-timeout
-  - socket
-  - sort_buffer_size
-  - sporadic-binlog-dump-fail
-  - sql-mode
-  - ssl
-  - ssl-ca
-  - ssl-capath
-  - ssl-cert
-  - ssl-cipher
-  - ssl-crl
-  - ssl-crlpath
-  - ssl-key
-  - standalone
-  - stored_program_cache
-  - super-large-pages
-  - symbolic-links
-  - sync_binlog
-  - sync_frm
-  - sync_master_info
-  - sync_relay_log
-  - sync_relay_log_info
-  - sysdate-is-now
-  - tc-heuristic-recover
-  - temp-pool
-  - thread_cache_size
-  - thread_concurrency
-  - thread_handling
-  - thread_stack
-  - timed_mutexes
-  - tmp_table_size
-  - tmpdir
-  - transaction_alloc_block_size
-  - transaction-isolation
-  - transaction_prealloc_size
-  - transaction-read-only
-  - updatable_views_with_limit
-  - user
-  - validate-password
-  - verbose
-  - wait_timeout
-{% endload %}
\ No newline at end of file
diff --git a/mysql/supported_sections.yaml b/mysql/supported_sections.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e2e9d2a0f2db48026ea1e4a03040afe075ab7aed
--- /dev/null
+++ b/mysql/supported_sections.yaml
@@ -0,0 +1,16 @@
+# vim
+{% load_yaml as supported_sections %}
+- client
+- mysql
+- mysqldump
+- mysqld_safe
+- mysqlhotcopy
+- mysqladmin
+- mysqlcheck
+- mysqlimport
+- mysqlshow
+- myisampack
+- myisamchk
+- isamchk
+- mysqld
+{% endload %}
diff --git a/mysql/user.sls b/mysql/user.sls
index b792f686983c945e577d84a3cbf7caa32f14a3cd..d706a4c9f8bc6cf71ec99c2541e1ac4f18ad38bd 100644
--- a/mysql/user.sls
+++ b/mysql/user.sls
@@ -3,16 +3,27 @@
 {%- set mysql_root_pass = salt['pillar.get']('mysql:server:root_password', 'somepass') %}
 
 {% set user_states = [] %}
+{% set user_hosts = [] %}
 
 include:
   - mysql.python
 
 {% for name, user in salt['pillar.get']('mysql:user', {}).items() %}
-{% set state_id = 'mysql_user_' ~ loop.index0 %}
+
+{% set user_host = salt['pillar.get']('mysql:user:%s:host'|format(name)) %}
+{% if user_host != '' %}
+  {% set user_hosts = [user_host] %}
+{% else %}
+  {% set user_hosts = salt['pillar.get']('mysql:user:%s:hosts'|format(name)) %}
+{% endif %}
+
+{% for host in user_hosts %}
+
+{% set state_id = 'mysql_user_' ~ name ~ '_' ~ host%}
 {{ state_id }}:
   mysql_user.present:
     - name: {{ name }}
-    - host: '{{ user['host'] }}'
+    - host: '{{ host }}'
   {%- if user['password_hash'] is defined %}
     - password_hash: '{{ user['password_hash'] }}'
   {%- elif user['password'] is defined and user['password'] != None %}
@@ -35,7 +46,7 @@ include:
     - database: '{{ db['database'] }}.{{ db['table'] | default('*') }}'
     - grant_option: {{ db['grant_option'] | default(False) }}
     - user: {{ name }}
-    - host: '{{ user['host'] }}'
+    - host: '{{ host }}'
     - connection_host: localhost
     - connection_user: root
     {% if mysql_root_pass -%}
@@ -48,3 +59,4 @@ include:
 
 {% do user_states.append(state_id) %}
 {% endfor %}
+{% endfor %}
diff --git a/pillar.example b/pillar.example
index 026b595422c84f518b51bf742dd9114fc2fc5271..1a64e26307fa5b1cc388f006b89654c7791e1dfe 100644
--- a/pillar.example
+++ b/pillar.example
@@ -5,13 +5,12 @@ mysql:
     user: mysql
     # my.cnf sections changes 
     mysqld:
+      # you can use either underscore or hyphen in param names
       bind-address: 0.0.0.0
+      log_bin: /var/log/mysql/mysql-bin.log
       port: 3307
-      server-id: 1
-      log-bin: mysql-bin
-      binlog-do-db: foo
+      binlog_do_db: foo
       auto_increment_increment: 5
-      max_connect_errors: 4294967295
     mysql:
       # my.cnf param that not require value
       no-auto-rehash: noarg_present
@@ -28,7 +27,7 @@ mysql:
       load: False
 
   # Manage users
-  # you can get pillar for existent server using import_users.py script
+  # you can get pillar for existent server using scripts/import_users.py script
   user:
     frank:
       password: 'somepass'
@@ -58,10 +57,9 @@ mysql:
     server: mysql-server
     client: mysql-client
     service: mysql-service
-    config: /etc/mysql/my.cnf
     python: python-mysqldb
 
   # Install MySQL headers
   dev:
   	# Install dev package - defaults to False
-  	install: False
\ No newline at end of file
+  	install: False
diff --git a/scripts/html_table_parser.py b/scripts/html_table_parser.py
deleted file mode 100644
index e376f92df8f972ae2467b48bb1709b638b34a9ff..0000000000000000000000000000000000000000
--- a/scripts/html_table_parser.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#-------------------------------------------------------------------------------
-# Name:        html_table_parser
-# Purpose:     Simple class for parsing an (x)html string to extract tables.
-#              Written in python3
-#
-# Author:      Josua Schmid
-#
-# Created:     05.03.2014
-# Copyright:   (c) Josua Schmid 2014
-# Licence:     GPLv3
-#-------------------------------------------------------------------------------
-from html.parser import HTMLParser
-
-class HTMLTableParser(HTMLParser):
-    """ This class serves as a html table parser. It is able to parse multiple
-    tables which you feed in. You can access the result per .tables field.
-    """
-    def __init__(self):
-        HTMLParser.__init__(self)
-        self.__in_td = False
-        self.__in_th = False
-        self.__current_table = []
-        self.__current_row = []
-        self.__current_cell = []
-        self.tables = []
-
-    def handle_starttag(self, tag, attrs):
-        """ We need to remember the opening point for the content of interest.
-        The other tags (<table>, <tr>) are only handled at the closing point.
-        """
-        if tag == 'td':
-            self.__in_td = True
-        if tag == 'th':
-            self.__in_th = True
-
-    def handle_data(self, data):
-        """ This is where we save content to a cell """
-        if self.__in_td ^ self.__in_th:
-            self.__current_cell.append(data.strip())
-
-    def handle_endtag(self, tag):
-        """ Here we exit the tags. If the closing tag is </tr>, we know that we
-        can save our currently parsed cells to the current table as a row and
-        prepare for a new row. If the closing tag is </table>, we save the
-        current table and prepare for a new one.
-        """
-        if tag == 'td':
-            self.__in_td = False
-        if tag == 'th':
-            self.__in_th = False
-
-        if (tag == 'td') ^ (tag == 'th'):
-            final_cell = " ".join(self.__current_cell).strip()
-            self.__current_row.append(final_cell)
-            self.__current_cell = []
-        if tag == 'tr':
-            self.__current_table.append(self.__current_row)
-            self.__current_row = []
-        if tag == 'table':
-            self.tables.append(self.__current_table)
-            self.__current_table = []
\ No newline at end of file
diff --git a/scripts/import_users.py b/scripts/import_users.py
new file mode 100755
index 0000000000000000000000000000000000000000..456aed0e820a86d590df35d218d480af10f432c5
--- /dev/null
+++ b/scripts/import_users.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+"This script helps you to get mysql.user pillar from existent mysql server"
+
+import argparse
+import MySQLdb
+import re
+
+__author__ = "Egor Potiomkin"
+__version__ = "1.0"
+__email__ = "eg13reg@gmail.com"
+
+parser = argparse.ArgumentParser()
+parser.add_argument('host', metavar='IP', help='host where you want to get users')
+parser.add_argument('user', metavar='user', help='mysql user that can show grants')
+parser.add_argument('password', metavar='password', help='user password')
+args = parser.parse_args()
+
+# PARSE GRANTS 
+mysqlcon = MySQLdb.connect(host=args.host,user=args.user,passwd=args.password,db="mysql",use_unicode=True, charset='utf8')
+mysqlCur = mysqlcon.cursor(MySQLdb.cursors.DictCursor)
+
+mysqlCur.execute(r'''select user,host from mysql.user;''')
+rows = mysqlCur.fetchall()
+users = []
+
+for row in rows:
+	users.append({'name': row['user'], 'host': row['host']});
+
+mysqlCur = mysqlcon.cursor()
+grants = []
+for user in users:
+	q = r'''show grants for '%s'@'%s';''' % (user['name'], user['host'])
+	try:
+		user['grants'] = []
+		mysqlCur.execute(q)
+		rows = mysqlCur.fetchall()
+		for row in rows:
+			mpass = re.search(
+				r"""GRANT USAGE ON \*\.\* TO .* IDENTIFIED BY PASSWORD '(\*[A-F0-9]*)\'""",
+				row[0])
+			if mpass is None:
+				mgrant = re.search(
+					r"""GRANT ([\s,A-Z]+) ON `?([a-zA-Z0-9_\-*\\]*)`?\.`?([a-zA-Z0-9_\-*\\]*)`? TO .*""",
+					row[0])
+				if mgrant is not None:					
+					user['grants'].append({'grant': [x.strip() for x in mgrant.group(1).split(',')], 'database': mgrant.group(2).replace('\\',''), 'table': mgrant.group(3).replace('\\','')})
+				else:
+					print "ERROR: CAN NOT PARSE GRANTS: ",row[0]
+			else:
+				user['password'] = mpass.group(1)
+
+	except MySQLdb.DatabaseError:
+		print "Error while getting grants for '%s'@'%s'" % (user['name'], user['host'])
+#raise SystemExit
+# PRINT RESULT
+""" PRINT EXAMPLE
+mysql:
+  user:
+    username:
+      host: host
+      password_hash: '*2792A97371B2D17789364A22A9B35D180166571A'
+      databases:
+        - database: testbase
+          table: table1
+          grants: ['select']
+"""
+print "mysql:"
+print "  user:"
+for user in users:
+	print "    %s:" % user['name']
+	print "      host: '%s'" % user['host']
+	if ('password' in user):
+		print "      password_hash: '%s'" % user['password']
+	print "      databases:"
+	for grant in user['grants']:
+		print "        - database: '%s'" % grant['database']
+		print "          table: '%s'" % grant['table']
+		print "          grants: ['%s']" % "','".join(grant['grant']).lower()
diff --git a/scripts/parse_supported_params.py b/scripts/parse_supported_params.py
deleted file mode 100755
index 33c4ee6491531c2310ce281498e67c7fe2674ba5..0000000000000000000000000000000000000000
--- a/scripts/parse_supported_params.py
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/usr/bin/python3
-# coding: utf-8
-import argparse
-import re
-import sys
-import urllib.request
-from html_table_parser import HTMLTableParser
-
-# Regex for parsing options on MySQL documentation pages
-# Options are (normally) specified as command-line options
-# as anchor tags on the page.  Certain documentation pages only
-# show options in table listings, however.
-OPTION_REGEX = '<a name="option_%s_(.*?)"></a>'
-OPTION_TABLE_REGEX = '^(--)?([A-Za-z_-]+).*$'
-
-# File heading, as per the original supported_params file
-FILE_HEADER = """# vim
-{#- Do not edit this YAML file by hand. See README.rst for how to update -#}
-{% load_yaml as supported_params %}
-"""
-FILE_FOOTER = """{% endload %}"""
-
-# Standard YAML template for options for a section
-YAML_TEMPLATE = """# From %(url)s
-%(section)s:
-  - %(options)s
-"""
-
-# For rendering Jinja that handles multiple sections
-# Several MySQL utilities use exactly the same options
-# Note this variable is string formatted twice, hence the double-double % signs
-YAML_TEMPLATE_MULTI = """# From %%(url)s
-{%%%% for section in %(sections)r %%%%}
-{{ section  }}:
-  - %%(options)s
-{%%%% endfor %%%%}
-"""
-
-# Options specified in HTML documentation as command-line options
-# like so <a name="option_mysql_help"></a>.
-# Structure is (section_id, documentation_url, yaml_template_str)
-SECTIONS = (
-    ('mysql',
-     'https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html',
-     YAML_TEMPLATE_MULTI % {'sections': ['client', 'mysql']}),
-    ('mysqldump',
-     'https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html',
-     YAML_TEMPLATE),
-    ('mysqld_safe',
-     'https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html',
-     YAML_TEMPLATE),
-    # Removed in MySQL 5.7
-    ('mysqlhotcopy',
-     'http://dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html',
-     YAML_TEMPLATE),
-    ('mysqladmin',
-     'http://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html',
-     YAML_TEMPLATE),
-    ('mysqlcheck',
-     'http://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html',
-     YAML_TEMPLATE),
-    ('mysqlimport',
-     'http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html',
-     YAML_TEMPLATE),
-    ('mysqlshow',
-     'http://dev.mysql.com/doc/refman/5.7/en/mysqlshow.html',
-     YAML_TEMPLATE),
-    ('myisampack',
-     'http://dev.mysql.com/doc/refman/5.7/en/myisampack.html',
-     YAML_TEMPLATE),
-)
-# Options specified in documentation as command-line and
-# option file values in a table only.
-SECTIONS_VIA_TABLE = (
-    ('myisamchk',
-     'https://dev.mysql.com/doc/refman/5.7/en/myisamchk.html',
-     YAML_TEMPLATE_MULTI % {'sections': ['myisamchk', 'isamchk']}),
-)
-# Server options specified in documentation
-SERVER_OPTIONS = (
-    'mysqld',
-    'https://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html',
-    YAML_TEMPLATE
-)
-
-
-def read_url(url):
-    """ Read the given URL and decode the response as UTF-8.
-    """
-    request = urllib.request.Request(url)
-    response = urllib.request.urlopen(request)
-    return response.read().decode('utf-8')
-
-
-def read_first_table(url):
-    """ Read the given URL, parse the result, and return the first table.
-    """
-    xhtml = read_url(url)
-    parser = HTMLTableParser()
-    parser.feed(xhtml)
-    return parser.tables[0]  # Use first table on the page
-
-
-def parse_anchors(url, section):
-    """ Return parsed options from option anchors at the given URL.
-    """
-    return re.findall(OPTION_REGEX % section, read_url(url))
-
-
-def parse_tables(url, section):
-    """ Return arsed options from HTML tables at the given URL.
-
-    This matches the given option regex, and ensures that the
-    first row of the table is ignored; it contains headings only.
-    """
-    table = read_first_table(url)
-    return [re.match(OPTION_TABLE_REGEX, row[0]).groups()[1]
-            for row in table[1:]]
-
-
-def parse_mysqld(url, section):
-    """ Return the parsed options from the huge mysqld table.
-
-    The massive options table shows variables and options and
-    highlights where they can be used.  The following code only
-    pulls out those that are marked as 'Yes' for use in an option file.
-    """
-    table = read_first_table(url)
-    # Find which column holds the option file data
-    option_index = table[0].index('Option File')
-    # Only pull out options able to be used in an options file
-    return [re.match(OPTION_TABLE_REGEX, row[0]).groups()[1]
-            for row in table[1:]
-            if len(row) >= option_index + 1 and
-            row[option_index].strip().lower() == 'yes']
-
-
-def print_yaml_options(sections, parser, file=sys.stdout):
-    """ Perform really basic templating for output.
-
-    A YAML library could be used, but we avoid extra dependencies by
-    just using string formatting.
-    """
-    for section, url, yaml in sections:
-        options = parser(url, section)
-        print(yaml % {'section': section,
-                      'options': '\n  - '.join(options),
-                      'url': url}, end='', file=file)
-
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser(
-        description='Scrape the MySQL documentation to obtain'
-                    ' all the supported parameters for different utilities.')
-    parser.add_argument('--output',
-                        '-o',
-                        help='File output location',
-                        default=sys.stdout)
-    config = parser.parse_args()
-    output = open(config.output, 'w') if isinstance(config.output, str) \
-        else config.output
-
-    print(FILE_HEADER, end='', file=output)
-    print_yaml_options(SECTIONS, parse_anchors, file=output)
-    print_yaml_options(SECTIONS_VIA_TABLE, parse_tables, file=output)
-    print_yaml_options((SERVER_OPTIONS,), parse_mysqld, file=output)
-    print(FILE_FOOTER, end='', file=output)