Saltstack
  • Willkommen
  • Einführung
  • Testumgebung
    • Salt-Master öffentlicher FQDN
  • Salt installieren
    • Minions und Master "verheiraten"
  • Salt Module
    • Beispiel Benutzer anlegen
    • Dateien hin und her kopieren
  • Salt States
    • Yaml verstehen
    • Editoren anpassen
    • Beispiel Benutzer verwalten
    • Abhängigkeiten
    • Dateien editieren
    • Shell Kommandos
    • Beispiel Caddy Webserver
  • Linter
  • Minions adressieren
    • Grains
    • Hostgruppen - Node Groups
  • Jinja
    • Beispiel Caddy PHP
  • top.sls
  • Output
  • Pillars
    • Hosts Pillars
    • GPG
    • Vault
    • Datenbanken
    • Beispiel Benutzerverwaltung
  • Salt-Mine
  • Eigene Module erstellen
  • Orchestrierung
  • Returner & Job-Cache
  • Salt SSH
  • Salt API
  • Salt Cloud
    • Hinweise und Fallen
    • KVM und Libvirt
    • Scaleway
    • Digitalocean
    • Hetzner Cloud
    • eigene Deploymentscripte
    • Dynamische Portforwarding
    • Keys automatisch aufräumen
    • Start Aktionen
  • GIT
    • Alternative CD
  • Salt Reactor
  • Salt für Windows
    • Software ohne Repository installieren
    • PowerShell
    • Chocolatey Paktemanager
    • Lokales Logon Skript
    • Software Repository
  • Beispiele
    • Restic Backup
    • Apache Web-Proxy
    • Wartungstunnel
    • Unattended Upgrades
  • Salt & Etcd
  • Salt ACS
Powered by GitBook
On this page

Returner & Job-Cache

PreviousOrchestrierungNextSalt SSH

Last updated 5 months ago

Seit der Einführung der mit Salt 3006 sind Funktionen, welche zusätzliche Python Module benötigen sehr instabil. Die Installation zusätzliche Module gelingt oft nicht. Und bei einem Update von Python Modulen oder vom Salt-Master ist man immer dem Risiko ausgesetzt, dass Funktionen plötzlich nicht mehr funktionieren, weil die Abhängigkeiten der Module nicht aufgelöst werden können.

Die Anbindung des Salt-Masters an eine MySQL Datenbank ist so ein Wackelkandidat.

Die Installation des MySQL Python Modules erfordert das Downgrade der Pip Version. Niemand garantiert, dass zukünftige Versionen des Salt-Master mit einer älteren Version von Pip oder dem dann aktuellen MySQL Modul kompatibel sind.

All Salt Funktionen, welche eine Installation eines Moduls mit salt-pip erfordern, sollten Sie mit äußerster Versicht verwenden.

MySQL Job-Cache auf dem Master installieren

MariaDB oder MySQL Server auf dem Master installieren

apt install mysql-server
/opt/saltstack/salt/bin/python3 -m pip install pip==24.0
salt-pip install PyMySQL

Ab MySQL 5.7 oder MariaDB 10.2 wird der Datentyp JSON unterstützt, welcher für Salt sehr nützlich ist.

Benutzer und Datenbank anlegen

cat << EOF | mysql
CREATE USER IF NOT EXISTS 'salt'@'localhost' IDENTIFIED WITH mysql_native_password BY 'salt';
GRANT ALL ON salt.* TO 'salt'@'localhost';
CREATE DATABASE IF NOT EXISTS salt DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
EOF
cat << EOF | mysql salt
ALTER TABLE salt_returns MODIFY `return` json;
ALTER TABLE salt_returns MODIFY `full_ret` json;
ALTER TABLE jids MODIFY `load` json;
EOF

Oder die folgenden Zeilen per Copy & Paste übernehmen, um die Tabellen anzulegen.

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` json NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- 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` json NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` json 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;

Den MySQL-Job-Cache aktivieren

Datei /etc/salt/master.d/mysql.conf anlegen mit folgendem Inhalt

/etc/salt/master.d/mysql.conf
mysql.host: '127.0.0.1'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

Datei /etc/salt/master.d/jobcache.conf anlegen mit folgendem Inhalt

/etc/salt/master.d/jobcache.conf
master_job_cache: mysql

Den Salt-Master neu starten und dann mal ausprobieren

salt '*' status.loadavg
salt '*' status.diskusage
select alter_time, id,`return`->'$."/".available' 
from salt_returns 
where fun = 'status.diskusage';

select id,`return`->'$."5-min"' as loadAvg5, alter_time
from salt_returns 
where fun = 'status.loadavg';

select id,`full_ret`->'$.fun_args' as state,success,alter_time 
from salt_returns 
where fun="state.apply";

select id,`return`->'$."/".available' as available 
from salt_returns 
where fun = 'status.diskusage' 
having available>100;

Auslesen eines Job-Resultats, der z. B. mit der state.apply <STATE> --async ausgelöst wurde.

select 
  id,
  success,
  alter_time as date, 
  fun,
  `full_ret`->'$."fun_args"' as fun_args 
from salt_returns 
where jid="<JOB-ID>";

Tabellen gemäß per Copy-and-paste anlegen und anschließend den Datentyp JSON verwenden.

onedir-Instllation
https://docs.saltproject.io/en/latest/topics/jobs/external_cache.html
Doku