diff --git a/cdist/conf/type/__mysql/man.rst b/cdist/conf/type/__mysql/man.rst new file mode 100644 index 00000000..bb9db22e --- /dev/null +++ b/cdist/conf/type/__mysql/man.rst @@ -0,0 +1,54 @@ +cdist-type__mysql(7) +==================== + +NAME +---- +cdist-type__mysql - Install MySQL or MariaDB server. + + +DESCRIPTION +----------- +This type will install the MySQL server package(s) -- or the compatible MariaDB software. + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +BOOLEAN PARAMETERS +------------------ +mariadb + Install MariaDB to provide the equivalent functionality instead. + +EXAMPLES +-------- + +.. code-block:: sh + + # Install MariaDB and create a user and a database + __mysql --mariadb + __mysql_database testdb + __mysql_user testuser --password topsecret + + +SEE ALSO +-------- +:strong:`cdist-type__mysql_database`\ (7), :strong:`cdist-type__mysql_user`\ (7), :strong:`cdist-type__mysql_privileges`\ (7) + + +AUTHORS +------- +Daniel Fancsali + + +COPYING +------- +Copyright \(C) 2021 Daniel Fancsali. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/cdist/conf/type/__mysql_database/explorer/state b/cdist/conf/type/__mysql/manifest similarity index 71% rename from cdist/conf/type/__mysql_database/explorer/state rename to cdist/conf/type/__mysql/manifest index 79858695..37c76053 100755 --- a/cdist/conf/type/__mysql_database/explorer/state +++ b/cdist/conf/type/__mysql/manifest @@ -1,6 +1,6 @@ #!/bin/sh -e # -# 2020 Ander Punnar (ander-at-kvlt-dot-ee) +# 2021 Daniel Fancsali (fancsali@gmail.com) # # This file is part of cdist. # @@ -18,16 +18,9 @@ # along with cdist. If not, see . # -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi -if [ -n "$( mysql -B -N -e "show databases like '$name'" )" ] -then - echo 'present' +if [ -f "$__object/parameter/mariadb" ]; then + __package mariadb-server else - echo 'absent' + __package mysql-server fi diff --git a/cdist/conf/type/__mysql/parameter/boolean b/cdist/conf/type/__mysql/parameter/boolean new file mode 100644 index 00000000..0c31eacf --- /dev/null +++ b/cdist/conf/type/__mysql/parameter/boolean @@ -0,0 +1 @@ +mariadb diff --git a/cdist/conf/type/__mysql/singleton b/cdist/conf/type/__mysql/singleton new file mode 100644 index 00000000..e69de29b diff --git a/cdist/conf/type/__mysql_database/gencode-remote b/cdist/conf/type/__mysql_database/gencode-remote index 1bdb2b11..447b3d74 100755 --- a/cdist/conf/type/__mysql_database/gencode-remote +++ b/cdist/conf/type/__mysql_database/gencode-remote @@ -18,15 +18,9 @@ # along with cdist. If not, see . # -state_is="$( cat "$__object/explorer/state" )" state_should="$( cat "$__object/parameter/state" )" -if [ "$state_is" = "$state_should" ] -then - exit 0 -fi - if [ -f "$__object/parameter/name" ] then name="$( cat "$__object/parameter/name" )" @@ -34,6 +28,20 @@ else name="$__object_id" fi +# Figure out the current state +# Not an explorer, as otherwise there'd be issues around the dependencies +if [ -n "$( $__remote_exec "$__target_host" "mysql -B -N -e \"show databases like '$name'\"" )" ] +then + state_is="present" +else + state_is="absent" +fi + +if [ "$state_is" = "$state_should" ] +then + exit 0 +fi + case "$state_should" in present) echo "mysql -e 'create database \`$name\`'" diff --git a/cdist/conf/type/__mysql_database/manifest b/cdist/conf/type/__mysql_database/manifest index a3c9ed5d..44c8c3ca 100755 --- a/cdist/conf/type/__mysql_database/manifest +++ b/cdist/conf/type/__mysql_database/manifest @@ -18,6 +18,11 @@ # along with cdist. If not, see . # + +# Whatever the details, we'll need MySQL/MariaDB +require="__mysql" __nop "$__object_id" + + if [ -f "$__object/parameter/user" ] then user="$( cat "$__object/parameter/user" )" diff --git a/cdist/conf/type/__mysql_privileges/manifest b/cdist/conf/type/__mysql_privileges/manifest new file mode 100755 index 00000000..c112604f --- /dev/null +++ b/cdist/conf/type/__mysql_privileges/manifest @@ -0,0 +1,23 @@ +#!/bin/sh -e +# +# 2021 Daniel Fancsali (fancsali@gmail.com) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + + +# We'll need MySQL/MariaDB +require="__mysql" __nop "$__object_id" diff --git a/cdist/conf/type/__mysql_user/explorer/state b/cdist/conf/type/__mysql_user/explorer/state deleted file mode 100755 index 6817ee9d..00000000 --- a/cdist/conf/type/__mysql_user/explorer/state +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh -e -# -# 2020 Ander Punnar (ander-at-kvlt-dot-ee) -# -# This file is part of cdist. -# -# cdist is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# cdist is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with cdist. If not, see . -# - -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi - -if [ -f "$__object/parameter/password" ] -then - password="$( cat "$__object/parameter/password" )" -else - password='' -fi - -host="$( cat "$__object/parameter/host" )" - -check_user="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host'" )" - -if [ -n "$check_user" ] -then - if [ -n "$password" ] - then - check_password="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host' and password = password( '$password' )" )" - fi - - if [ -n "$password" ] && [ -z "$check_password" ] - then - echo 'change-password' - else - echo 'present' - fi -else - echo 'absent' -fi diff --git a/cdist/conf/type/__mysql_user/gencode-remote b/cdist/conf/type/__mysql_user/gencode-remote index 5f13bc87..a2bde7ad 100755 --- a/cdist/conf/type/__mysql_user/gencode-remote +++ b/cdist/conf/type/__mysql_user/gencode-remote @@ -18,15 +18,9 @@ # along with cdist. If not, see . # -state_is="$( cat "$__object/explorer/state" )" state_should="$( cat "$__object/parameter/state" )" -if [ "$state_is" = "$state_should" ] -then - exit 0 -fi - if [ -f "$__object/parameter/name" ] then name="$( cat "$__object/parameter/name" )" @@ -49,6 +43,32 @@ else fi fi +# Current state +# Not an exploerer, to avoid issues with mysql not installed YET +check_user="$( $__remote_exec "$__target_host" "mysql -B -N -e \"select user from mysql.user where user = '$name' and host = '$host'\"" )" + +if [ -n "$check_user" ] +then + if [ -n "$password" ] + then + check_password="$( $__remote_exec "$__target_host" "mysql -B -N -e \"select user from mysql.user where user = '$name' and host = '$host' and password = password( '$password' )\"" )" + fi + + if [ -n "$password" ] && [ -z "$check_password" ] + then + state_is='change-password' + else + state_is='present' + fi +else + state_is='absent' +fi + +if [ "$state_is" = "$state_should" ] +then + exit 0 +fi + if [ "$state_is" = 'absent' ] && [ "$state_should" = 'present' ] then echo "mysql -e 'create user \`$name\`@\`$host\` identified by \"$password\"'" diff --git a/cdist/conf/type/__mysql_user/manifest b/cdist/conf/type/__mysql_user/manifest new file mode 100755 index 00000000..833943f4 --- /dev/null +++ b/cdist/conf/type/__mysql_user/manifest @@ -0,0 +1,23 @@ +#!/bin/sh -e +# +# 2021 Daniel Fancsali (fancsali@gmail.com) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + + +# We'll need MySQl/MariaDb to be installed +require="__mysql" __nop "$__object_id"