微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ansible-名称为host_vars和字符串的动态变量

如何解决Ansible-名称为host_vars和字符串的动态变量

我正在尝试在Ansible中创建一个作业角色,以运行yum软件包的安装/更新,这将由第三方系统以.yml文件的形式提供给vars目录,该角色具有以下约定:server01.yml ,server02.yml,serverX.yml,其形式为packageList_serverNumber:“软件包列表”。 该变量将使用任务读取:

 - 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']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。