使用 jinja 的 Ansible set_fact 列表

2024-03-30

我正在尝试学习 jinja 和 Ansible。这是在 RHEL 7.9 上,

ansible 2.9.27
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, May 27 2022, 11:27:32) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

我进行此练习的唯一原因是学习。但我很困惑。为什么这不产生一个列表found_route_list(这是一个列表)?

    - name: Populate appended route list
      set_fact:
        found_added_routes: |- 
          {%- set blah = [] %}
            {%- for line in found_route_list %}
              {%- set _ = blah.append(line) %}
            {%- endfor %} 
          {{ blah }}

我的剧本首先收集服务器上的路由:

- name: Get route info
  shell: /usr/sbin/ip route show | sed -e 's/ proto.*//' 
  register: cmdtmp
  changed_when:
    - cmdtmp.stdout | length == 0

- name: Get route list
  set_fact:
    found_route_list: "{{ cmdtmp.stdout.split('\n') }}"

虽然只是产生几行输出,如下所示:

default via 10.13.99.1 dev bond0.99
10.13.101.0/23 dev p1p1.101
128.1.66.227 via 10.13.101.1 dev p1p1.101

我使用以下命令对其执行上述附加操作set_fact to found_added_routes。然后我调试:

- name: Debug found_route_list
  debug:
    msg: "Found route list: {{ item }}"
  loop: "{{ found_route_list }}"

- name: Debug found_added_routes
  debug:
    msg: "Found: {{ item }}"
  loop: "{{ found_added_routes }}"

这是我的输出:

TASK [networks : Debug found_route_list] **********************************************************************************************************************
ok: [server01.example.com] => (item=default via 10.13.99.1 dev bond0.99) => {
    "msg": "Found route list: default via 10.13.99.1 dev bond0.99"
}
ok: [server01.example.com] => (item=10.13.101.0/24 dev p1p1.101) => {
    "msg": "Found route list: 10.13.101.0/24 dev p1p1.101"
}
ok: [server01.example.com] => (item=128.1.66.227 via 10.13.101.1 dev p1p1.101) => {
    "msg": "Found route list: 128.1.66.227 via 10.13.101.1 dev p1p1.101"
}

TASK [networks : Debug found_added_routes] ********************************************************************************************************************
fatal: [server01.example.com]: FAILED! => {"msg": "Invalid data passed to 'loop', it requires a list, got this instead:  [u'default via 10.13.99.1 dev bond0.99', u'10.13.101.0/24 dev p1p1.101', u'128.1.66.227 via 10.13.101.1 dev p1p1.101']. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup."}

我尝试像这样创建列表,但得到相同的输出:

- name: Populate appended route list
  set_fact:
    found_added_routes: "{%- set blah = [] %}
        {%- for line in found_route_list %}
          {%- set _ = blah.append(line) %}
        {%- endfor %} 
      {{ blah }}"

另外,我已经看到了语法set_fact,你可以这样做:set_fact: |-但在我的一生中,我找不到任何文档或参考资料。你能给我指出一些可以解释它的东西吗?

Thanks.


模板的结果始终是一个字符串。Quoting https://jinja.palletsprojects.com/en/latest/templates/#synopsis:

Jinja 可以生成任何基于文本的格式...

查看变量的类型找到的_添加_路线

    - debug:
        var: found_added_routes|type_debug

gives

  found_added_routes|type_debug: str

该字符串是有效的 YAML。使用过滤器来自_yaml并将字符串转换为列表。例如,

    - debug:
        var: item
      loop: "{{ found_added_routes|from_yaml }}"

