Ansible получает список файлов сертификации и проверяет срок их действия

В собственной оболочке bash, установленной на macOSТерминале (версии 4 по крайней мере ), включите опцию расширенного шаблона globstar, чтобы включить рекурсивное сопоставление шаблона во вложенных подкаталогах -.

shopt -s globstar nullglob
printf '%s\n' **/*.pdf

Параметр nullglobпредотвращает расширение шаблонов имен файлов, которые не соответствуют файлам, в нулевую строку, а не в самих себя. С globstarшаблон **, используемый в контексте расширения имени файла, будет соответствовать всем файлам и нулю или более каталогам и подкаталогам -.

Чтобы немного обезопасить себя, не устанавливая параметры оболочки в текущей оболочке, вы можете вместо этого установить ее в оболочке sub -

( shopt -s globstar nullglob; printf '%s\n' **/*.pdf ; )
2
05.07.2019, 11:03
1 ответ

Хорошо... мне потребовалось некоторое время, чтобы понять, почему ваш результат отладки не соответствует моим тестам. У вас там ошибка:

- debug: msg= "{{ result }}"

должно быть (обратите внимание на пропущенный пробел)

- debug: msg="{{ result }}"

а еще лучше быть (сделай одолжение для будущего ада отладки, прими полный синтаксис yaml)

- debug:
    msg: "{{ result }}"

Теперь, когда это исправлено, вы ясно увидите, что result.someWhateverCertValueне существует. Поскольку вы использовали цикл в своей задаче информации о сертификате, о каждом запуске отдельного модуля сообщается в списке :result.results[]

.

Если вы по-прежнему хотите использовать assert, вам придется снова зацикливаться на каждом результате:

- name: validate
  assert:
    that:
      - item.valid_at.point_1 | bool
      - item.valid_at.point_2 | bool
  loop: "{{ result.results }}"

Вышеупомянутое должно выполнить задание :assert будет выполняться для каждого результата информации о сертификате, и playbook завершится с ошибкой, если какая-либо из проверок не соответствует требованиям.

Однако результат может быть немного трудночитаемым. Я бы сделал это немного по-другому, чтобы получить лучший результат:

- name: find cerfication files & expiration dates
  hosts: my_host
  gather_facts: false

  tasks:
    - name: Find cert files under /etc/pki/tls/certs
      find:
        paths: /etc/pki/tls/certs
        file_type: file
        patterns: "*.crt"
        recurse: yes
        excludes: "localhost.crt"
      register: find_result

    - name: Check validity
      openssl_certificate_info:
        path: "{{ item.path }}"
        valid_at:
          point_1: "+1w"
          point_2: "+10w"
      register: cert_info
      loop: "{{ find_result.files }}"

    - name: Filter out valid certs
      set_fact:
        outdated_certs: "{{ cert_info | json_query('results[? !(valid_at.point_1) || !(valid_at.point_2)]') }}"

    - block:
        - name: Check that all certificates are valid
          assert:
            that:
              - outdated_certs | count == 0
      
      rescue:
        - name: Show info about outdated certs
          debug:
            msg: >-
              {{ { "Outdated Certs": outdated_certs | json_query("[].item.path") } }}
        
        - fail:
            msg: "Outdated certs found. See list above"

Последнее примечание :Я действительно не понимаю, зачем нужны две проверки даты. Поскольку вы считаете, что любой сбой даты делает сертификат недействительным, проверки самого дальнего должно быть достаточно. Я сохранил все тесты в своих примерах, чтобы вы знали, как их изменить, если я что-то упустил.

5
27.01.2020, 22:08

Теги

Похожие вопросы