MySQL Master-Returner
https://docs.saltstack.com/en/latest/topics/jobs/external_cache.html
MariaDB Server auf dem Master installieren
apt install mysql-server python-mysqldb
Ab MySQL 5.7 oder MariaDB 10.2 wird der Datentyp JSON unterstützt, welcher für Salt sehr nützlich ist.
Problem Debian 9 bringt nur MariaDB 10.1 mit, also direkt MySQL 8 von MySQL.com installieren
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb
dpkg -i mysql-apt-config_0.8.10-1_all.deb
apt update
apt install mysql-server
Benutzer und Datenbank anlegen
mysql > CREATE USER 'salt'@'localhost' IDENTIFIED BY 'salt';
mysql > GRANT ALL ON salt.* TO 'salt'@'localhost';
Tabellen gemäß Doku per Copy und Paste anlegen.
Den Datentyp JSON verwenden.
mysql > ALTER TABLE salt_returns MODIFY `return` json;
Datei /etc/salt/master.d/mysql.conf
anlegen mit folgendem Inhalt
mysql.host: 'salt'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
Datei /etc/salt/master.d/jobcache.conf
anlegen mit folgendem Inhalt
master_job_cache: mysql
Den Salt-Master neu starten und dann mal ausprobieren
salt '*' status.loadavg
salt '*' status.diskusage
select id,`return`->'$."/".available' from salt_returns where fun = 'status.diskusage';
select id,`return`->'$."/".available' as available from salt_returns where fun = 'status.diskusage' having
available>100;
MySQL Minion-Returner
MySQL/MariaDB installieren
# RHEL/CentOS
yum install mariadb-server
service mariadb start
# Debian/Ubuntu
apt-get install mysql-server
mysql>
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
--
-- Table structure for table `jids`
--
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `salt_returns`
--
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `salt_events`
--
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---
--- Create a user
---
grant all on salt.* to salt identified by 'salt';
Minion vorbereiten
apt-get install python-mysql.connector python-mysqldb
yum install mysql-connector-python
Minion restarten.
/etc/salt/minion
mysql.host: 'salt'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
Resultate auslesen
mysql> select * from salt_returns where `return` not like '%"result": true%'\G
Minion Returner per Salt konfigurieren
{% if grains['os_family'] == 'RedHat' %}
{% set pkg_name = 'MySQL-python' %}
{% else %}
{% set pkg_name = 'python-mysqldb' %}
{% endif %}
{{ pkg_name }}:
pkg.installed
salt:
host.present:
- ip: 192.168.122.1
/etc/salt/minion.d/mysql-returner.conf:
file.managed:
- contents: |
mysql.host: 'salt'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306