ansible groups.variable 在任务中
ansible groups.variable in a tasks
我正在尝试使用我在 group_vars/file.yml 中定义的变量,并将其用于我的角色任务中,例如 groups.my_variable(my_variable 是组在我的库存中定义)
这是我的角色任务:
---
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{groups.group_name}}"
tags: STORAGE_POOL
我的库存
[gluster]
glusterfs01
glusterfs02
ly-lab-elk
lpic
当我这样使用它时它起作用了:
---
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{ groups.gluster }}"
tags: STORAGE_POOL
当我直接在 tasks/pool_storage.yml 中使用 groups.gluster 时,我得到了预期的结果
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [glusterfs01] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [glusterfs02] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [ly-lab-elk] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [lpic] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
但是当我使用 group_vars/gluster.yml
中设置的变量时
group_names: gluster
在我的任务中tasks/pool_storage.yml
nodes: "{{groups.group_name}}"
这个结果不好
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [glusterfs01] => {
"group_names": [
"gluster"
]
}
ok: [glusterfs02] => {
"group_names": [
"gluster"
]
}
ok: [ly-lab-elk] => {
"group_names": [
"gluster"
]
}
ok: [lpic] => {
"group_names": [
"gluster"
]
}
由于我的库存文件中有不同的组,我想使用一个变量,我将在其中定义我的组名,然后将其附加到 groups.group_name 或其他方式,但要获得预期的结果。
有人可以帮忙吗?
提前谢谢你。
将变量放入文件group_vars/gluster.yml,如果你想让组gluster的主机使用它.文件名必须与组名相同。这样 Ansible 将识别目录 group_vars 中的文件属于哪个组。
如果不能把group_vars/file.ymllink改成group_vars/gluster.yml .
例如,给定用于测试的简化清单
shell> cat hosts
[gluster]
glusterfs01
glusterfs02
group_vars
shell> cat group_vars/gluster.yml
my_variable: foo
和剧本
shell> cat playbook.yml
- hosts: gluster
gather_facts: false
tasks:
- debug:
var: my_variable
给出(删节)
shell> ansible-playbook -i hosts playbook.yml
TASK [debug] *******************************************************
ok: [glusterfs01] =>
my_variable: foo
ok: [glusterfs02] =>
my_variable: foo
因此,要在 groups
中引用 group_name
变量,您可以尝试使用 groups[group_name]
语法。
库存示例:
[servers]
host-101.xxx.com
host-202.xxx.com
[group1]
g1-server1
g1-server2
一个group_vars/servers.yaml
:
group_name: servers
剧本:
- hosts: servers
connection: local
tasks:
- debug:
var: groups[group_name]
将 group1
下的服务器定义为 group_name
:
ok: [host-101.xxx.com] => {
"groups[group_name]": [
"host-101.xxx.com",
"host-202.xxx.com"
]
}
ok: [host-202.xxx.com] => {
"groups[group_name]": [
"host-101.xxx.com",
"host-202.xxx.com"
]
}
还有一点需要注意的是,您不需要在 GlusterFS 集群的每个主机上建立对等节点。所以,要么:
- 定位该组的任意 1 台主机
或
- 将
run_once: true
添加到任务
示例:
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{ groups[group_name] }}"
tags: STORAGE_POOL
run_once: true
我正在尝试使用我在 group_vars/file.yml 中定义的变量,并将其用于我的角色任务中,例如 groups.my_variable(my_variable 是组在我的库存中定义)
这是我的角色任务:
---
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{groups.group_name}}"
tags: STORAGE_POOL
我的库存
[gluster]
glusterfs01
glusterfs02
ly-lab-elk
lpic
当我这样使用它时它起作用了:
---
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{ groups.gluster }}"
tags: STORAGE_POOL
当我直接在 tasks/pool_storage.yml 中使用 groups.gluster 时,我得到了预期的结果
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [glusterfs01] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [glusterfs02] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [ly-lab-elk] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
ok: [lpic] => {
"groups.gluster": [
"glusterfs01",
"glusterfs02",
"ly-lab-elk",
"lpic"
]
}
但是当我使用 group_vars/gluster.yml
中设置的变量时group_names: gluster
在我的任务中tasks/pool_storage.yml
nodes: "{{groups.group_name}}"
这个结果不好
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [glusterfs01] => {
"group_names": [
"gluster"
]
}
ok: [glusterfs02] => {
"group_names": [
"gluster"
]
}
ok: [ly-lab-elk] => {
"group_names": [
"gluster"
]
}
ok: [lpic] => {
"group_names": [
"gluster"
]
}
由于我的库存文件中有不同的组,我想使用一个变量,我将在其中定义我的组名,然后将其附加到 groups.group_name 或其他方式,但要获得预期的结果。
有人可以帮忙吗?
提前谢谢你。
将变量放入文件group_vars/gluster.yml,如果你想让组gluster的主机使用它.文件名必须与组名相同。这样 Ansible 将识别目录 group_vars 中的文件属于哪个组。
如果不能把group_vars/file.ymllink改成group_vars/gluster.yml .
例如,给定用于测试的简化清单
shell> cat hosts
[gluster]
glusterfs01
glusterfs02
group_vars
shell> cat group_vars/gluster.yml
my_variable: foo
和剧本
shell> cat playbook.yml
- hosts: gluster
gather_facts: false
tasks:
- debug:
var: my_variable
给出(删节)
shell> ansible-playbook -i hosts playbook.yml
TASK [debug] *******************************************************
ok: [glusterfs01] =>
my_variable: foo
ok: [glusterfs02] =>
my_variable: foo
因此,要在 groups
中引用 group_name
变量,您可以尝试使用 groups[group_name]
语法。
库存示例:
[servers]
host-101.xxx.com
host-202.xxx.com
[group1]
g1-server1
g1-server2
一个group_vars/servers.yaml
:
group_name: servers
剧本:
- hosts: servers
connection: local
tasks:
- debug:
var: groups[group_name]
将 group1
下的服务器定义为 group_name
:
ok: [host-101.xxx.com] => {
"groups[group_name]": [
"host-101.xxx.com",
"host-202.xxx.com"
]
}
ok: [host-202.xxx.com] => {
"groups[group_name]": [
"host-101.xxx.com",
"host-202.xxx.com"
]
}
还有一点需要注意的是,您不需要在 GlusterFS 集群的每个主机上建立对等节点。所以,要么:
- 定位该组的任意 1 台主机
或
- 将
run_once: true
添加到任务
示例:
- name: "Create strusted storage pool"
gluster_peer:
state: "{{ CURRENT_NODES.state }}"
nodes: "{{ groups[group_name] }}"
tags: STORAGE_POOL
run_once: true