diff --git a/mysql/database.sls b/mysql/database.sls index 977a0524..9a517ef5 100644 --- a/mysql/database.sls +++ b/mysql/database.sls @@ -13,19 +13,31 @@ include: {% for database_obj in salt['pillar.get']('mysql:database', []) %} {% set state_id = 'mysql_db_' ~ loop.index0 %} -{% set database = database_obj.get('name') if database_obj is mapping else database_obj %} +{% if not database_obj %}{# in case database_obj == [] #} +{% continue %} +{% elif database_obj is mapping %} +{% set database = database_obj.get('name') %} +{% set present = database_obj.get('present', True) %} +{% else %} +{% set database = database_obj %} +{% set present = True %} +{% endif %} {{ state_id }}: + {%- if present %} mysql_database.present: + {% if database_obj is mapping %} + - character_set: {{ database_obj.get('character_set', '') }} + - collate: {{ database_obj.get('collate', '') }} + {% endif %} + {% else %} + mysql_database.absent: + {% endif %} - name: {{ database }} - connection_host: '{{ mysql_host }}' - connection_user: '{{ mysql_salt_user }}' {% if mysql_salt_pass %} - connection_pass: '{{ mysql_salt_pass }}' {% endif %} - {% if database_obj is mapping %} - - character_set: {{ database_obj.get('character_set', '') }} - - collate: {{ database_obj.get('collate', '') }} - {% endif %} - connection_charset: utf8 {% if salt['pillar.get'](['mysql', 'schema', database, 'load']|join(':'), False) %} diff --git a/mysql/user.sls b/mysql/user.sls index e729bf80..fa0b6e4e 100644 --- a/mysql/user.sls +++ b/mysql/user.sls @@ -34,22 +34,28 @@ include: {% set state_id = 'mysql_user_' ~ name ~ '_' ~ host%} {{ state_id }}: - mysql_user.present: - - name: {{ name }} - - host: '{{ host }}' - {%- if user['password_hash'] is defined %} - - password_hash: '{{ user['password_hash'] }}' - {%- elif user['password'] is defined and user['password'] != None %} - - password: '{{ user['password'] }}' + {%- if user.get('present', True) %} + mysql_user.present: + - name: {{ name }} + - host: '{{ host }}' + {%- if user['password_hash'] is defined %} + - password_hash: '{{ user['password_hash'] }}' + {%- elif user['password'] is defined and user['password'] != None %} + - password: '{{ user['password'] }}' + {%- else %} + - allow_passwordless: True + {%- endif %} {%- else %} - - allow_passwordless: True + mysql_user.absent: + - name: {{ name }} + - host: '{{ host }}' {%- endif %} - - connection_host: '{{ mysql_host }}' - - connection_user: '{{ mysql_salt_user }}' - {% if mysql_salt_pass %} - - connection_pass: '{{ mysql_salt_pass }}' - {% endif %} - - connection_charset: utf8 + - connection_host: '{{ mysql_host }}' + - connection_user: '{{ mysql_salt_user }}' + {%- if mysql_salt_pass %} + - connection_pass: '{{ mysql_salt_pass }}' + {%- endif %} + - connection_charset: utf8 {%- if 'grants' in user %} {{ state_id ~ '_grants' }}: diff --git a/pillar.example b/pillar.example index 399f483a..112d5424 100644 --- a/pillar.example +++ b/pillar.example @@ -72,6 +72,9 @@ mysql: - name: bar character_set: utf8 collate: utf8_general_ci + # Delete DB + - name: obsolete_db + present: False schema: foo: load: True @@ -143,6 +146,12 @@ mysql: - database: foo grants: ['select', 'insert', 'update'] + # Remove a user + obsoleteuser: + host: localhost + # defaults to True + present: False + # Override any names defined in map.jinja # serverpkg: mysql-server # clientpkg: mysql-client