test runs before cloud-init ends
Po ostatniej zmianie, polegającej na dodaniu package_update
do cloud-inita spawnowanej maszynki (#32 (closed)), w dość dużej liczbie jobów na centos7 i sporadycznie na ubuntu dzieje się tak, że playbook z testem startuje zanim cloud init się skończy. Gdy playbook próbuje coś zainstalowac napotyka na filelock (yum lockfile is held by another process
) i powoduje fail testu.
Rozwiązaniem powyższego problemu byłoby dodanie sprawdzania statusu cloud-inita (cloud-init status
) i start testu dopiero gdy cloud-init zakończy swoje zadania (status: done
). Poc powyższego rozwiązania: dodałem w playbookach z testami jako pierwszy task:
- name: "check cloud-init status"
become: yes
command: "cloud-init status"
changed_when: no
register: "_test_docker_cloud_init_status"
until: "_test_docker_cloud_init_status.stdout == 'status: done'"
retries: 50
delay: 1
i zapobiegł on failowaniu jobów.
Propozycja implementacji: dodanie w spawner.py
funkcji analogicznej do _check_ssh
, która będzie sprawdzać czy stdout polecenia cloud-init status
wywołanego przez exec_command
(z pakietu paramiko) na spawnowanym serwerze zwraca status: done
.