поиск по нескольким строкам с fail_when в ansible - PullRequest
0 голосов
/ 02 октября 2019

Команда, почему-то не в состоянии выяснить, что это за ошибка .. Я делаю поиск по нескольким строкам и не могу соответственно для каждой строки не найдена.

      - name: "Validate kubectl access and k8s node lables"
        debug:
          msg: "kubectl get nodes --show-labels -l nodeType={{item}}"
        with_items:
          - gpu
          - cpu
          - monitoring
        register: k8s_labelsresponse

      - debug:
          var: k8s_labelsresponse.stdout
        failed_when: '"nodeType=gpu" not in k8s_labelsresponse.stdout or "nodeType=cpu" not in k8s_labelsresponse.stdout or "nodeType=monitoring" not in k8s_labelsresponse.stdout'

выход:

TASK [Validate kubectl access and k8s node lables] 
ok: [target1] => (item=gpu) => {
    "msg": "kubectl get nodes --show-labels -l nodeType=gpu"
}
ok: [target1] => (item=cpu) => {
    "msg": "kubectl get nodes --show-labels -l nodeType=cpu"
}
ok: [target1] => (item=monitoring) => {
    "msg": "kubectl get nodes --show-labels -l nodeType=monitoring"
}
TASK [debug] **************************************************************************************************************************************************
fatal: [target1]: FAILED! => {"msg": "The conditional check '\"nodeType=gpu\" not in k8s_labelsresponse.stdout or \"nodeType=cpu\" not in k8s_labelsresponse.stdout or \"nodeType=monitoring\" not in k8s_labelsresponse.stdout' failed. The error was: error while evaluating conditional (\"nodeType=gpu\" not in k8s_labelsresponse.stdout or \"nodeType=cpu\" not in k8s_labelsresponse.stdout or \"nodeType=monitoring\" not in k8s_labelsresponse.stdout): Unable to look up a name or access an attribute in template string ({% if \"nodeType=gpu\" not in k8s_labelsresponse.stdout or \"nodeType=cpu\" not in k8s_labelsresponse.stdout or \"nodeType=monitoring\" not in k8s_labelsresponse.stdout %} True {% else %} False {% endif %}).\nMake sure your variable name does not contain invalid characters like '-': argument of type 'AnsibleUndefined' is not iterable"}

1 Ответ

0 голосов
/ 03 октября 2019

Прежде всего, ваша переменная k8s_labelsresponse является картой, поэтому у вас нет stdout. Взгляните на debug: var=k8s_labelsresponse Вы можете сделать эту переменную:

      msg:
        - kubectl get nodes --show-labels -l nodeType=gpu
        - kubectl get nodes --show-labels -l nodeType=cpu
        - kubectl get nodes --show-labels -l nodeType=monitoring

Но это решение очень уродливо, потому что его жесткий код. Я рекомендую создать динамическую переменную с помощью Jinja2 и set_fact:

- hosts: localhost
  vars:
    params:
      - cpu
      - gpu
      - monitoring
  tasks:
  - set_fact:
      k8s_labelsresponse: "{% for param in params -%}
        nodeType={{ param }}

        {% endfor %}"
  - debug:
      msg: "{{ k8s_labelsresponse.splitlines() }}"
    failed_when:  '"nodeType=gpu" not in k8s_labelsresponse  or "nodeType=cpu" not in k8s_labelsresponse or "nodeType=monitoring" not in k8s_labelsresponse'
...