4 votes

Comment puis-je vérifier une chaîne numérique

Je suis en train d'utiliser le module assert pour vérifier mes variables définies à travers la ligne de commande. J'ai besoin de vérifier si ma variable ne contient que des chiffres (GID). Comment puis-je faire cela? J'ai essayé les options suivantes, mais elles n'ont pas fonctionné dans mon cas

my_var est un nombre

my_var|match('[0-9]')

4voto

GrueMaster Points 21

Vous pourriez vérifier que foo est un entier et non une chaîne de caractères et que c'est un nombre entier et positif comme ceci (notez que cela pourrait convenir dans votre cas si foo est une variable de type str et non de type int, dans ce cas, omettez la première vérification) :

- name: Assurez-vous que foo est un nombre entier positif
  assert:
    that:
      - foo | type_debug == "int"
      - foo is regex("^[0-9]+$")

2voto

Michael Hampton Points 232226

Vous pouvez utiliser un filtre qui convertit la chaîne en un entier.

Par exemple:

  when: ansible_distribution_major_version|int == 7

Dans le cas d'une chaîne qui ne contient pas réellement un nombre, cela renverra 0.

2voto

Je pense qu'il doit y avoir une meilleure façon de faire cela, mais cela devrait résoudre votre problème immédiat. Ceci est un modèle de test qui démontre la logique; la solution spécifique à votre question implique uniquement la définition de my_var en haut et la section "Exemple pratique" à la fin... le reste ne sont que des cas de test.

Quoi qu'il en soit, l'idée générale ici est que vous prenez votre variable originale my_var, la passez par la conversion en entier (comme suggéré par Michael Hampton ci-dessus... désolé, c'est ma première réponse et je ne sais pas comment créer un lien hypertexte mais je pense que vous pouvez le trouver :)) et ajoutez ensuite une clause when aux tâches suivantes qui vérifie si le résultat de la conversion en entier correspond à la valeur d'origine. En d'autres termes, si la conversion en entier n'a rien changé, alors la valeur d'origine devait déjà être un entier. Vous pouvez également utiliser des "blocs" Ansible pour appliquer cette clause when à plusieurs tâches à la fois.

---
## Exécutez ceci avec quelque chose comme "ansible-playbook -l localhost test.yml"
- name: Playbook de test
  hosts: all

  vars:
    - input_value_numeric : '12345'
    - input_value_alpha   : 'pas_de_nombres_ici'
    - input_value_mixed   : '123valise45'

    - my_var: '123'

  tasks:
    - name: Créer un fait converti à partir de l'entrée (numérique)
      set_fact:
          converted_input_value_numeric: "{{ input_value_numeric | int }}"
    - name: Afficher la valeur d'origine (numérique)
      debug:
          var: input_value_numeric
    - name: Afficher la valeur convertie (numérique)
      debug:
          var: converted_input_value_numeric

    - name: Imprimer cette ligne si la valeur était entièrement numérique (numérique)
      debug:
          msg: "Valeur entièrement numérique : {{ input_value_numeric }}"
      when:
          - input_value_numeric == converted_input_value_numeric

    ## Exemple avec une valeur d'entrée entièrement numérique
    ###########################################################################

    - name: Créer un fait converti à partir de l'entrée (alphabétique)
      set_fact:
          converted_input_value_alpha: "{{ input_value_alpha | int }}"
    - name: Afficher la valeur d'origine (alphabétique)
      debug:
          var: input_value_alpha
    - name: Afficher la valeur convertie (alphabétique)
      debug:
          var: converted_input_value_alpha

    - name: Imprimer cette ligne si la valeur était entièrement numérique (alphabétique)
      debug:
          msg: "Valeur entièrement numérique : {{ input_value_alpha }}"
      when:
          - input_value_alpha == converted_input_value_alpha

    ## Exemple avec une valeur d'entrée entièrement alphabétique
    ###########################################################################

    - name: Créer un fait converti à partir de l'entrée (mixte)
      set_fact:
          converted_input_value_mixed: "{{ input_value_mixed | int }}"
    - name: Afficher la valeur d'origine (mixte)
      debug:
          var: input_value_mixed
    - name: Afficher la valeur convertie (mixte)
      debug:
          var: converted_input_value_mixed

    - name: Imprimer cette ligne si la valeur était entièrement numérique (mixte)
      debug:
          msg: "Valeur entièrement numérique : {{ input_value_mixed }}"
      when:
          - input_value_mixed == converted_input_value_mixed

    ## Exemple avec une valeur d'entrée mixte
    ###########################################################################

    - name: Créer un fait converti à partir de l'entrée (mixte)
      set_fact:
          converted_input_value_mixed: "{{ input_value_mixed | int }}"
    - name: Afficher la valeur d'origine (mixte)
      debug:
          var: input_value_mixed
    - name: Afficher la valeur convertie (mixte)
      debug:
          var: converted_input_value_mixed

    - name: Imprimer cette ligne si la valeur était entièrement numérique (mixte)
      debug:
          msg: "Valeur entièrement numérique : {{ input_value_mixed }}"
      when:
          - input_value_mixed == converted_input_value_mixed

    ## Exemple pratique
    ###########################################################################

    - name: Créer un fait converti à partir de votre variable d'entrée
      set_fact:
          my_var_numeric_conversion: "{{ my_var | int }}"

    - name: Faire quelque chose si la valeur était numérique
      debug:
          msg: "my_var est entièrement numérique : {{ my_var }}"
      when:
          - my_var == my_var_numeric_conversion

    - name: Faire quelque chose si la valeur n'était PAS numérique
      debug:
          msg: "my_var n'est PAS entièrement numérique : {{ my_var }}"
      when:
          - my_var != my_var_numeric_conversion

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X