Ansible
基於條件的ansible lineinfile
我在ansible中有以下劇本,其中“{{env}}”是一個動態變數:可以是sit,nft,prod等 - 基於使用者選擇。只有當選擇的環境是 nft 時才應該執行 play 中的動作。
- 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" }
我曾嘗試使用 when: “{{env}}” == “nft”,使用 set_facts… 但最後我仍然面臨上述錯誤。
使用 set_facts 我能夠克服錯誤,但是儘管 env=nft,操作被跳過。
我在這裡想念什麼?
謝謝!
當你寫:
when: env == nft
您是在說:“當變數
env
的值與變數的值匹配時nft
”。Ansible 告訴您沒有名為
nft
('nft' is undefined
) 的變數,這是準確的。如果要將變數與文字字元串進行比較,則需要引用字元串:
when: env == "nft"