
「{{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
」を意味します。
nft
Ansibleは、()という名前の変数がないことを知らせます'nft' is undefined
。正しいです。
変数を変数と比較したい場合リテラル文字列、文字列を引用する必要があります。
when: env == "nft"