Ansible - 누락된 항목에 대한 테스트 명령 출력

Ansible - 누락된 항목에 대한 테스트 명령 출력

특정 명령의 출력에 나타날 것으로 예상되는 문자열 목록이 있습니다. 작업을 테스트하고 (하나 이상의 항목이 포함되지 않은 경우) 실행하기 위한 ansible 스크립트를 어떻게 생성할 수 있습니까?

따라서 내 ansible 스크립트는 다음과 같습니다.

vars:
  musthave:
    - value1
    - value2
tasks:
- name: Check the configured values
  command: "cat configfile"
  register: current_configuration
  changed_when: false

- set a variable if one or more of the musthave's are missing in current_configuration.stdout
  ...

- name: Execute task to reconfigure system
  command: "reconfigure..."
  when: true = variable

그럼 비슷한 것도 있나요?

variable = false
for s in musthave:
    if not s in current_configuration.stdout:
        variable |= true

답변1

이 문제를 해결하려면 중간 변수가 필요하지 않습니다. ~에 따르면앤서블 문서, difference필터 선택에 있어야 하는 값 목록과 구성 파일의 출력 간의 차이입니다.

변하기 쉬운:
  필수품:
    - 값 1
    - 값 2

일:
- 이름 : 구성값 확인
  명령: "seq -f '값%g' 2 1 5"
  등록: 현재 구성
  변경 시간: 거짓

- 디버그: var=current_configuration.stdout_lines

- 이름 : 시스템 재구성 작업을 수행합니다.
  디버그: msg="{{반드시 있어야 합니다|차이(current_configuration.stdout_lines)}}"
  시기: 필수 차이점(current-config.stdout_lines)

debug마지막 작업은 차이가 비어 있지 않은 경우에만 실행됩니다.

답변2

나의 초기 요청은 나타날 수 있는 특정 값이 있는지 명령 출력을 확인하는 것이었습니다. 작업 목록 준비의 difference한 가지 단점 은 양방향의 차이를 계산할 수 있다는 것입니다.

이제 누락된 항목뿐만 아니라 초과 항목도 확인할 수 있습니다.

- name: print hostvars
  debug:
    var: hostvars[{{ ansible_host }}]['certificate_domains']

- name: print certificate
  delegate_to: silver.fritz.box
  command: "openssl x509 -in /home/hiran/homeserver.crt -noout -text"
  register: certificate

- name: grab subject's common name and alternative names
  set_fact:
    commonName: "{{ certificate.stdout | regex_search('Subject.*CN\\s=\\s([\\.a-zA-Z]+)', '\\1') }}"
    altNames: "{{ certificate.stdout | regex_findall('DNS:([\\.a-zA-Z]+)') }}"
- name: prepare the lists so they can be subtracted from each other
  set_fact:
    contained: "{{ (commonName + altNames) | unique }}"
    musthave: "{{ hostvars[{{ ansible_host }}]['certificate_domains'] | unique }}"
- name: calculate differences
  set_fact:
    missing: "{{ musthave | difference(contained) }}"
    toomuch: "{{ contained | difference(musthave) }}"

- name: show difference
  debug:
    msg: Something is wrong
  when: (missing | length)>0 or (toomuch | length)>0

관련 정보