基于条件的 ansible lineinfile

基于条件的 ansible lineinfile

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

相关内容