【问题标题】:ansible use tags but register variable is emptyansible使用标签但寄存器变量为空
【发布时间】:2020-04-07 10:03:28
【问题描述】:

我想执行一个带有标签的剧本,因为我想执行部分脚本,但是寄存器中存储的变量是空的。

---
- hosts: node
  vars:
    service_name: apache2
  become: true

- name: Start if Service Apache is stopped
  shell: service apache2 status | grep Active | awk -v N=2 '{print $N}'
  args:
    warn: false
  register: res
  tags:
    - toto

- name: Start Apache because service was stopped
  service:
    name: "{{service_name}}"
    state: started
  when: res.stdout == 'inactive'
  tags:
    - toto

- name: Check for apache status
  service_facts:
- debug:
    var: ansible_facts.services.apache2.state
  tags:
    - toto2

$ ansible-playbook status.yaml -i hosts --tags="toto,toto2"


PLAY [nodeOne] ***************************************************************************
TASK [Start if Service Apache is stopped] ************************************************
changed: [nodeOne]
TASK [Start Apache because service was stopped] ******************************************
    skipping: [nodeOne]
TASK [debug] *****************************************************************************
   ok: [nodeOne] => {
      "ansible_facts.services.apache2.state": "VARIABLE IS NOT DEFINED!"
}

在脚本结束时,我没有得到 apache 状态的输出。

【问题讨论】:

  • 根据您所在的发行版(或针对其运行),服务名称可能不是您认为的...您是否尝试查看 ansible_facts.services 以查看 apache2诸如此类的功能?
  • 点评来源: 请多描述一下你想要达到的目标。正如现在所描述的那样,很难理解您到底在要求什么。
  • 对不起,我的意思是当我执行脚本时,我得到了 "ansible_facts.services.apache2.state": "VARIABLE IS NOT DEFINED!"我想让 apache 正在运行或停止,没有定义

标签: ansible tags


【解决方案1】:

问:“寄存器中存储的变量是空的。”

答:任务service_facts 中缺少标签。因此,此任务被跳过,ansible_facts.services 未定义。例如修复它

- name: Check for apache status
  service_facts:
  tags: toto2


笔记

1) 仅使用一个标签,不需要声明一个带有一个标签的列表。

2) Idempotency 的概念使条件变得多余。

如果执行一次的结果与没有任何干预动作的重复执行的结果完全相同,则该操作是幂等的。

模块service 是幂等的。例如下面的任务

- name: Start Apache
  service:
    name: "{{ service_name }}"
    state: started
  tags:
    - toto

仅当 服务 尚未成为 started 时才会进行任何更改。任务的结果将是一个启动的服务。一旦servicestarted,任务将报告[ok] 而不会触及service。在这方面,服务之前的状态是什么并不重要,即没有理由有条件地运行任务。 p>

3) 模块service_facts 按预期工作。例如

- service_facts:
- debug:
    var: ansible_facts.services.apache2.state

给予

"ansible_facts.services.apache2.state": "running"

【讨论】:

  • 谢谢你的回答,我明白你想告诉我什么,但它没有解决我的问题
  • 我的意思是当我执行脚本时,我得到了 "ansible_facts.services.apache2.state": "VARIABLE IS NOT DEFINED!"我想让 apache 正在运行或停止,没有定义,问题是我想执行标签
  • 我发现了问题。 service_facts 中缺少标记。我也没见过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多