여러 줄 레지스터에 문자열이 없으면 가능한 작업을 실행합니다.

여러 줄 레지스터에 문자열이 없으면 가능한 작업을 실행합니다.

구성이 누락된 경우에만 레지스트리 출력에서 ​​문자열을 검색하여 네트워크 장치의 구성을 푸시하고 싶습니다. 먼저 이 작업을 실행하여 대상 장치에서 실행 중인 구성을 기록합니다.

  # Collect information about the available configuration
- name: Execute show command
  cisco.ios.ios_command:
    commands: 
    - show runn | in repository ## to find if the repository is already configured
  register: output

출력 레지스터를 사용하여 다음 작업을 조건부로 실행하고 싶습니다.

- name: Push repository configuration
  cisco.ios.ios_command:
    commands:
    - conf t
    - repository MAIN
    - url ftp://{{ repository_main }}
    - user {{ repository_main_user}} password plain {{ repository_main_password }}
    - exit
    - repository SECONDARY
    - url ftp://{{ repository_sec }}/
    - user {{ repository_sec_user}} password plain {{ repository_sec_password }}
    - end
  when: 'not "MAIN" in {{ output.stdout }} and not "SECONDARY" in {{ output.stdout }}'

Output.stdout은 다음과 같습니다.

TASK [print output] ************************************************************
Saturday 19 November 2022  06:45:44 +0000 (0:00:06.370)       0:00:06.409 ***** 
ok: [node1] => 
  msg:
  - |-
    repository MAIN
    --
    repository SECONDARY

네트워크 장치에서 ansible 사용자의 세션을 확인할 때 저장소를 다시 구성하는 것을 볼 수 있는데 이는 내가 원하는 것이 아닙니다. 이를 어떻게 제어할 수 있습니까? 실제로 stdout은 여러 줄 출력의 요소입니까?

답변1

수리 조건

      when:
        - "'MAIN' not in output.stdout"
        - "'SECONDARY' not in output.stdout"

시험을 받다

- hosts: localhost

  tasks:

    - debug:
        msg: OK
      when:
        - "'MAIN' not in output.stdout"
        - "'SECONDARY' not in output.stdout"
      vars:
        output:
          stdout: XY

    - debug:
        msg: OK
      when:
        - "'MAIN' not in output.stdout"
        - "'SECONDARY' not in output.stdout"
      vars:
        output:
          stdout: XY MAIN

    - debug:
        msg: OK
      when:
        - "'MAIN' not in output.stdout"
        - "'SECONDARY' not in output.stdout"
      vars:
        output:
          stdout: XY SECONDARY

주어진

PLAY [localhost] *****************************************************************************

TASK [debug] *********************************************************************************
ok: [localhost] => 
  msg: OK

TASK [debug] *********************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************
skipping: [localhost]

PLAY RECAP ***********************************************************************************
localhost: ok=1    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

관련 정보