ansible在运行时在主机之间共享变量

ansible在运行时在主机之间共享变量,ansible,Ansible,我正在使用ansible 2.5.4,需要在主机之间共享变量 我尝试了许多我在网上看到的例子(与set_fact共享或使用虚拟主机),但都不起作用 也许我在做一些不同的事情, 这是我的剧本: --- - hosts: master[0] tasks: - name: generate kubernetes BootrapToken command: kubeadm token generate register: generate_token_result - se

我正在使用ansible 2.5.4,需要在主机之间共享变量

我尝试了许多我在网上看到的例子(与set_fact共享或使用虚拟主机),但都不起作用

也许我在做一些不同的事情, 这是我的剧本:

---
- hosts: master[0]
  tasks:
  - name: generate kubernetes BootrapToken
    command: kubeadm token generate
    register: generate_token_result

  - set_fact: token="{{generate_token_result}}"


- hosts: new       # requires creating new group in inventory.cfg named new
  tasks:
  - name: include docker-host role
    include_role:
      name: docker-host
    when: not skip_nodes_setup
  - name: include kubernetes-host role
    include_role:
      name: kubernetes-host
    when: not skip_nodes_setup
  - name: include kubernetes-operator role
    include_role:
      name: kubernetes-operator
    when: not skip_nodes_setup
  - name: join node to kubernetes cluster
    command: "kubeadm join --token {{ hostvars['master[0]']['token']['stdout'] }} --discovery-token-unsafe-skip-ca-verification {{ hostvars['kubernetes_machines']['kube_apiserver'] }}"
我得到以下错误: 该任务包括一个带有未定义变量的选项。错误是:“hostvars['master[0]']”未定义

第一个任务可以在主机[0]上运行,但第二个任务无法识别该主机

请帮忙

谢谢

添加inventory.cfg:

[kubernetes_machines:vars]
kube_apiserver=10.82.72.54:6443

[kubernetes_machines:children]
masters
nodes
new

[masters]
srv12

[nodes]
srv13

[new]
prd4
引用

主机行是一个或多个组或主机模式的列表

模式主机[0]与主机名主机[0]不匹配。如果主机名为master0,则hostvars引用应为

hostvars['master0']
不清楚为什么主机:主机[0]起作用。根据文件规定,不应将其删除hosts:master.0应该相同的主机不起作用。

引用

主机行是一个或多个组或主机模式的列表

模式主机[0]与主机名主机[0]不匹配。如果主机名为master0,则hostvars引用应为

hostvars['master0']
不清楚为什么主机:主机[0]起作用。根据文件规定,不应将其删除hosts:master.0应该相同的主机不起作用。

如果您要求使用
“hostvars['master[0]]”
,那么您在引号中包含了整个
master[0]
,因此您指的主机的文字名称是
master[0]
。如果您是指
master
主机组的第一个成员,那么您需要一个变量引用,而不是字符串,并且您需要使用
groups
变量(您需要记住您的主机组名为
masters
而不是
master
):

您可以找到相关的文档。

如果您要求提供
“主机名['master[0]]”
,您已经得到了整个
master[0]
内引号,因此您指的是具有字面名称
master[0]
的主机。如果您是指
master
主机组的第一个成员,那么您需要一个变量引用,而不是字符串,并且您需要使用
groups
变量(您需要记住您的主机组名为
masters
而不是
master
):


您可以找到相关文档。

发布清单。我添加了清单
-hosts:master[0]
可能
masters
,因为清单中没有
master
。@eran主机:master[0]无法使用此清单。发布清单。我添加了清单
-hosts:master[0]
可能
masters
,由于清单中没有
主机
。@eran主机:主机[0]无法使用此清单。它应该是清单的主机组中的第一个主机。它应该是清单的主机组中的第一个主机