问题标签 [ansible-template]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
10391 浏览

ansible - 如何获取服务器名称列表并将资源 URI 和端口附加到每个服务器名称?

我从 Ansible 清单中合并了两个列表:

输出是:

有了上面的结果,我需要https://在前面附加一个端口号,在每个元素的后面附加一个端口号。然后我需要将其转换为服务器配置的逗号分隔列表。

在这个例子中,我想要:https://server01:8000,https://server02:8000,https://server03:8000

我尝试使用连接:

这部分工作,但它留下了没有端口的最后一个服务器。

我怎样才能实现我的目标?

0 投票
1 回答
4599 浏览

ansible - dictsort 在 Ansible/Jinja2 中产生什么数据类型?

解释

假设我有一个字典mydict设置为{ "key1": "value1" }

  • Ansible中dictsortfilter ( mydict|dictsort) 的结果似乎是一个包含另一个列表的列表:

    /li>
  • 但是,当直接在 Jinja2 模板中访问该列表的第一个元素时(mydict|dictsort)[0],它呈现出一个奇怪的外观:

    /li>
  • 然后,如果我设置一个值为 的事实(mydict|dictsort),它的行为就像一个常规列表 - 访问第一个元素并[0]导致:

    访问其[0]元素返回key1.

  • 但是如果我用 的值设置一个事实(mydict|dictsort)[0],它的行为就像一个字符串——访问[0]元素返回第一个字符,即(

  • 另一方面,如果我直接访问子元素,例如(mydict|dictsort)[0][0],它的行为就像一个列表,即返回key1

问题

  • 是什么(u'key1', u'value1')?产生什么样的物体dictsort

  • 如何以dictsort一致、可靠的方式访问结果?


完整剧本:

完整成绩单:

copy我用/检查了值,content它们与debug's 相同(缩进除外),因此debug为了清楚起见发布结果。

0 投票
3 回答
4643 浏览

variables - 如何忽略 j2 模板文件中的 jinja2 大括号 {{}}

我有一个 j2 文件,我想编辑并复制到我的远程服务器(作为我的 ansible 游戏的一部分)。该文件有几个用大括号表示的 3 个变量{{ }}。我怎样才能只针对命名的第二个变量{{ bar }}并忽略文件中的其他 2 个变量,以便将它们单独放置并复制到我的远程服务器?例如,我的 test.j2 文件包含:

{{ bar }}我可以在我的 ansible playbook 中明确地处理变量吗?如果是这样,我将如何(在语法上)在我的 ansible 剧本中编写它?

0 投票
1 回答
1264 浏览

ansible - Ansible 和 Jinja2 循环逻辑

变量文件createuser

合理的逻辑:

内容sshconfig.j2

我得到的输出/etc/ssh/sshd_config

我需要的输出:

请帮忙。

0 投票
2 回答
4882 浏览

ansible - 键/值键中的 Ansible 变量

我将 env 变量传递给 ansible playbook 中的 Docker 容器,如何在 env 的键/值中的键中设置 Ansible 变量?

所以这:

变成这样:

0 投票
1 回答
1830 浏览

ansible - 从 Jinja2 模板为多个主机生成单个配置

问题:鉴于 Ansible 的性质,我有 2 个任务按(预期)顺序执行。据我了解,每个任务只能执行一个模块。

任务 1 - 从网络设备收集事实信息(序列号、版本等)。

任务 2 - 使用任务 1 中收集的信息呈现模板

理想结果:由于我正在循环访问大量网络设备,我的理想结果是一次选择一个设备,从中收集信息,然后使用该信息渲染模板,然后转到循环中的另一个设备,然后很快。

方法:我想保持相同的语法,在任务 1 上将事实保存在文件 (.json) 中,在任务 2 上,读取 JSON 文件并获取我感兴趣的变量。

有没有更好的方法来做到这一点?(应该不止一个)

我目前所拥有的不符合我的目的,因为模板呈现时,它只包含有关最后一个设备的信息:

任务:角色/juniper.junos/tasks/main.yaml

模板:~/Ansible/roles/juniper.junos/templates/template.j2

理想输出:“~/Ansible/Ouput/Facts/Device_facts.yml”

0 投票
1 回答
1056 浏览

ansible - Ansible - 将字符串与现有变量组合以注册到另一个变量中

我想将一个事实集与set_facts一个字符串变量结合起来,并将其注册为一个新变量。

我认为,我们不能在 Ansible 剧本中注册新变量。那么我可以set_facts再次使用将先前set_fact变量与现有变量结合起来吗?

我不确定这里的语法。

这是一个例子:

现在我想将两个字符串与逗号结合起来,得到一个像这样的变量值:

0 投票
1 回答
2558 浏览

json - Ansible: parsing/concatenating output of getent module

I try to set up chroot for sftp users, so that they can see user/group names on ls -l as per this article. To this end I need to get output of getent command and place it into /chroots/{{ user.username }}/etc/passwd file.

I try to use Ansible to replace this command getent passwd sftpuser > /chroots/sftpuser/etc/passwd as follows:

The 'getent_passwd' looks as follows:

But I get this error: FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ getent_passwd | from_json }}): expected string or buffer"}

  1. What is the proper way to get those values supplied by getent_passwd into one flat string joined by ":"?
  2. Is it safe to use genent module with key: "root" this way instead of echo "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd?
  3. one can run getent passwd user1 user2 - is it possible to supply two keys to the ansible's getent module somehow?
0 投票
1 回答
9328 浏览

ansible - 使用 Ansible 和 Jinja2 将 Unicode 转换为字符串

我需要帮助将 Unicode 变量转换为字符串,以便下面的 Ansible 构造起作用。

在这种特殊情况下,我想使用该item.keys()方法来获取当前env名称(即uat),但我得到[u'uat']了。我一直在搜索互联网,但找不到转换[u'uat']为简单uat.

defaults/main.yml

tasks/main.yml

tasks/dosomething.yml

错误信息:

或者,我也欢迎其他方法,只要数据结构(即defaults/main.yml文件)保持不变。

0 投票
1 回答
14270 浏览

ansible - ansible 输出打印不需要的东西。如何格式化和仅显示特定数据

我在 centos 中使用 ansible 2.4,尝试在远程服务器中运行以下脚本并获取输出。这里的问题是 yum 信息输出也以 json 格式显示。但我只需要显示输出。如何删除 json 格式。

我也是回调模块的新手。请帮我解决这个问题。

是否可以仅显示 stdout_lines 值。