Хотя цикл со сравнением строк не работает правильно - PullRequest
0 голосов
/ 04 мая 2019

Мне нужно написать часть программы для удаления виртуальных машин из 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

1 Ответ

0 голосов
/ 07 мая 2019

Проблема была в stdout, который был пустым.

...