运行期间主机之间的ansible共享变量

时间:2019-05-01 09:01:11

标签: ansible

我正在使用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]']”未定义

第一个任务能够在master [0]上运行,但是第二个任务无法识别该主机。

请帮助。

谢谢

添加清单.cfg:

[kubernetes_machines:vars]
kube_apiserver=10.82.72.54:6443

[kubernetes_machines:children]
masters
nodes
new

[masters]
srv12

[nodes]
srv13

[new]
prd4

2 个答案:

答案 0 :(得分:2)

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

master

您可以找到相关的文档here

答案 1 :(得分:0)

引用Playbook Basics

  

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

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

hostvars['master0']

尚不清楚主机:主机[0] 为何起作用。它不应该根据文档。 主机:master.0 应该不起作用。