条件语句中的ansible连接字符串和变量

条件语句中的ansible连接字符串和变量,ansible,Ansible,我不知道如何在条件中连接字符串和{{item}}。我不确定这是否可行或是否得到支持 这是我的任务块: - name: enable repos command: "subscription-manager repos --enable {{ item }}" when: enable_repo_{{ item }} == 'yes' with_items: - rhel-7-server-rpms - rhel-7-server-optional-rpms -

我不知道如何在条件中连接字符串和{{item}}。我不确定这是否可行或是否得到支持

这是我的任务块:

- name: enable repos
  command: "subscription-manager repos --enable {{ item }}"
  when: enable_repo_{{ item }} == 'yes'
  with_items:
    - rhel-7-server-rpms
    - rhel-7-server-optional-rpms
    - rhel-7-server-extras-rpms
    - rhel-7-server-satellite-tools-6.2-rpms
    - rhel-7-server-thirdparty-oracle-java-rpms
    - jws-3-for-rhel-7-server-rpms
我得到的错误是:

TASK [satellite_client : enable repos] *****************************************
fatal: [10.187.15.31]: FAILED! => {"failed": true, "msg": "The conditional check 'enable_repo_item == 'yes'' failed. The error was: error while evaluating conditional (enable_repo_item == 'yes'): 'enable_repo_item' is undefined\n\nThe error appears to have been in '/home/marcp/git/satellite_client/tasks/main.yml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: enable repos\n  ^ here\n"}

PLAY RECAP *********************************************************************
10.187.15.31               : ok=1    changed=0    unreachable=0    failed=1

如何将字符串与{{item}}连接起来,或者我应该以不同的方式连接?

当被认为是一个Jinja2表达式时,
中的条件(因此您可以认为它隐式地包含在
{…}
中,因此无法在其中打开另一个Jinja2表达式)

您可以使用
vars
字典并将变量名称作为串联字符串传递:

when: vars['enable_repo_' + item] == 'yes'

等待Konstantin醒来并抱怨使用
vars
字典没有记录;)我试过了。代码将执行,但任务将被跳过,即使在defaults/main.yml中设置了“enable_repo_xxx:yes”。我怀疑串接的结果被当作字符串。使用
debug
模块和/或
-vvv
进行故障排除。作为
vars
索引传递的串接结果应该是字符串。无论如何,我可以将串接的结果作为变量处理,因此,它的计算结果是它设置的任何值?我建议您重构代码并使
启用\u repos
列表而不是多个变量,这将使您的playbook代码更干净。谢谢。我从freenode#ansible那里得到了同样的建议