如何在 Ansible 中创建“null”默认值

2024-03-12

我希望“lucy”遵循用户模块创建者的默认行为,即创建和使用与用户名“lucy”匹配的组。然而,对于“弗兰克”,我希望主要群体是现有的群体; gid 1003。所以我的哈希看起来像这样:

lucy:
  comment: dog
frank:
  comment: cat
  group: 1003

我的任务如下所示:

- name: Set up local unix user accounts
  user:
    name: "{{ item.key }}"
    comment: "{{ item.value.comment }}"
    group: "{{ item.value.group | default(undef) }}"
  loop: "{{ users|dict2items }}"

这不起作用,因为 undef 未被识别。我也想不到别的什么了。 'null'、'None' 等都失败。 '' 创建一个空字符串,这也是不正确的。我不知道该怎么做。 有任何想法吗?


默认(省略) https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#making-variables-optional就是您正在寻找的。例如,

- name: Set up local Unix user accounts
  user:
    name: "{{ item.key }}"
    comment: "{{ item.value.comment }}"
    group: "{{ item.value.group | default(omit) }}"
  loop: "{{ users|dict2items }}"

Comments

卢卡斯·巴斯克罗托评论:“... omit 仅在直接在模块中使用时才能正确工作,它在 set_fact 中不起作用...”

答:你错了。例如,默认(省略)都适用于set_fact并在模块中。列表中的第一项默认为false结果“变量未定义!”。第二项默认为omit。省略参数获取校验和 https://docs.ansible.com/ansible/devel/collections/ansible/builtin/stat_module.html#parameter-get_checksum默认为true结果中包含校验和

shell> cat pb.yml
- hosts: localhost
  tasks:
    - set_fact:
        test:
          - "{{ gchk|default(false) }}"
          - "{{ gchk|default(omit) }}"
    - stat:
        path: /etc/passwd
        get_checksum: "{{ item }}"
      loop: "{{ test }}"
      register: result
    - debug:
        var: item.stat.checksum
      loop: "{{ result.results }}"

gives

shell> ansible-playbook pb.yml | grep item.stat.checksum
  item.stat.checksum: VARIABLE IS NOT DEFINED!
  item.stat.checksum: 7c73e9f589ca1f0a1372aa4cd6944feec459c4a8

除此之外,默认(省略)在某些表达式中也能按预期工作。例如

    - debug:
        msg: "{{ {'a': item}|combine({'b': true}) }}"
      loop: "{{ test }}"

gives

  msg:
    a: false
    b: true

  msg:
    b: true

查看没有默认值的结果

shell> ansible-playbook pb.yml -e "gchk={{ true|bool }}"

将变量传递给模块(在我的例子中是模板......)时它不起作用。当使用 omit 时,模板会获取占位符的值。

答:当然,在这个用例中它不起作用。例如,

shell> cat pb.yml
- hosts: localhost
  tasks:
    - debug:
        msg: |
          {{ var1 }}
          {{ var2 }}
      vars:
        var1: "{{ foo }}"
        var2: "{{ bar|default(omit) }}"

gives

shell> ansible-playbook pb.yml -e foo=123
  ...
  msg: |-
    123
    __omit_place_holder__73431d735cecaedbd9c4386e2ebc77ded8eaee51

