Merge branch 'mysql-type-and-deps' into 'master'

WIP: New type: __mysql; plus explorer fixes

See merge request ungleich-public/cdist!995
This commit is contained in:
fancsali 2021-11-04 00:16:29 +01:00
commit c09bcd9bde
10 changed files with 150 additions and 77 deletions

View file

@ -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 <fancsali@gmail.com>
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.

View file

@ -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 <http://www.gnu.org/licenses/>.
#
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

View file

@ -0,0 +1 @@
mariadb

View file

View file

@ -18,15 +18,9 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
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\`'"

View file

@ -18,6 +18,11 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# Whatever the details, we'll need MySQL/MariaDB
require="__mysql" __nop "$__object_id"
if [ -f "$__object/parameter/user" ]
then
user="$( cat "$__object/parameter/user" )"

View file

@ -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 <http://www.gnu.org/licenses/>.
#
# We'll need MySQL/MariaDB
require="__mysql" __nop "$__object_id"

View file

@ -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 <http://www.gnu.org/licenses/>.
#
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

View file

@ -18,15 +18,9 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
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\"'"

View file

@ -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 <http://www.gnu.org/licenses/>.
#
# We'll need MySQl/MariaDb to be installed
require="__mysql" __nop "$__object_id"