繁体   English   中英

ansible_facts 上的未定义变量

[英]undefined variable on ansible_facts

在继续我的剧本之前,我正在尝试等待服务启动。 我使用下面的文档作为起点。 无论我使用什么服务来测试它,我都会收到相同的错误消息。 我尝试在调试 output 和相同的 output 中输入不同的知名服务。我已经打印出整个 ansible_facts.services 并验证我想要运行它的服务在那里。 我错过了什么?

https://sleeplessbeastie.eu/2022/01/12/how-to-wait-until-service-is-running-inside-ansible-playbook/

致命的:[rke-master01]:失败:=> {“msg”。 “该任务包含一个带有未定义变量的选项:错误是。‘dict object’没有属性‘rke2-server’\n\n错误似乎在‘/Users/jolim/Documents/Ansible/roles/rke2/ tasks/main:yml',第 139 行,第 7 列。但可能\n位于文件的其他位置,具体取决于具体的语法问题:\n\n违规行似乎是:\n\n\n - name: services dump\ n ^ 这里\n"}

- name: "Wait until rke2-server service is running"
  ansible.builtin.service_facts:
  register: temp__service_facts
  # until: temp__service_facts.ansible_facts.services.rke2-server.state == 'running'
  # retries: 10
  # delay: 6

- name: services dump
  debug:
    msg:  "{{ temp__service_facts.ansible_facts.services['rke2-server'].state }}"

rke2-server所在服务的output为:

"rke2-agent.service": {
    "name": "rke2-agent.service",
    "source": "systemd",
    "state": "stopped",
    "status": "disabled"
},
"rke2-server.service": {
    "name": "rke2-server.service",
    "source": "systemd",
    "state": "running",
    "status": "enabled"
}, 

当你写这个时:

msg:  "{{ temp__service_facts.ansible_facts.services[ssh] | to_nice_json }}"

您正在尝试使用名为ssh的变量的值在temp__service_facts.ansible_facts.services字典中查找值。 没有这样的变量,所以你可以'ssh is undefined'错误。

要引用文字字符串,请将其放在引号中:

msg:  "{{ temp__service_facts.ansible_facts.services['ssh'] | to_nice_json }}"

或者继续使用点符号 isstead:

msg:  "{{ temp__service_facts.ansible_facts.services.ssh | to_nice_json }}"

这两种语法是等价的。

发现了问题。 看起来 rke2-server 被称为 rke2-server.service 所以我必须使用(services['rke2-server.service'])来让它工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM