为什么一个特殊的 ansible 变量是未定义的?

Why would a special ansible variable be undefined?

我最近一直在研究 CD 的 anible 脚本,并开始 运行 进入一个问题。当我 运行 最近的 YAML 文件时,我得到一个错误

fatal: [Windows-AWS]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible_play_name' is undefined\n\nThe error appears to have been in 'x.yml': line 32, 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: Add RabbitMQ user\n ^ here\n"}

有问题的变量包含在如下代码中:

- name: Add RabbitMQ user
  win_shell: |
    Set-Location "C:\Program Files\RabbitMQ Server\rabbitmq_server-{{rabbitmq_version}}\sbin"
    $users = .\rabbitmqctl.bat list_users

    if($users -Like "*{{ansible_play_name}}*")
    {
      Write-Host "Skipping: '{{ansible_play_name}}' already exists."
    }
    else
    {
      .\rabbitmqctl.bat add_user {{ansible_play_name}} "{{rabbitmq_password}}"
      .\rabbitmqctl.bat set_permissions {{ansible_play_name}} ".*" ".*" ".*"
      .\rabbitmqctl.bat set_user_tags {{ansible_play_name}} administrator
    }
  register: rabbit_add_user_out
  changed_when: '"Adding user" in rabbit_add_user_out.stdout'
  failed_when: '"Error" in rabbit_add_user_out.stderr'

有人对它为什么不能获取这个值有任何建议吗? 运行ning 来自的剧本也将事实收集设置为 true,因此应该分配给它

ansible_play_name - (当前执行的play的名字)是2.8新增的。可能你的版本比较低