Ansible

基於條件的ansible lineinfile

  • August 16, 2022

我在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"

引用自:https://unix.stackexchange.com/questions/713806