조건 기반 ansible lineinfile

조건 기반 ansible lineinfile

"{{env}}"는 동적 변수인 ansible에 다음 플레이북이 있습니다. 사용자 선택에 따라 sat, nft, prod 등이 될 수 있습니다. 극중 액션은 선택한 환경이 nft일 때만 수행되어야 합니다.

- hosts: "{{ host }}"
  remote_user: "{{ user }}"

  vars:
    home_dir: "/home/{{ user }}"
    env: "{{ env }}"

  tasks:
    - name: backup file
      copy:
        src: "/home/dtcd/gabi/FF_environmentConfig.ini"
        dest: "/home/dtcd/gabi/FF_environmentConfig.ini_orig"
        remote_src: yes

    - name: change params nft
      lineinfile:
        path: "/home/dtcd/gabi/FF_environmentConfig.ini"
        regexp: '{{item.From}}'
        line: '{{item.To}}'
        state: present
      with_items:
        - { From: 'FF_AMQProcessingMessageTimeoutInMilliseconds=5000', To: 'FF_AMQProcessingMessageTimeoutInMilliseconds=10000' }
        - { From: 'FF_solutionDetectionServiceProcess_FF_ALL_FF_customFeedChannel_ConcurrentThreads=1', To: 'FF_solutionDetectionServiceProcess_FF_ALL_FF_customFeedChannel_ConcurrentThreads=10' }
      when: env == nft

이제 플레이북을 실행하면 오류가 발생하고 다음 메시지가 표시됩니다.

치명적: [servera.com]: 실패했습니다! => { "msg": "'env == nft' 조건 확인에 실패했습니다. 오류: 조건 평가 오류(env == nft): 'nft'가 정의되지 않았습니다.\n\n오류는 '/ansible에 있는 것 같습니다. -playbook/ 1-sed.yml': 15행, 7열, 그러나 \n은 정확한 구문 문제에 따라 파일의 다른 곳에 있을 수 있습니다. \n\n문제의 행은 다음과 같습니다. \n\n\n - 이름: 매개변수 변경 nft\n ^여기\n" }

set_facts를 사용하여 when: "{{env}}" == "nft"를 사용해 보았지만 여전히 위의 오류가 발생합니다.

set_facts를 사용하여 오류를 극복할 수 있었지만 env=nft에도 불구하고 작업을 건너뛰었습니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

감사해요!

답변1

당신이 쓸 때 :

      when: env == nft

"변수 값이 env변수 값과 일치할 때 nft"를 의미합니다.

nftAnsible은 ( ) 라는 이름의 변수가 없다고 알려줍니다 'nft' is undefined. 정확합니다.

변수를 변수와 비교하고 싶다면리터럴 문자열, 문자열을 인용해야 합니다.

      when: env == "nft"

관련 정보