From 798888c66b3529735658198b5146360449e54a48 Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Mon, 22 Feb 2021 10:12:36 +0000 Subject: [PATCH 1/6] New __mysql type and __mysql_* dependencies --- cdist/conf/type/__mysql/gencode-remote | 20 ++++++++ cdist/conf/type/__mysql/man.rst | 54 +++++++++++++++++++++ cdist/conf/type/__mysql/manifest | 26 ++++++++++ cdist/conf/type/__mysql/parameter/boolean | 1 + cdist/conf/type/__mysql_database/manifest | 4 ++ cdist/conf/type/__mysql_privileges/manifest | 23 +++++++++ cdist/conf/type/__mysql_user/manifest | 23 +++++++++ 7 files changed, 151 insertions(+) create mode 100755 cdist/conf/type/__mysql/gencode-remote create mode 100644 cdist/conf/type/__mysql/man.rst create mode 100755 cdist/conf/type/__mysql/manifest create mode 100644 cdist/conf/type/__mysql/parameter/boolean create mode 100755 cdist/conf/type/__mysql_privileges/manifest create mode 100755 cdist/conf/type/__mysql_user/manifest diff --git a/cdist/conf/type/__mysql/gencode-remote b/cdist/conf/type/__mysql/gencode-remote new file mode 100755 index 00000000..5464795f --- /dev/null +++ b/cdist/conf/type/__mysql/gencode-remote @@ -0,0 +1,20 @@ +#!/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 . +# + 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/manifest b/cdist/conf/type/__mysql/manifest new file mode 100755 index 00000000..37c76053 --- /dev/null +++ b/cdist/conf/type/__mysql/manifest @@ -0,0 +1,26 @@ +#!/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 . +# + + +if [ -f "$__object/parameter/mariadb" ]; then + __package mariadb-server +else + __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_database/manifest b/cdist/conf/type/__mysql_database/manifest index a3c9ed5d..a8982801 100755 --- a/cdist/conf/type/__mysql_database/manifest +++ b/cdist/conf/type/__mysql_database/manifest @@ -18,6 +18,10 @@ # along with cdist. If not, see . # + +# Whatever the details, we'll need MySQL/MariaDB +require="__mysql" __nop + 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..fb4add45 --- /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/manifest b/cdist/conf/type/__mysql_user/manifest new file mode 100755 index 00000000..09b3e2d8 --- /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 From 6e2a178631559fcff17e271bcbeca490491b6151 Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Tue, 23 Feb 2021 11:47:41 +0000 Subject: [PATCH 2/6] Fix shellcheck issues --- cdist/conf/type/__mysql_privileges/manifest | 2 +- cdist/conf/type/__mysql_user/manifest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__mysql_privileges/manifest b/cdist/conf/type/__mysql_privileges/manifest index fb4add45..c112604f 100755 --- a/cdist/conf/type/__mysql_privileges/manifest +++ b/cdist/conf/type/__mysql_privileges/manifest @@ -20,4 +20,4 @@ # We'll need MySQL/MariaDB -require="__mysql" __nop $__object_id +require="__mysql" __nop "$__object_id" diff --git a/cdist/conf/type/__mysql_user/manifest b/cdist/conf/type/__mysql_user/manifest index 09b3e2d8..833943f4 100755 --- a/cdist/conf/type/__mysql_user/manifest +++ b/cdist/conf/type/__mysql_user/manifest @@ -20,4 +20,4 @@ # We'll need MySQl/MariaDb to be installed -require="__mysql" __nop $__object_id +require="__mysql" __nop "$__object_id" From ac21f53f40ce9127eb472b3cb6774f9ddd7bf8fd Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Tue, 23 Feb 2021 16:53:06 +0000 Subject: [PATCH 3/6] Make __mysql singleton --- cdist/conf/type/__mysql/singleton | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 cdist/conf/type/__mysql/singleton diff --git a/cdist/conf/type/__mysql/singleton b/cdist/conf/type/__mysql/singleton new file mode 100644 index 00000000..e69de29b From 6a4e047538ccbcda8b587fd94feb279c1adbabd1 Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Wed, 24 Feb 2021 11:13:03 +0000 Subject: [PATCH 4/6] Fix missing object_id --- cdist/conf/type/__mysql_database/manifest | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cdist/conf/type/__mysql_database/manifest b/cdist/conf/type/__mysql_database/manifest index a8982801..af36cfb9 100755 --- a/cdist/conf/type/__mysql_database/manifest +++ b/cdist/conf/type/__mysql_database/manifest @@ -20,7 +20,8 @@ # Whatever the details, we'll need MySQL/MariaDB -require="__mysql" __nop +require="__mysql" __nop $__object_id + if [ -f "$__object/parameter/user" ] then From 3020ee91c232f722dd65b983cf22a84f45975c1d Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Sat, 27 Feb 2021 11:00:52 +0000 Subject: [PATCH 5/6] Defer explorer logic --- cdist/conf/type/__mysql/gencode-remote | 20 ------- .../conf/type/__mysql_database/explorer/state | 33 ------------ .../conf/type/__mysql_database/gencode-remote | 20 ++++--- cdist/conf/type/__mysql_user/explorer/state | 54 ------------------- cdist/conf/type/__mysql_user/gencode-remote | 32 ++++++++--- 5 files changed, 40 insertions(+), 119 deletions(-) delete mode 100755 cdist/conf/type/__mysql/gencode-remote delete mode 100755 cdist/conf/type/__mysql_database/explorer/state delete mode 100755 cdist/conf/type/__mysql_user/explorer/state diff --git a/cdist/conf/type/__mysql/gencode-remote b/cdist/conf/type/__mysql/gencode-remote deleted file mode 100755 index 5464795f..00000000 --- a/cdist/conf/type/__mysql/gencode-remote +++ /dev/null @@ -1,20 +0,0 @@ -#!/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 . -# - diff --git a/cdist/conf/type/__mysql_database/explorer/state b/cdist/conf/type/__mysql_database/explorer/state deleted file mode 100755 index 79858695..00000000 --- a/cdist/conf/type/__mysql_database/explorer/state +++ /dev/null @@ -1,33 +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 [ -n "$( mysql -B -N -e "show databases like '$name'" )" ] -then - echo 'present' -else - echo 'absent' -fi diff --git a/cdist/conf/type/__mysql_database/gencode-remote b/cdist/conf/type/__mysql_database/gencode-remote index 1bdb2b11..ad22cc6e 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_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..4fd1a049 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\"'" From f281a5930b39e46ac3d7c3511916d0c3a9d66fec Mon Sep 17 00:00:00 2001 From: Daniel Fancsali Date: Wed, 5 May 2021 10:53:01 +0100 Subject: [PATCH 6/6] Fix shellcheck bits-n-bobs --- cdist/conf/type/__mysql_database/gencode-remote | 2 +- cdist/conf/type/__mysql_database/manifest | 2 +- cdist/conf/type/__mysql_user/gencode-remote | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cdist/conf/type/__mysql_database/gencode-remote b/cdist/conf/type/__mysql_database/gencode-remote index ad22cc6e..447b3d74 100755 --- a/cdist/conf/type/__mysql_database/gencode-remote +++ b/cdist/conf/type/__mysql_database/gencode-remote @@ -30,7 +30,7 @@ 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'\"" )" ] +if [ -n "$( $__remote_exec "$__target_host" "mysql -B -N -e \"show databases like '$name'\"" )" ] then state_is="present" else diff --git a/cdist/conf/type/__mysql_database/manifest b/cdist/conf/type/__mysql_database/manifest index af36cfb9..44c8c3ca 100755 --- a/cdist/conf/type/__mysql_database/manifest +++ b/cdist/conf/type/__mysql_database/manifest @@ -20,7 +20,7 @@ # Whatever the details, we'll need MySQL/MariaDB -require="__mysql" __nop $__object_id +require="__mysql" __nop "$__object_id" if [ -f "$__object/parameter/user" ] diff --git a/cdist/conf/type/__mysql_user/gencode-remote b/cdist/conf/type/__mysql_user/gencode-remote index 4fd1a049..a2bde7ad 100755 --- a/cdist/conf/type/__mysql_user/gencode-remote +++ b/cdist/conf/type/__mysql_user/gencode-remote @@ -45,13 +45,13 @@ 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'\"" )" +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' )\"" )" + 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" ]