问题描述
TLDR; 我无法弄清楚为什么我的剧本中的命令一直被跳过,无论我在哪台计算机上运行它......结果是当我在命令行上运行 ansible_env 时显示的变量对剧本不可用...我如何使用这个缺失的事实??
我正在使用 ansible 来配置我的个人 linux 台式机和笔记本电脑(我通常在其上安装非常相似的东西),但是当我使用 Gnome 桌面和 Mate 桌面时想要安装某些东西。 (我同时使用 Ubuntu-Mate 和 Ubuntu,当我在 Ubuntu 上安装时,我希望安装一些 Gnome 应用程序(gnome-tweaks、shell-extension-prefs 等))
因此,当我在寻找可以在某个时候使用的事实时,我在 ansible_env 中运行了 ansible -m setup localhost
,我发现:
"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 的命令]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)