目标是省略模块中的参数。问题说:I can think of. 'null', 'None' etc. all fail. '' creates an empty string which is not right either. I can't find out how to do it. Any ideas?这不是您的用例。也许标题有误导性?将默认值设置为None如果你想使用null。也许,这会达到你想要的效果。

      vars:
        var1: "{{ foo }}"
        var2: "{{ bar|default(None) }}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ansible 中创建“null”默认值 的相关文章

  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h
  • Flask:AttributeError:'UnboundField'对象没有属性'__call__'?

    为什么我会收到此错误 什么是 UnboundField 我需要了解什么才能在将来修复和避免此问题 当我访问时调试输出http 127 0 0 1 5000 signup http 127 0 0 1 5000 signup Attribut
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • 如何动态选择要在flask中使用的模板目录?

    默认情况下 Flask 使用存储在 template 目录中的模板文件 flaskapp application py templates hello html 有没有办法根据登录的用户动态选择模板目录 这就是我想要的目录结构 flaska
  • 使用 Ansible 将二进制文件添加到 PATH

    我正在尝试安装Kiex https github com taylor kiex版本管理器Elixir http elixir lang org install html使用 Ansible 的编程语言 这些是我为此使用的戏剧 name K
  • Ansible local_action 指令

    我对 Ansible 很陌生 有一个简单的问题来了解我的理解local action指示 这是否意味着该命令完全在本地执行 假设你有这样的东西 local action command which nginx register check
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 所有 Ansible playbook 属性

    我刚刚开始使用 Ansible 在阅读了教程 Ansible 团队将其命名为 docs 我想查看可在剧本中使用的所有属性的完整列表 有人能够提供这样的清单吗 我唯一能通过谷歌搜索的是这个老例子 https gist github com m
  • 显示模板中存储为二进制 blob 的图像

    我有一个模型 其中图像存储为二进制 blob 我想在模板中显示该图像以及有关该对象的其他数据 由于图像不是一个单独的文件 我不知道如何显示它 我尝试过设置标题 或使用send file or render template 但我要么没有得到
  • Ansible bitbucket 克隆配置 ssh 错误

    总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 主机密钥验证失败 然而 如果我流浪 ssh 然后运行 克隆 命令 私有存
  • 开发/生产中的 Ansible 服务器/组

    我所处的情况是看不到正确的使用方法 我有多个分配了不同角色的服务器 分布在多个组中 与生产 登台环境相比 我在本地 Vagrant 环境中遇到了一些使用 group vars 的困难 在生产中 有更多的服务器 分配的组更少 在我的 Vagr
  • 如何从 Ansible 模块获取当前主机名?

    我正在开发自定义 Ansible 模块来控制 Vagrant 控制多个 VM 服务器上的多个 VM 节点 遵循指南https docs ansible com ansible latest dev guide developing modu
  • 无法获得与取消存档模块一起使用的“排除”选项

    我有一个 tar gzip 文件 我正在使用 ansible 取消归档模块将其提取到主机列表中 以下是configs tgz的部分内容列表 rw rw r ian ian 1295 2015 09 25 15 27 Makefile rw
  • Ansible:使用变量定义 playbook 主机

    我安装了以下版本 ansible 2 3 0 开发2131eaba0c 我想将我的主机变量指定为外部变量 然后在playbook与此类似 hosts integration In my 组变量 全部文件我有以下定义的变量 integrati
  • 如何在ansible清单文件中设置host_key_checking = false?

    我想用ansible playbook命令而不是 vagrant provision 然而设置host key checking false in the hosts文件似乎不起作用 hosts file vagrant ansible s
  • 如何使用ansible扩展Windows路径变量

    使用 win environment 可以向 Windows 主机添加 删除环境变量 但是要修改已经存在的变量 win environment 似乎没有用 因为您无法读取旧值来修改和更新变量 正确的 EDIT 从 Ansible 2 3 开
  • 在远程 playbook 中运行 ansible 本地任务

    我试图让这个任务在本地运行 在运行剧本的机器上 name get the local repo s branch name local action git branch awk print 2 register branchName 我尝
  • 有没有办法使用正则表达式来匹配ansible中的主机?

    我正在尝试使用正则表达式模式与 ansible 匹配主机 但它没有按预期工作 我的库存情况如下 group1 hello1 world1 hello2 world2 group2 hello3 而我的任务是 debug msg item w
  • Jinja2 为 Google App Engine 模型返回“None”字符串

    Google App Engine 模型 如下所示 from google appengine ext db import Model class M Model name db StringProperty 然后在从 Django 视图调
  • 不能在jinja2宏中使用current_user?

    我使用 Flask Login 它提供了current user模板中的对象 我想编写一个宏来显示评论表单或登录链接 具体取决于用户是否登录 如果我直接在模板中使用此代码 它会起作用 if current user is authentic

随机推荐