首页 > 解决方案 > 调用之间缺少 ansible_env 变量

问题描述

TLDR;我无法弄清楚为什么我的剧本中的命令一直被跳过,无论我在哪台计算机上运行它......结果当我在命令行上运行它时显示在 ansible_env 中的变量似乎对剧本不可用...我怎样才能使用这个缺失的事实?

我正在使用 ansible 来配置我的个人 linux 台式机和笔记本电脑(我通常在上面安装非常相似的东西),但是当我使用 Gnome 桌面和 Mate 桌面时想要安装某些东西。(我同时使用 Ubuntu-Mate 和 Ubuntu,当我在 Ubuntu 上安装时,我希望安装一些 Gnome 应用程序(gnome-tweaks、shell-extension-prefs 等))

因此,当我在寻找可以在某个时间使用的事实时,我在ansible -m setup localhostansible_env 内部运行时发现:

   "ansible_env": {
        "COLORTERM": "truecolor",
        "COMPIZ_CONFIG_PROFILE": "mate",
        "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
        "DESKTOP_AUTOSTART_ID": "10fbd59767277bef2f160865055738627400000121410000",
        "DESKTOP_SESSION": "mate",
        "DISPLAY": ":0",
        "GDMSESSION": "mate",
        ...

当我对 Ubuntu 运行相同的命令时,DESKTOP_SESSION 返回了“gnome”...

为了澄清,我在每台机器上运行了事实收集,以确保我在所有机器上都获得了 DESKTOP_SESSION ......

但是当我使用when: lookup('env','DESKTOP_SESSION') == "gnome"无论我在哪台计算机上运行它时,它都跳过了这个任务......

所以我跑了

- name: Debug all env vars
  debug:
    var: ansible_facts

该 DESKTOP_SESSION 事实不在列表中(这可以解释为什么它被跳过) - 我的问题是它为什么会丢失,以及如何使用它(或者是否有另一种方法来确定我在 Linux 上的桌面环境?)

我想有人可能会问,所以这是我的 local.yml 剧本,其中包含 when 子句:

- hosts: localhost
  become: true
#  var_files:
#    - config.yml
  tasks:
    # setup normal home directories
    - include: tasks/system/directories.yml

    # update entire system
    - include: tasks/system/update-system.yml

    # sudoers file
    - include: tasks/sudo/sudoers.yml

    # base system packages
    - include: tasks/software/system.yml

    # prep git access
    - include: tasks/system/copy-files.yml
    - include: tasks/system/git-links.yml
    - include: tasks/software/git-repos.yml

    # mount nfs drives to freenas & home folder links
    - include: tasks/system/nfs-mounts.yml
    - include: tasks/system/sym-links.yml

    # install various applications
    - include: tasks/software/accessories.yml    
    - include: tasks/software/development.yml
    - include: tasks/software/games.yml
    - include: tasks/software/graphics.yml
    - include: tasks/software/internet.yml
    - include: tasks/software/multimedia.yml
    - include: tasks/software/office.yml

    # gnome followups
    - include: tasks/software/gnome-followup.yml
      when: lookup('env','DESKTOP_SESSION') == "gnome"

    # laptop tools
    - include: tasks/system/laptops.yml
      when: ansible_nodename == "the-tardis" or ansible_nodename == "satelite-5"   

这是我用来运行 ansible 的命令(来自引导脚本)......

sudo ansible-playbook --vault-password-file ~/.ansible_vault_key ./local.yml --connection=local;

[编辑以澄清在我的个人机器上运行并添加运行 ansible 的命令]

标签: ansibleansible-2.xansible-facts

解决方案


推荐阅读