Ansible - 名称中带有 host_vars 和字符串的动态变量
Ansible - dynamic variable with host_vars and string in the name
我正在尝试在 Ansible 中为 运行 yum install/update 包创建一个工作角色,这将由第 3 方系统作为 .yml 文件提供给 vars 目录具有以下约定的角色:server01.yml、server02.yml、serverX.yml 形式为 packageList_serverNumber 的变量:'list of packages'。
该变量将使用任务读取:
- name: server update packages from host_vars
yum:
name: "{{ install_pkgs }}"
state: latest
这应该指向特定主机的 host_vars 文件:
install_pkgs: "{{ packageList_server01 }}"
由于此任务仅应在定义变量时 运行,因此我尝试将 when 子句与指向 packageList_serverNumber 的变量一起使用。当我对其进行硬编码时,如下图所示:
when: packageList_server01 is defined
请问如何让它动态化?
我正在尝试:
when: packageList_{{hostvars[inventory_hostname]}} is defined
但不幸的是,这不起作用。
使用 lookup 插件 vars。 运行下面命令查看详情
shell> ansible-doc -t lookup vars
给定 vars 文件
shell> cat roles/test4/vars/server01.yml
packageList_server01: [pkg1, pkg2, pkg3]
shell> cat roles/test4/vars/server02.yml
packageList_server02: [pkg4, pkg5, pkg6]
shell> cat roles/test4/vars/server03.yml
packageList_server03: [pkg7, pkg8, pkg9]
读取变量,声明变量install_pkgs,并使用它
shell> cat roles/test4/tasks/main.yml
- include_vars: "vars/{{ inventory_hostname }}.yml"
- set_fact:
install_pkgs: "{{ lookup('vars', 'packageList_' ~ inventory_hostname) }}"
- debug:
msg: "Install {{ install_pkgs }}"
例如剧本
- hosts: server01,server02,server03
gather_facts: false
roles:
- test4
给出(删节)
TASK [test4 : debug] ****
ok: [server01] =>
msg: Install ['pkg1', 'pkg2', 'pkg3']
ok: [server03] =>
msg: Install ['pkg7', 'pkg8', 'pkg9']
ok: [server02] =>
msg: Install ['pkg4', 'pkg5', 'pkg6']
我正在尝试在 Ansible 中为 运行 yum install/update 包创建一个工作角色,这将由第 3 方系统作为 .yml 文件提供给 vars 目录具有以下约定的角色:server01.yml、server02.yml、serverX.yml 形式为 packageList_serverNumber 的变量:'list of packages'。 该变量将使用任务读取:
- name: server update packages from host_vars
yum:
name: "{{ install_pkgs }}"
state: latest
这应该指向特定主机的 host_vars 文件:
install_pkgs: "{{ packageList_server01 }}"
由于此任务仅应在定义变量时 运行,因此我尝试将 when 子句与指向 packageList_serverNumber 的变量一起使用。当我对其进行硬编码时,如下图所示:
when: packageList_server01 is defined
请问如何让它动态化? 我正在尝试:
when: packageList_{{hostvars[inventory_hostname]}} is defined
但不幸的是,这不起作用。
使用 lookup 插件 vars。 运行下面命令查看详情
shell> ansible-doc -t lookup vars
给定 vars 文件
shell> cat roles/test4/vars/server01.yml
packageList_server01: [pkg1, pkg2, pkg3]
shell> cat roles/test4/vars/server02.yml
packageList_server02: [pkg4, pkg5, pkg6]
shell> cat roles/test4/vars/server03.yml
packageList_server03: [pkg7, pkg8, pkg9]
读取变量,声明变量install_pkgs,并使用它
shell> cat roles/test4/tasks/main.yml
- include_vars: "vars/{{ inventory_hostname }}.yml"
- set_fact:
install_pkgs: "{{ lookup('vars', 'packageList_' ~ inventory_hostname) }}"
- debug:
msg: "Install {{ install_pkgs }}"
例如剧本
- hosts: server01,server02,server03
gather_facts: false
roles:
- test4
给出(删节)
TASK [test4 : debug] ****
ok: [server01] =>
msg: Install ['pkg1', 'pkg2', 'pkg3']
ok: [server03] =>
msg: Install ['pkg7', 'pkg8', 'pkg9']
ok: [server02] =>
msg: Install ['pkg4', 'pkg5', 'pkg6']