This question is NOT answered. Someone mentioned environment variables. Can you elaborate on this?
这似乎是一个简单的问题,但不是在ansible . 它不断上升 . 特别是在错误的情况下我需要一个全局变量 . 我可以在处理一个主机播放时设置一个,然后在以后与另一个主机进行检查 . 简而言之,我可以稍后在剧本中进行分支,具体取决于变量 .
我们无法控制自定义软件安装,但如果已安装,我们必须在其他计算机上安装不同的软件 . 最重要的是,安装会有所不同,具体取决于VM文件夹 . 我的王国是全球变种 .
变量的范围仅与当前的ansible_hostname相关 . 是的,我们将group_vars / all.yml作为全局变量,但我们无法在游戏中设置它们 . 如果我设置了一个变量,那么其他主机的播放/任务就无法看到它 . 我理解变量的范围,但我想设置一个可以在所有剧本剧中阅读的全局变量 . 实际的实现并不重要,但可变访问是(重要的) .
My Question: 有没有办法设置在另一台主机上运行不同任务时可以检查的变量?像setGlobalSpaceVar(myvar,true)之类的东西?我知道还没有找到解决办法 . 重新措辞:为一个主机在一个任务中设置一个变量,然后在另一个主机的另一个任务中设置一个变量,读取该变量 .
我能想到的唯一方法是更改控制器上的文件,但这似乎是假的 .
An example
以下内容涉及oracle备份和本地可执行文件,但我保持通用 . 对于下面 - Yes, I can do a run_once, but that won't answer my question. 这个变量访问问题不断出现在不同的上下文中 .
我有4台xyz服务器 . 我有2个程序需要执行,但只能在2台不同的机器上执行 . 我不知道哪个 . 对于不同的VM环境,设置可能会发生变化 .
我们的programOne在具有驱动器E的服务器上运行 . 我可以使用ansible找到哪个服务器具有驱动器E,并且每当我设置变量(driveE_machine)时都相应地进行播放 . 它仅适用于该主机 . 为此,其他3台机器将没有设置driveE_machine . 在稍后的游戏中,我需要在其他3台机器中的其中一台机器上执行另一个程序 . 这意味着我需要设置一个变量,该变量可由未运行第二个程序的其他两个主机读取 . 我不知道怎么做 .
库存文件:
[xyz]
serverxyz[1:4].private.mystuff
手册示例:
---
- name: stackoverflow variable question
hosts: xyz
gather_facts: no
serial: 1
tasks:
- name: find out who has drive E
win_shell: dir e:\
register: adminPage
ignore_errors: true
# This sets a variable that can only be read for that host
- name: set fact driveE_machine when rc is 0
set_fact:
driveE_machine: "{{inventory_hostname}}"
when: adminPage.rc == 0
- name: run program 1
include: tasks/program1.yml
when: driveE_machine is defined
# program2.yml executes program2 and needs to set some kind of variable
# so this include can only be executed once for the other 3 machines
# (not one that has driveE_machine defined and ???
- name: run program 2
include: tasks/program2.yml
when: driveE_machine is undefined and ???
# please don't say run_once: true - that won't solve my variable access question
有没有办法设置在另一台主机上运行任务时可以检查的变量?
2 回答
不确定你真正想要什么,但你可以用一个循环任务(一些全局变量模拟)为游戏中的每个主机设置一个事实:
playbook.yml
主机
结果
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#fact-caching
这甚至适用于在剧本中动态设置的变量 .