web-dev-qa-db-ja.com

文字列のリストの各項目に追加するにはどうすればよいですか?

IPアドレスを含む文字列のリストがあります。それぞれにポート番号を付けたい。 python私はそれを次のようにします:

ip_list = [(ip + ":" + port) for ip in ip_list]

...しかし、Jinjaはリスト内包表記をサポートしていません。現時点では、一度に1項目ずつ新しいリストを作成して、問題を解決しています。

{%- set ip_list = magic() %}
{%- set new_ip_list = [] %}
{%- for ip in ip_list %}
  {%- do new_ip_list.append(ip + ":" + port) %}
{%- endfor %}

これはテンプレートの途中で醜くて苛立たしいものであり、仕事を成し遂げるためのより良い方法があるはずだと感じています。できればワンライナー。

これはカスタムフィルターで実行できることはわかっていますが、作成していないソフトウェア(saltstack)にテンプレートを提供しているため、(私が知る限り)それらは使用できません。

7
Andrew

どの言語でもリスト内包表記がないのは面倒です!

「| format」フィルターを使用できますか?

{% for ip in magic() -%}
curl_Host_port:
  cmd.run:
    - name: {{ "curl 'http://%s:80/'"|format(ip) }}
{% endfor -%}
1
Dan Garthwaite

これは決してきれいではありませんが、これは私にとってはうまくいきました。 「!」を使用してユーザー名のリストを作成する必要がありました。それぞれの前に。このリストは、ユーザー間にコンマを入れた行に配置する必要があります。

私のユーザーリスト(変数、デフォルトなどで設定)は次のようになります。

excluded_users: ["fred","jim","bob","arthur"]

私のテンプレートにはこれがあります:

Match user *,!root{% if excluded_users|length > 0 %},!{{ excluded_users|join(",!") }}{% endif %}

...レンダリングして保存すると、次のようになります。

Match user *,!root,!fred,!jim,!bob,!arthur

私が言ったように、特にきれいではありません;-)

1
Ralph Bolton