首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据ansible_facts设置传递给角色的变量的值?

如何根据ansible_facts设置传递给角色的变量的值?
EN

Stack Overflow用户
提问于 2021-01-22 03:02:30
回答 1查看 34关注 0票数 2

我正在使用geerlingguy's NTP role在一组主机上设置NTP客户端软件。我想将此演示指向一个主机组,并让Ansible即时确定每台计算机是否为VM (这里需要注意的重要一点是,我们所有的VM都运行在KVM虚拟机管理程序上)。如果主机是VM,则应将ntp_tinker_panic设置为true。否则,应将其设置为false。这是我写的剧本:

代码语言:javascript
复制
- name: Set up NTP or chronyd on Linux hosts
  hosts: ntp
  tasks:
    - name: Print the value of ntp_tinker_panic
      debug:
        var: ntp_tinker_panic
    - name: Ensure time sync software is installed and configured
      include_role:
        name: geerlingguy.ntp
  vars:
    ntp_enabled: true
    ntp_manage_config: true
    ntp_timezone: America/New_York
    ntp_servers:
      - "time.google.com"
    ntp_tinker_panic: "{{ ansible_facts['ansible_product_name'] == 'KVM' }}"
  tags:
    - ntp

但是,即使播放执行时没有错误,调试消息也会指出ntp_tinker_panic未定义:

代码语言:javascript
复制
TASK [Print the value of ntp_tinker_panic] *****************************************************************************
ok: [hostname] => {
    "ntp_tinker_panic": "VARIABLE IS NOT DEFINED!"
}

是否可以在播放运行时按主机设置该变量的值,而不是为虚拟机和物理主机定义单独的主机组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 03:30:12

您似乎希望有条件地设置ntp_tinker_panic的值。而您在vars部分中对变量的定义不会将其设置为true。并且它不会考虑ntp组中的每个主机。

如果ansible_product_name与该主机的KVM匹配,则应使用播放中的set_fact任务将此变量设置为true。

示例:

代码语言:javascript
复制
# ntp_tinker_panic not specified here in vars as it is target specific
  vars:
    ntp_enabled: true
    ntp_manage_config: true
    ntp_timezone: America/New_York
    ntp_servers:
      - "time.google.com"

  tasks:
    - name: Set ntp_tinker_panic for KVM
      set_fact:
        ntp_tinker_panic: true
      when: ansible_product_name == "KVM"
    - name: Print the value of ntp_tinker_panic
      debug:
        var: ntp_tinker_panic
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65834101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档