#ansible
#ansible
Вопрос:
Я хочу добавить строку в свою базу шаблонов jinja на основе числовых строк в моем файле. например. мой файл, имеющий 3 строки, тогда шаблон jinja должен быть таким, как показано ниже. предположим, что моя строка увеличивается в файле, тогда строка должна автоматически добавляться в шаблон jinja во время покраснения. Я беру количество из файла
{% for item in join_out.stdout_lines %}
<tr>
{% set row = item.split(" ") %}
<td align="center">{{ row[0] | replace('"','') }}</td>
<td align="center">{{ row[1] | replace('"','') }}</td>
<td align="center">{{ row[2] | replace('"','') }}</td>
</tr>
{% endfor %}
</table>
Комментарии:
1. вы должны иметь возможность выполнять итерации по
row
использованиюfor
цикла после его разделения. может быть, вызвать этоrows
вместо этого, поскольку это несколько строк
Ответ №1:
Просто добавьте новый цикл for в set row = item.split(» «), чтобы перебирать элементы в этом списке, и вам никогда не придется использовать индекс списка.
{% for item in join_out.stdout_lines %}
<tr>
{% set rows = item.split(" ") %}
{% for row in rows %}
<td align="center">{{ row | replace('"','') }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Комментарии:
1. Хотя это может ответить на вопрос OPS, вам следует добавить некоторое объяснение того, что именно делает ваш код и почему он устраняет проблему.
Ответ №2:
Избавьтесь от кавычек и сначала разделите строки. Затем просто создайте таблицу. Например
shell> cat playbook.yml
- hosts: localhost
vars:
join_out:
stdout_lines:
- '"A1" "B1"'
- '"A2" "B2"'
tasks:
- set_fact:
my_data: "{{ my_data|default([]) [item.split(' ')] }}"
loop: "{{ join_out.stdout_lines|
map('regex_replace', my_regex, my_replace)|
list }}"
vars:
my_regex: '"'
my_replace: ''
- copy:
content: |
<table>
{% for line in my_data %}
<tr>
{% for row in line %}
<td align="center">{{ row }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
dest: table.html
дает
shell> cat table.html
<table>
<tr>
<td align="center">A1</td>
<td align="center">B1</td>
</tr>
<tr>
<td align="center">A2</td>
<td align="center">B2</td>
</tr>
</table>