Я использую модуль assert для проверки моих переменных, определенных через командную строку. Мне нужно проверить, содержит ли моя переменная только числа (GID). Как я могу это сделать? Я пробовал следующие варианты, но в моем случае они не работали
my_var is number
my_var|match('[0-9]')
Я чувствую, что должен быть лучший способ сделать это, но он должен решить вашу непосредственную проблему. Это тестовое пособие, демонстрирующее логику; конкретное решение вашего вопроса включает только my_var
определение вверху и раздел «Практический пример» в конце ... остальное - просто тестовые примеры.
В любом случае, общая идея здесь в том, что вы берете свой оригинальный my_var
переменную, передайте ее через целочисленное преобразование (как было предложено Майклом Хэмптоном выше ... извините, это мой первый ответ, и я не уверен, как сделать гиперссылку, но я думаю, вы можете ее найти :)), а затем добавьте предложение when для последующих задач, которые проверяют, соответствует ли результат целочисленного преобразования исходному значению. Другими словами, если целочисленное преобразование ничего не изменило, то исходное значение уже должно быть целым числом. Вы также можете использовать Ansible "блоки" применить это предложение when к нескольким задачам одновременно.
---
## Run this with something like "ansible-playbook -l localhost test.yml"
- name: Testing playbook
hosts: all
vars:
- input_value_numeric : '12345'
- input_value_alpha : 'no_numbers_here'
- input_value_mixed : '123luggage45'
- my_var: '123'
tasks:
- name: Create converted fact from input (numeric)
set_fact:
converted_input_value_numeric: "{{ input_value_numeric | int }}"
- name: Show original value (numeric)
debug:
var: input_value_numeric
- name: Show converted value (numeric)
debug:
var: converted_input_value_numeric
- name: Print this line if the value was fully numeric (numeric)
debug:
msg: "Value fully numeric: {{ input_value_numeric }}"
when:
- input_value_numeric == converted_input_value_numeric
## Example with pure numeric input value
###########################################################################
- name: Create converted fact from input (alpha)
set_fact:
converted_input_value_alpha: "{{ input_value_alpha | int }}"
- name: Show original value (alpha)
debug:
var: input_value_alpha
- name: Show converted value (alpha)
debug:
var: converted_input_value_alpha
- name: Print this line if the value was fully numeric (alpha)
debug:
msg: "Value fully numeric: {{ input_value_alpha }}"
when:
- input_value_alpha == converted_input_value_alpha
## Example with pure alpha input value
###########################################################################
- name: Create converted fact from input (mixed)
set_fact:
converted_input_value_mixed: "{{ input_value_mixed | int }}"
- name: Show original value (mixed)
debug:
var: input_value_mixed
- name: Show converted value (mixed)
debug:
var: converted_input_value_mixed
- name: Print this line if the value was fully numeric (mixed)
debug:
msg: "Value fully numeric: {{ input_value_mixed }}"
when:
- input_value_mixed == converted_input_value_mixed
## Example with mixed input value
###########################################################################
- name: Create converted fact from input (mixed)
set_fact:
converted_input_value_mixed: "{{ input_value_mixed | int }}"
- name: Show original value (mixed)
debug:
var: input_value_mixed
- name: Show converted value (mixed)
debug:
var: converted_input_value_mixed
- name: Print this line if the value was fully numeric (mixed)
debug:
msg: "Value fully numeric: {{ input_value_mixed }}"
when:
- input_value_mixed == converted_input_value_mixed
## Practical example
###########################################################################
- name: Create converted fact from your input variable
set_fact:
my_var_numeric_conversion: "{{ my_var | int }}"
- name: Do stuff if the value was numeric
debug:
msg: "my_var is fully numeric: {{ my_var }}"
when:
- my_var == my_var_numeric_conversion
- name: Do stuff if the value was NOT numeric
debug:
msg: "my_var is NOT fully numeric: {{ my_var }}"
when:
- my_var != my_var_numeric_conversion
Вы можете использовать фильтр, который изменяет строку на целое число.
Например:
when: ansible_distribution_major_version|int == 7
В случае строки, которая на самом деле не содержит числа, будет возвращено 0.