J'essaie de convertir une chaîne qui a été analysée en utilisant une expression régulière en un nombre afin que je puisse la multiplier, en utilisant Jinja2. Ce fichier est un modèle à utiliser dans un script ansible.
J'ai une série de items
qui prennent toutes la forme de <Word><number>
tel que aaa01
, aaa141
, bbb05
.
L'idée était d'analyser le mot et le numéro (en ignorant les zéros non significatifs) et de les utiliser plus tard dans le modèle.
Je voulais manipuler le nombre par multiplication et l'utiliser. Voici ce que j'ai fait jusqu'à présent ''
{% 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 }}
Avec le modèle ci-dessus, j'obtiens une erreur coercing to Unicode: need string or buffer, int found
qui, je pense, me dit qu'il ne peut pas convertir la chaîne en entier, mais je ne comprends pas pourquoi. J'ai vu des exemples faire cela et travailler.
Vous devez convertir la chaîne en entier après le nombre d'expressions régulières:
{% set number = get_Host_number() | int %}
Et puis il n'y a pas besoin de | int
à l'intérieur get_Host_range
macro.