Syntax Ansible:如何使用另一个变量中的变量获取动态服务状态

Syntax Ansible:如何使用另一个变量中的变量获取动态服务状态,syntax,ansible,yaml,Syntax,Ansible,Yaml,我是Ansible的新手,正在尝试获取一个服务状态,其中服务名称是动态的,并且在剧本中由set_fact设置 如何在另一个变量中构建一个变量? 我希望我能用这样的东西来显示我的服务状态: {{ ansible_facts.services['{{ servicename }}'].state }} 但它不起作用 所以我用VAR试过这种方法: - name: set service name ansible.builtin.set_fact: servicename:

我是Ansible的新手,正在尝试获取一个服务状态,其中服务名称是动态的,并且在剧本中由set_fact设置

如何在另一个变量中构建一个变量? 我希望我能用这样的东西来显示我的服务状态:

{{ ansible_facts.services['{{ servicename }}'].state }} 
但它不起作用

所以我用VAR试过这种方法:

  - name: set service name
    ansible.builtin.set_fact:
      servicename: "'myservice'"
    when: ansible_distribution_major_version == "7"

  - name: print service state
    debug: msg={{ vars['ansible_facts.services[' + servicename + '].state'] }}
    vars:
      servicename: "{{ servicename }}"
我得到了以下错误:

fatal: [myhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute u\"ansible_facts.services['myservice'].state\"\n\nThe error appears to be in '/etc/ansible/playbook/myplaybook.yaml': line 20, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: print service state\n    ^ here\n"}
当以下各项工作正常时:

  - name: print service state
    debug:
      msg: "{{ ansible_facts.services['myservice'].state }}"

{…}
块中,可以直接访问变量。在我看来,你可以在第二个任务中去掉
ansible\u facts
以及变量赋值

这将满足您的需求(正如Zeitounator所写):


{{ansible\u facts.services[servicename].state}
非常感谢!它是有效的,我花了几个小时在这上面,当它如此明显的时候。
- hosts: localhost
  vars:
    services:
      myservice:
        state: foo
  tasks:
    - name: set service name
      ansible.builtin.set_fact:
        servicename: "myservice"

    - name: print service state
      debug:
        msg: "{{ services[servicename].state }}"