Skip to content

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.