我正在使用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
答案 0 :(得分:2)
如果您要求"hostvars['master[0]']"
,则引号中包含整个master[0]
,因此您所指的是名称为master[0]
的主机。如果您是master
主机组的第一个成员,则需要变量引用而不是字符串,并且需要使用groups
变量(并且需要记住主机组名为{ {1}}不是masters
):
master
您可以找到相关的文档here。
答案 1 :(得分:0)
主机行是一个或多个组或主机模式的列表
模式 master [0] 与主机名 master [0] 不匹配。如果主机名是 master0 ,则hostvars引用应为
hostvars['master0']
尚不清楚主机:主机[0] 为何起作用。它不应该根据文档。 主机:master.0 应该不起作用。