我在 ansible 中有以下剧本,其中“{{env}}”是动态变量:可以是 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 - name : 更改参数 nft\n ^ 此处\n" }
我尝试过使用when:“{{env}}”==“nft”,使用set_facts...但最终我仍然面临上面的错误。
使用 set_facts 我能够克服该错误,但是尽管 env=nft,但操作被跳过。
我在这里缺少什么?
谢谢!
答案1
当你写:
when: env == nft
你是说:“当变量的值env
与变量的值匹配时nft
”。
Ansible 告诉您没有名为nft
( 'nft' is undefined
) 的变量,这是准确的。
如果你想将一个变量与一个变量进行比较文字字符串,您需要引用该字符串:
when: env == "nft"