Jinja2を使用して、正規表現を使用して解析された文字列を数値に変換できるように変換しようとしています。このファイルは、ansibleスクリプト内で使用されるテンプレートです。
items
のシリーズがあり、すべて<Word><number>
といった aaa01
、aaa141
、bbb05
。
アイデアは、Wordと数値を解析し(先行ゼロを無視して)、テンプレートで後で使用することでした。
乗算で数値を操作して使用したかったのです。以下はこれまでにやったことです `` `
{% macro get_Host_number() -%}
{{ item | regex_replace('^\D*[0]?(\d*)$', '\\1') }}
{%- endmacro %}
{% macro get_Host_name() -%}
{{ item | regex_replace('^(\D*)\d*$', '\\1') }}
{%- endmacro %}
{% macro get_Host_range(name, number) -%}
{% if name=='aaa' %}
{{ ((number*5)+100) | int | abs }}
{% Elif name=='bbb' %}
{{ ((number*5)+200) | int | abs }}
{% else %}
{{ ((number*5)+300) | int | abs }}
{% endif %}
{%- endmacro %}
{% set number = get_Host_number() %}
{% set name = get_Host_name() %}
{% set value = get_Host_range(name, number) %}
Name: {{ name }}
Number: {{ number }}
Type: {{ value }}
上記のテンプレートを使用すると、エラーが発生しますcoercing to Unicode: need string or buffer, int found
私はそれが文字列を整数に変換できないと私に言っていると思うが、私は理由を理解していない。これを実行して動作する例を見てきました。
正規表現の後に文字列をintにキャストする必要があります。
{% set number = get_Host_number() | int %}
そして、| int
内のget_Host_range
マクロは不要です。