给出(删节)

  item: default via 10.13.99.1 dev bond0.99
  item: 10.13.101.0/24 dev p1p1.101
  item: 128.1.66.227 via 10.13.101.1 dev p1p1.101
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jinja 的 Ansible set_fact 列表 的相关文章

  • 将变量内容复制到事实中后,Ansible 会抛出错误

    我有变量 其中包含带有其他模板引擎标记的字符串 不幸的是它们是三个花括号 如果我直接使用这些变量 一切都很好 如果我将它们复制到事实中以便随后修改它们 Ansible 会抛出错误 示例剧本 hosts localhost connectio
  • Ansible:从意图文件创建字典

    shell gt cat myfile yml ABC ABC C01 host a1 prefixlen 19 host a2 prefixlen 19 DEF DEF C01 host d1 prefixlen 19 host d2 p
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • 如何在 Django 1.8 中使用 jinja2 作为模板引擎

    我一直在研究如何在 django 1 8 中使用 jinja2 但是没有将 django 与 jinja2 一起使用的完整源代码 我想知道你们是否知道在 django 中使用 jinja2 的过程 我查看了官方文档并查看了以下问题 如何设置
  • Ansible with_items 与循环

    使用有什么区别带有项目 https docs ansible com ansible 2 4 playbooks loops html vs loops http docs ansible com ansible latest user g
  • 带有 cacert 选项的 Ansible URI 模块

    我正在尝试做相当于 curl X POST data
  • 如果不满足某些条件,如何跳过ansible剧本中的所有其他剧本?

    我在下面的剧本中有多个剧本 如果不满足某些条件 我想忽略所有其他戏剧 因此 对于下面的示例 如果我在中找不到任何新文件Play1然后我不想执行Play2 and Play3根本没有 它应该跳过它 我怎样才能做到这一点 I have end
  • 在 python -flask -jinja2 模板中迭代多个列表

    我在迭代中遇到问题for loop在 Flask jinja2 模板中的多个列表上 我的代码如下所示 Type RS IDs 1001 1002 msgs Success Success rcs 0 1 return render temp
  • 使用 ansible SSH 到远程服务器

    我正在使用 ansible 来自动化一些任务 其中之一要求我ssh到服务器A 然后从A到B 然后从B到C 我似乎找不到任何方法来做到这一点 有什么建议么 鉴于您不使用 Paramiko 进行 ssh transport ssh https
  • 如何从用户定义的 ansible.cfg 设置 ansible_config 变量

    我有一个目录结构 在其中保存我的剧本 如下所示 home monk Ansible work ansible cfg playbook dir 1 playbook 1 yml playbook dir 2 playbook 2 yml p
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 使用 Python API 2.0.0.1 运行 Ansible Playbook

    安塞布尔版本 2 0 0 1 我现在已经四处寻找了很多 我发现的大多数文档要么不完整 要么已弃用 这篇文章适用于1 8 4版本 即 https stackoverflow com questions 27590039 running ans
  • 从 Jinja 渲染模板中删除不必要的空白

    我在用着curl观看我的网络应用程序的输出 当 Flask 和 Jinja 渲染模板时 输出中存在大量不必要的空白 它似乎是通过渲染 Flask WTF 和 Flask Bootstrap 的各种组件来添加的 我可以使用剥离这个sed 但是
  • 传递宏作为参数 jinja dbt

    Today date milliseconds 是我在项目中的宏 如何将此宏重定向为参数 以便默认情况下我可以在 yml 中编写另一个宏 test valid date model column name exclude condition
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同
  • 如何让 Angular-Flask 应用加载 html 部分?

    我试图让我的 Angular Flask 应用程序在基本 html 文件中渲染部分 HTML 文件 应用程序加载基本 html 窗口标题和页脚加载 但 ng view 没有加载任何内容 也许我到局部的角度路由不正确 文件结构 gt flas
  • if else 在 ansible 打印语句中

    我需要有关具有多个条件的打印语句的语法的帮助 目前 报价为 inventory hostname 导致错误 如果我删除剧本运行的引号 但列出文本 inventory hostname 而不是变量 我想知道如何打印变量以及 if else 语
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de
  • 如何使用 Ansible 遍历嵌套的 dict 结构?

    我在 ansible 剧本中有以下 dict 结构变量 apache vhosts name foo server name foo com server aliases a foo com b foo com c foo com name

