如何强制 Ansible 中的变量只有 3 个字符或只有数字?

How to force a variable in Ansible to be only 3 CHARS or only numbers?

我在 Ansible 中有以下任务:

- name: Run multiple queries
  community.general.hana_query:
    sid: "{{ sid | default('HDB') | upper }}"
    instance: "{{ instance | default('01') }}"

变量 sid 必须是 3 个字符。 变量 instance 可以是 0199 之间的任何数字。

我如何在脚本中强制执行它?

您是否希望任务仅在变量为 3 个字符或仅为数字时 运行 执行,否则跳过? 如果是这种情况,那么您可以简单地在 when 条件下进行检查并使用 lengthint 过滤器。

- name: Run multiple queries
  community.general.hana_query:
    sid: "{{ sid | upper }}"
    instance: "{{ instance }}"
  when:
    - sid | length == 3
    - instance | int

当变量不是 3 个字符或只有数字时,您是否希望 playbook 失败? 如果是这样,那么你可以在任务之前做一个断言。

- name: Check if variables are legit
  assert:
    that:
      - sid | length == 3
      - instance | int

或者您想 trim 变量以使其符合您的要求? 您可以用[:3]选择sid的前3个字符。 并执行 regex_replace 以删除 instance 中的所有非数字字符,然后选择前 2 个 [:2]

- name: Run multiple queries
  community.general.hana_query:
    sid: "{{ (sid | upper)[:3] }}"
    instance: "{{ (instance | regex_replace('[^0-9]+', ''))[:2] }}"