条件ベースの 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あるようです。 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"

おすすめ記事