Мне нужно написать часть программы для удаления виртуальных машин из kvm. Это написано с тканью для питона http://www.fabfile.org/. Итак, мне нужно подключиться к хосту kvm, проверить, работает ли vm, выключить его и удалить.
Проблема возникла, когда я попытался поставить цикл while, содержащий оператор if. Кажется, он не работает должным образом, и даже если состояние машины «закрыто», программа не идет дальше, просто повторите до 5 раз то же самое, если утверждение.
Я пробовал разные типы сравнения строк, например:
- если "закрыть" не в
- == "Закрой"
-! = "закрыто"
- Я попытался также поставить "закрыто" в качестве переменной
Он будет выполняться заданием Дженкинса, и в этом коде я вижу только цикл while, а когда он насчитывает до 5, просто идите дальше.
running
Domain test-test01.test is being shutdown
running
shut
shut
shut
shut
>>> VM not found on this host, but this is fine 33333
Это код, который кажется нормальным, но не работает. Connection
- это только одна из особенностей ткани, которая отлично работает. Он работает как соединение через ssh с некоторыми хостами. Вы можете увидеть выше, какие ответы я получаю в терминале с кодом ниже.
removed = False
if vmhosttype == "KVM":
with Connection(vmhostname) as c:
if c.sudo("virsh list --all | grep {0}".format(shortfqdn), warn=True, hide="stdout").failed:
print(">>> VM not found on {0}.".format(vmhostname))
else:
print(">>> VM found on {0}.".format(vmhostname))
if c.sudo("virsh list --all | grep {0} | awk '{{ print $3 }}'".format(shortfqdn)) == "shut":
c.sudo("virsh undefine {0} --remove-all-storage".format(shortfqdn), hide=hide)
removed = True
else:
c.sudo("virsh shutdown {0}".format(shortfqdn), hide=hide)
i = 0
while (i < 5):
if c.sudo("virsh list --all | grep {0} | awk '{{ print $3 }}'".format(shortfqdn)) != "shut":
time.sleep(30)
i += 1
else:
c.sudo("virsh undefine {0} --remove-all-storage".format(shortfqdn), hide=hide)
removed = True
i = 5