随机推荐

  • 使用 Python 字典作为键(非嵌套)

    Python 不允许将字典用作其他字典中的键 是否有使用非嵌套字典作为键的解决方法 更复杂的不可散列对象和我的具体用例的一般问题是搬到这里 https stackoverflow com questions 1611797 using no
  • C++ 模板参数更改对指针的引用

    也许我不知道如何搜索 但事实上我找不到任何人谈论这个 我的结构有一个non type论证取决于type争论 template lt typename SpecType SpecType NonType gt struct Struct Wh
  • yii 自定义错误页面,例如 404、403、500

    我正在尝试为所有错误消息创建单独的文件 404 403 500 等 这样我就可以为它们进行定制设计 如果可能的话 我不希望页眉和页脚也包含在我的错误页面中 现在我有这个 在我的站点控制器 php并把错误404 php进入我的浏览量 站点 f
  • 如何分析 Java 中的线程?

    我的应用程序中有生产者和消费者线程 我需要对它们进行分析以查看线程的性能 每个线程进入睡眠和等待之前所花费的时间等 并采取纠正措施以提高应用程序的整体效率 关于如何解决这个问题有什么建议吗 我个人使用 YourKit java profil
  • 在 Django 中接受电子邮件地址作为用户名

    有没有一种好方法可以在 Django 中执行此操作 而无需滚动我自己的身份验证系统 我希望用户名是用户的电子邮件地址 而不是他们创建用户名 请指教 对于其他想要这样做的人 我建议看一下django 电子邮件作为用户名 https githu
  • 使用 docker 和 --privileged 构建

    我在用着本指南 https aws amazon com blogs ai build a voice kit with amazon lex and a raspberry pi 使用 Amazon Lex 和 Raspberry Pi
  • 如何在VB6中模拟.net Int64?

    如何在 VB6 中存储 Int64 数字以与 Win32 函数一起使用 有没有办法在 net中定义像Int64这样的类型 并简单评估一下数字 我认为许多 VB6 程序员都需要这样的东西 因为一些 Win32 API 使用 int64 作为参
  • 如何淡出图像的侧面?

    当您扩大浏览器时 您会注意到图像的右侧和左侧以黑色淡出 我需要将相同的功能应用到我的画廊 但不知道 我找到了这个 gt gt link https stackoverflow com questions 9437400 css fade o
  • 不带 href="#" 的脚本链接

    我的网络应用程序使用了很多 a href Perform client script action a 用于脚本编写的锚链接 这是我十多年前作为 Dreamweaver 用户时养成的习惯 现在我开始质疑这是否有必要 我其实不知道为什么 a
  • 我应该在 SSL 证书请求的通用名称中包含“www”吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我即将为一个小型网站购买 SSL 证书 输入 www domain Name com 或 domainName com 作为常用名是最佳做法吗 确保您
  • `ggplot2` axis.text margin 修改了刻度位置

    我不确定我是否遇到了错误或者操作不正确 指定时axis textggplot 中的边距 并移动轴的位置 设置不会保留 在不移动轴文本的情况下 轴周围有足够的空间 library ggplot ggplot mtcars aes mpg wt
  • Google 主页网址 https://www.google.co.in/?gws_rd=cr&ei=xgH... 中的“ei”是什么意思?

    我知道谷歌网址中的一些参数 例如 gws 谷歌网络服务器 rd 重定向 cr 所指国家 但我注意到一个我无法识别的 ei 什么是ei这个网址是什么意思 http www google co in url ei qWwlUqD4MIrRrQf
  • 异步方法的并发执行

    使用 async await 模型 我有一个方法可以对 Web 服务进行 3 次不同的调用 然后返回结果的并集 var result1 await myService GetData source1 var result2 await my
  • 通过 RFC 5987 处理带空格的 filename* 参数会导致文件名中出现“+”

    我正在处理一些遗留代码 所以不 我不能只使用带有编码文件名组件的 URL 允许用户从我们的网站下载文件 由于我们的文件名通常采用多种不同的语言 因此它们都存储为 UTF 8 我编写了一些代码来处理 RFC5987 转换为正确的 filena
  • 让 JSF 从 EL 访问 Map 值而不是 bean 字段?

    是否有任何正确的方法来覆盖 JSF 从表达式语言访问 beans 字段的方式 这个想法是模仿这种行为以便访问Map
  • 在 Windows 7 中删除超过 10 天的文件夹的批处理文件

    我想创建一个批处理文件 该文件应使用 Windows 7 删除文件夹中超过 10 天的所有子文件夹 任何帮助 将不胜感激 改编自这是对一个非常相似问题的回答 https stackoverflow com questions 3419091
  • 从整数列表中获取随机数

    如果我有一个整数列表 List
  • 计算出的字体大小大于 Asus Nexus 7 上 CSS 中定义的字体大小

    我在 Asus Nexus 7 用 jQuery Mobile 编写 上运行该网页 我在 CSS 中将字体大小设置为 14px 但在调试过程中 在 PC 上使用 Chrome 我可以看到它的计算大小是 22px HTML 代码如下所示 di
  • Kubernetes 和 AWS:设置 LoadBalancer 以使用预定义的安全组

    正如标题所示 我正在寻找一种方法来强制 LoadBalancer 服务使用 AWS 中预定义的安全组 我不想手动编辑 Kubernetes 为 ELB 创建的安全组的入站 出站规则 我无法在文档中找到任何内容 也没有找到任何可以在网上其他地
  • 使用 jinja 的 Ansible set_fact 列表

    我正在尝试学习 jinja 和 Ansible 这是在 RHEL 7 9 上 ansible 2 9 27 ansible python module location usr lib python2 7 site packages ans