systemd-Dienst zum Festlegen des Standardspeicherpools für virsh

468
Alex Zel

Ich versuche, nach einer automatisierten Kickstart-Installation ein Skript beim Systemstart auszuführen. Das Skript ändert lediglich den Standardspeicherpool für KVM. Aber aus irgendeinem Grund werden die Änderungen nicht wirksam, wenn ich das Skript manuell ausführt oder systemctl start pool.servicealles systemctl enable pool.serviceausführt und der Standard-Pool festgelegt ist. Wenn ich jedoch über ks.cfg oder manuell nach der Installation laufe und dann neu starte, ändert sich nichts. Ich habe versucht, pool.service auf ein paar Typen einzustellen (normal, im Leerlauf usw.), aber nichts scheint zu helfen.

Ich arbeite an CentOS 7 x64.

ks.cfg

wget http://my_server/scripts/virsh/pool.service -O /etc/systemd/system/pool.service wget http://my_server/scripts/virsh/pool -O /usr/bin/pool chmod 755 /usr/bin/pool systemctl enable pool.service 

Datei pool.service

[Unit] Description=Set default storage pool  [Service] Type=idle ExecStart=/usr/bin/pool  [Install] WantedBy=multi-user.target 

Poolskriptdatei

#!/bin/bash /usr/bin/virsh pool-start default /usr/bin/virsh pool-destroy default /usr/bin/virsh pool-delete default /usr/bin/virsh pool-undefine default mkdir /srv/virtual_machines /usr/bin/virsh pool-define-as default --type dir --target /srv/virtual_machines /usr/bin/virsh pool-build default /usr/bin/virsh pool-start default /usr/bin/virsh pool-autostart default  systemctl disable pool.service 
0
Warum machst du das nicht einfach im Kickstart? Michael Hampton vor 7 Jahren 0
Ich habe es versucht, aber nach dem Neustart ändert sich der Standardpool nicht. Alex Zel vor 7 Jahren 0

1 Antwort auf die Frage

1
grawity

Nicht verwenden Type=idle- es wurde speziell für die Anmeldeaufforderung hinzugefügt und ist ungefähr so ​​zuverlässig wie ein Würfelwurf. Erklären Sie die Abhängigkeiten einfach explizit. (Für ein kurz laufendes Skript Type=oneshotist es richtig.)

Ihr Dienst kommuniziert mit libvirtd using virsh, was bedeutet, dass er nur funktionieren kann, wenn libvirtd bereits läuft. Deshalb:

[Unit] Requires=libvirtd.service After=libvirtd.service 

(Passen Sie dies an, wenn Ihre Distribution den Dienst anders aufruft.)

Selbst deaktivierende Dienste sind möglicherweise nicht die beste Idee. Stattdessen können Sie Folgendes verwenden:

[Unit] ConditionPathExists=!/srv/virtual_machines 
Das hat super geklappt, ich wollte versuchen, es in eine Schleife zu bringen, aber diese Methode ist dank der Großzügigkeit ein ziemlicher Schlag Alex Zel vor 7 Jahren 0