action is not idempotent
Podczas kolejnych testów, gdy odpaliłem akcję dwukrotnie na tym samym serwerze, okazało się, że nie jest idempotentna. Problem występuje w obrębie bloku (L79-119) w pliku tasks/configure.yml
. Podczas drugiego wywołania akcji, gdy certyfikaty są już na serwerze, blok powinien zostać pominięty, a zamiast tego wyskakuje błąd:
fatal: [test]: FAILED! => {"msg": "The conditional check '_result_certbot_current_certificates_files.results | map(attribute='stat.exists') | list is not all' failed. The error was: error while evaluating conditional (_result_certbot_current_certificates_files.results | map(attribute='stat.exists') | list is not all): 'dict object' has no attribute 'stat'\n\nThe error appears to be in '/home/niwa19b/Projects/certbot/tasks/configure.yml': line 105, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n always:\n - name: \"collect Certbot logs\"\n ^ here\n"}
Zidentyfikowałem, że problemem jest zmienna _result_certbot_current_certificates_files
, która jest "deklarowana" dwuktrotnie (raz poza blokiem, a raz wewnątrz). Rozwiązaniem jest nadanie zmiennej wewnatrz bloku odrębnej nazwy. IMHO mile widziane byłoby też dodanie testu idempotentności.