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

results matching ""

    No results matching ""