Ansible-role-nginx-config: إجراء التنظيف لا ينظف

تم إنشاؤها على ٢٣ مارس ٢٠٢١  ·  10تعليقات  ·  مصدر: nginxinc/ansible-role-nginx-config

صف الخلل

الكود الذي يجب أن يؤدي إلى تنظيف conf.d / *. لا يتم تنظيفه

لإعادة إنتاج

خطوات إعادة إنتاج السلوك:

nginx_config_cleanup     : '{{ my_cleanup }}'

    # this clean up only happens if the above variable is true
    nginx_config_cleanup_paths:
      - directory:
          - /etc/nginx/conf.d
        recurse: false
    nginx_config_cleanup_files:
      - /etc/nginx/conf.d/default.conf
TASK [nginxinc.nginx_config : Find NGINX config files] ************************************************************************************************************************************************************************************************************************
ok: [testing-snap05.MYDOMAIN.TLD] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': False}) => {"ansible_loop_var": "item", "changed": false, "examined": 13, "files": [{"atime": 1616512425.5879788, "ctime": 1616512425.0159645, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652034, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616512424.6879563, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLDX.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 508, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, {"atime": 1616511920.0872648, "ctime": 1616511919.343246, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652037, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616511918.9712367, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 507, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, {"atime": 1616512481.8013923, "ctime": 1616512481.229378, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652039, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616512480.8773692, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLDZ.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 508, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, {"atime": 1616512450.800613, "ctime": 1616512450.1845973, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652038, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616512449.8325884, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLDY.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 508, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}], "item": {"directory": ["/etc/nginx/conf.d"], "recurse": false}, "matched": 4, "msg": ""}                                                                                                                                                                                          

TASK [nginxinc.nginx_config : Remove NGINX config files] **********************************************************************************************************************************************************************************************************************
ok: [testing-snap05.MYDOMAIN.TLD] => (item=/etc/nginx/conf.d/default.conf) => {"ansible_loop_var": "item", "changed": false, "item": "/etc/nginx/conf.d/default.conf", "path": "/etc/nginx/conf.d/default.conf", "state": "absent"}

سلوك متوقع

