Назад | Перейти на главную страницу

Как проверить числовую строку

Я использую модуль 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.