gpt4 book ai didi

variables - 将 Ansible 变量从一个角色(在一台主机上运行)传递到在同一剧本中的另一台主机上运行的另一个角色

转载 作者:行者123 更新时间:2023-12-03 15:22:39 25 4
gpt4 key购买 nike

我有一个在不同主机上运行不同角色的剧本。
是否可以将变量从在一台主机上运行的一个角色传递到在同一剧本运行中运行的另一台主机上的另一个角色?或任何解决方法?

playbook
host1
role1
here I get some variables: var1 var2 ...etc
host2
role2
here I need to use var1 var2 ... etc from the above host/role

role1 中设置变量 db 的任务看起来像这样:
- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
register: db

更新:在第一台主机上,值是动态的,就像一个总是更新的配置文件。在我使用 role1 将值存储在 host1 上的变量中之后,我移动到 host2,运行 role2 并使用 host1 存储的变量中的这些值执行操作。

我尝试使用主机变量:
{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}

我得到错误:
in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL

LBL 存在于主机中,因为我运行第一个角色

我在一台主机上设置了一个变量,我希望该变量可用于另一台主机。所有这一切都在一个剧本中。可以做到吗?

hostvars 不能像这样使用它:
---   
- name: test hostvars host1
hosts: LBL
tasks:
- command: "ls /bin"
register: ls_out

- name: test hostvars host2
hosts: LM
tasks:
- debug:
var: "{{ hostvars['LBL']['ls_out']['stdout'] }}"

错误:
fatal: [10.104.148.138] => host not found: LBL

/etc/ansible/hosts
[root@NS1 ansible]# cat /etc/ansible/hosts
[LBL]
10.104.148.136
[LM]
10.104.148.138

最佳答案

问题出在您的库存中。

这条信息:

fatal: [10.104.148.138] => host not found: LBL

是因为 LBL是一个组而不是主机。群 LBL其中有一台主机: 10.104.148.136
执行以下操作之一:

1. 将您的库存 ( /etc/ansible/hosts ) 更改为:
LBL ansible_ssh_host=10.104.148.136
LM ansible_ssh_host=10.104.148.138

2. 或者如果你真的知道你在做什么和 LBL是一个组,您想保持这种状态,然后使用以下命令访问变量:
{{ hostvars['10.104.148.136']['db']['stdout'] }}

再次 LBL 是一个组而不是主机。 More info .

关于variables - 将 Ansible 变量从一个角色(在一台主机上运行)传递到在同一剧本中的另一台主机上运行的另一个角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com