توقعت حذف /etc/nginx/conf.d/*.conf قبل إنشاء الذباب الجديد. لكن يتم حذف default.conf فقط.

بيئتك:

ansible-role-nginx-config من git
nginxinc.nginx ، 0.19.1
غير صالح: 2.9.6 + dfsg-1
أوبونتو 20.04.2018

bug

ال 10 كومينتر

مسكة جيدة. الاختبارات لم تحسب أي شيء بخلاف حذف default.conf . يجب أن يعالج PR الوارد هذا الخطأ بالإضافة إلى إضافة حالة اختبار مناسبة لدليل كامل يتم تنظيفه.

بعد git pull ، لا يزال غير نظيف بالنسبة لي. ينظف فقط default.conf. تم تعيين تكرار المحاولة على "صواب وخطأ".

(item=/etc/nginx/conf.d/default.conf) => {"ansible_loop_var": "item", "changed": false, "item": "/etc/nginx/conf.d/default.conf", "path": "/etc/nginx/conf.d/default.conf", "state": "absent"}

بعد تحديث Jinja2 ، لا يزال التنظيف لا يعمل. يجب علينا إعادة فتح هذا؟

TASK [nginxinc.nginx_config : Find NGINX config files] ************************************************************************************************************************************************************************************************************************
ok: [testing-snap05.MYDOMAIN.TLD] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': True}) => {"ansible_loop_var": "item", "changed": false, "examined": 7, "files": [{"atime": 1616759901.1814494, "ctime": 1616759896.8093383, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652060, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616759896.5933328, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD_adhoc.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 2, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, {"atime": 1616777440.7914264, "ctime": 1616777440.3514154, "dev": 64780, "gid": 0, "gr_name": "root", "inode": 652158, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1616777440.13941, "nlink": 1, "path": "/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 1255, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}], "item": {"directory": ["/etc/nginx/conf.d"], "recurse": true}, "matched": 2, "msg": ""}                                                                                                                                                                                                                                        

TASK [nginxinc.nginx_config : Remove NGINX config files] **********************************************************************************************************************************************************************************************************************

الاختبارات الجديدة تمر ، لذا لست متأكدًا تمامًا من أن هذا خطأ في الدور. حاولت أيضًا استخدام نفس اسم الملف كما في المثال الخاص بك وتم حذفه بشكل صحيح.


اختبار الجزيء

TASK [ansible-role-nginx-config : Find NGINX config files] *********************
ok: [ubuntu-bionic] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': False})
ok: [centos-7] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': False})
ok: [debian-buster] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': False})
ok: [alpine-3.10] => (item={'directory': ['/etc/nginx/conf.d'], 'recurse': False})

TASK [ansible-role-nginx-config : Remove NGINX config files] *******************
changed: [centos-7] => (item=/etc/nginx/conf.d/default.conf)
changed: [debian-buster] => (item=/etc/nginx/conf.d/default.conf)
changed: [alpine-3.10] => (item=/etc/nginx/conf.d/default.conf)
changed: [ubuntu-bionic] => (item=/etc/nginx/conf.d/default.conf)
changed: [centos-7] => (item=/etc/nginx/conf.d/mock.conf)
changed: [debian-buster] => (item=/etc/nginx/conf.d/mock.conf)
changed: [alpine-3.10] => (item=/etc/nginx/conf.d/mock.conf)
changed: [ubuntu-bionic] => (item=/etc/nginx/conf.d/mock.conf)
changed: [centos-7] => (item=/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf)
changed: [ubuntu-bionic] => (item=/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf)
changed: [debian-buster] => (item=/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf)
changed: [alpine-3.10] => (item=/etc/nginx/conf.d/testing-snap05.staging.MYDOMAIN.TLD.conf)
ok: [centos-7] => (item=/etc/nginx/conf.d/default.conf)
ok: [ubuntu-bionic] => (item=/etc/nginx/conf.d/default.conf)
ok: [debian-buster] => (item=/etc/nginx/conf.d/default.conf)
ok: [alpine-3.10] => (item=/etc/nginx/conf.d/default.conf)

هل حاولت التحديث إلى أحدث إصدار من Ansible؟ ربما تم تحديث الوحدات المستخدمة خلف الكواليس منذ Ansible 2.9.6 . (الحد الأدنى المطلق للإصدار Ansible الذي يجب أن تستخدمه هذه الأيام هو 2.9.10 نظرًا لدعمه الأصلي لمجموعات Ansible.)

لدي Ansible 2.9.6 وهو الأحدث المتاح لأحدث Ubuntu LTS ، وهو Ubuntu 20.04.

يمكنك تثبيت أحدث إصدار باستخدام pip أو مستودع حزم Ansible https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing -ansible-on-ubuntu. بخلاف ذلك ، ستظل عالقًا مع أحدث إصدار متاح في مستودع حزم Ubuntu ، والذي لا يكون عادةً مثاليًا.

حصلت على هذا الخطأ لي أيضا. أحدث إصدار متاح من brew :

 > ansible --version
ansible [core 2.11.3]

مع التصحيح

  register: nginx_config_files

- debug:
    msg: "{{ nginx_config_files.files  }}"

- name: Remove NGINX config files

انا احصل

TASK [nginxinc.nginx_config : Find NGINX config files] *********************************************************************************
ok: [ansible-test] => (item={'directory': ['/etc/nginx/conf.d', '/etc/nginx/snippets'], 'recurse': True})

TASK [nginxinc.nginx_config : debug] ***************************************************************************************************
fatal: [ansible-test]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'files'\n\nThe error appears to be in '...../roles/nginxinc.nginx_config/tasks/config/cleanup-config.yml': line 11, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- debug:\n  ^ here\n"}

كما ذكرت في تعليقات سابقة ، هناك اختبارات صريحة لحالة الاستخدام هذه الآن ، وقد اجتازوا جميعًا (https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/cleanup_module/ converge.yml). قد تكون هناك بعض الحالات المتطورة التي لا تزال تتسبب في فشل الدور ، لكنني سأحتاج إلى مزيد من التفاصيل حتى أتمكن من إعادة إنتاجه بنفسي. مما يمكنني قوله في ضوء مخرجات مهمتك ، قد تكون المشكلة هي أن الكلمة الأساسية recurse تنتمي إلى كل عنصر من عناصر قاموس الدليل ، وليس خارج تلك العناصر (تحقق من اختبار Molecule الذي ربطته سابقًا للحصول على مزيد من التفاصيل).

ملاحظة: nginx_config_files.files غير مستخدم (https://github.com/nginxinc/ansible-role-nginx-config/blob/main/tasks/config/cleanup-config.yml#L11-L17) 😄

alessfg نعم ، لقد وجدت هذا في الواقع. تعال إلى هنا لتكتب عن الحل الخاص بي :)
تكمن المشكلة في أن الإصدار الأخير المنشور في Galaxy (والذي أستخدمه في كتيبات التشغيل الخاصة بي) يحتوي على إصدار 0.3.3. هذه التغييرات التي تكتب عنها غائبة في هذه العلامة ولا تظهر إلا عند main . لذلك قمت بتحويل المصدر إلى مستودع git للمتطلبات.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات