systemd service para configurar o conjunto de armazenamentos padrão do virsh

0

Estou tentando executar um script na inicialização do sistema após uma instalação automatizada do kickstart, o script apenas altera o conjunto de armazenamentos padrão para o KVM. Mas, por algum motivo, as alterações não entram em vigor, se eu executar o script manualmente ou executar systemctl start pool.service , tudo funciona bem e o pool padrão está definido, mas se eu executar systemctl enable pool.service via ks.cfg ou manualmente após a instalação e depois reboot, nada muda. Eu tentei definir pool.service para alguns tipos (normal, ocioso, etc ...), mas nada parece ajudar.

Estou trabalhando no 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

arquivo pool.service

[Unit]
Description=Set default storage pool

[Service]
Type=idle
ExecStart=/usr/bin/pool

[Install]
WantedBy=multi-user.target

arquivo de script do pool

#!/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
    
por Alex Zel 13.05.2016 / 13:43

1 resposta

1

Não use Type=idle - ele foi adicionado especificamente para o prompt de login e é tão confiável quanto um teste de dados. Apenas declare as dependências explicitamente. (Para um script de execução curta, Type=oneshot está certo.)

Seu serviço se comunica com o libvirtd usando virsh , o que significa que ele só funciona quando o libvirtd já está em execução. Portanto:

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

(Ajuste se a sua distribuição chamar o serviço de forma diferente.)

Além disso, os serviços de auto-desativação podem não ser a melhor ideia. Em vez disso, você poderia usar:

[Unit]
ConditionPathExists=!/srv/virtual_machines
    
por 13.05.2016 / 15:09