【问题标题】:Ansible - use variable from another hostAnsible - 使用来自另一台主机的变量
【发布时间】:2018-02-22 20:18:35
【问题描述】:

我有一个剧本,它在 Windows 框上执行一个脚本,该脚本返回一个值,我必须稍后在切换到本地主机后在我的剧本中重复使用。 切换回 localhost 后如何访问此值。 这是一个例子:

hosts: localhost
connection: local
gather_facts: no
tasks:
.
.
.
hosts: windows
gather_facts: no
tasks:
- name: Call PowerShell script
win_command: "c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe c:\\psl_scripts\\getData.ps1"
register: value_to_reuse

hosts: localhost
gather_facts: no
connection: local
tasks:
- name: debug store_name from windows host
  debug:
    var: "{{ hostvars[windows][value_to_reuse][stdout_lines] }}"

从其他主机访问变量的正确语法是什么? 我收到错误消息:“msg”:“任务包含一个带有未定义变量的选项。错误是:'windows' 未定义

【问题讨论】:

    标签: ansible


    【解决方案1】:

    这是有效的代码with_items

      - name: print value_to_reuse
        debug:
          var: hostvars[item]['value_to_reuse']['stdout_lines']
        with_items: "{{ groups['windows'] }}"
    

    相同的代码无需迭代即可工作:

     - name: print value_to_reuse
        debug:
          var: hostvars[groups['windows'][0]]['value_to_reuse']['stdout_lines']
    

    【讨论】:

    • 这是一个常见的需求,但我在任何地方都看不到这个用例,除了这里,即使在文档中也是如此。例如,如果您想在单个主机上创建特定用户,并访问该用户的公共 SSH 密钥,以便将其添加到游戏中的所有其他主机,则必须使用此技术。
    【解决方案2】:

    语法是:

    - debug:
        var: hostvars['windows']['value_to_reuse']['stdout_lines']
    

    三个错误:

    • 你应该引用字符串值
    • var 参数采用变量名,而不是模板(应该是 msg-参数值)
    • 给定示例中的windows 应该是主机名,因为所有事实都绑定到主机,而不是主机组

    【讨论】:

    • 嗨@techraf。随着您的更改,输出中不再显示红色,但仍不显示任何值:"hostvars['windows']['value_to_reuse']['stdout_lines']": "VARIABLE IS NOT DEFINED!"
    • 我已经执行了这样的脚本:hostvars['windows'] 并且只返回了空字符串:"hostvars['windows']": "",这意味着没有为“windows”主机注册的变量。如果我注册了,这怎么可能?
    • 您的主机名是windows 还是主机组?
    • 我正在连接到 Windows 服务器,并且确实有一个主机文件:[windows] 1.1.1.1groups_vars/windows.yml 文件,其中定义了如下所述的库存变量:docs.ansible.com/ansible/latest/intro_windows.html
    • 嗨@techraf,此代码适用于with_items- name: print value_to_reuse debug: var: hostvars[item]['value_to_reuse']['stdout_lines'] with_items: "{{ groups['windows'] }}"
    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多