"{{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
"를 의미합니다.
nft
Ansible은 ( ) 라는 이름의 변수가 없다고 알려줍니다 'nft' is undefined
. 정확합니다.
변수를 변수와 비교하고 싶다면리터럴 문자열, 문자열을 인용해야 합니다.
when: env == "nft"