ansible - 调用之间缺少 ansible_env 变量
问题描述
TLDR;我无法弄清楚为什么我的剧本中的命令一直被跳过,无论我在哪台计算机上运行它......结果当我在命令行上运行它时显示在 ansible_env 中的变量似乎对剧本不可用...我怎样才能使用这个缺失的事实?
我正在使用 ansible 来配置我的个人 linux 台式机和笔记本电脑(我通常在上面安装非常相似的东西),但是当我使用 Gnome 桌面和 Mate 桌面时想要安装某些东西。(我同时使用 Ubuntu-Mate 和 Ubuntu,当我在 Ubuntu 上安装时,我希望安装一些 Gnome 应用程序(gnome-tweaks、shell-extension-prefs 等))
因此,当我在寻找可以在某个时间使用的事实时,我在ansible -m setup localhost
ansible_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 的命令]
解决方案
推荐阅读
- javascript - Web Scraper:使用库 Axios、cheerio 和 Exceljs 从网站提取的 JSON 数据生成 Excel 表
- powershell - foreach-object if return ,返回所有值问题
- cron - 气流调度程序没有接手工作
- java - Firestore 安全规则:使用 array_contains 来确定授权
- angular - 如何使用 docker-compose 运行 Angular?
- sql - 如何在 Oracle 数据库中重置没有任何长度限制条件的模式密码?
- java - 如何解决错误“无法在 RESOURCE hibernate.cfg.xml 中的第 0 行和第 0 列执行解组”。
- javascript - 如何在 Angular 6 应用程序中的 IE 11 中显示嵌入的 pdf
- android - android平台中的离子svg过滤器错误
- css - CSS在缩放图像上向左滚动