Ansible условно на основе возвращаемых данных - PullRequest
0 голосов
/ 04 мая 2020

Я запускаю простой скрипт для добавления нового пользователя, когда этого пользователя не существует.

---
- name: gather facts
  hosts: r5
  #gather_facts: yes

  tasks:

  - name:
    ios_command:
      commands: sh run | s user
    register: username_contents

  - name: check if user exists, if not add user
    ios_config:
      lines: username test privilege 15 secret test
    when: ('test') not in username_contents.stdout

Ansible добавляет этого пользователя, как и ожидалось, но когда я снова запускаю этот тест, несмотря на наличие 'test' в переменной, он все еще добавляет его.

TASK [ios_command] ********************************************************************************************************************************************************************************
ok: [r5]

TASK [check if user exists, if not add user] ******************************************************************************************************************************************************
changed: [r5]

PLAY RECAP ****************************************************************************************************************************************************************************************
r5                         : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Вывод для 'sh run | s user ':

ok: [r5] => {
    "username_contents.stdout": [
        "username cisco privilege 15 secret 5 $1$rIId$7X8jj.iJiU3s4AKladf2dE/\nusername test privilege 15 secret 5 $1$aLpg$UnHXbCENzJxBonbdWshXA."
    ]
}

1 Ответ

0 голосов
/ 04 мая 2020

Решено:

Сетевые модули, поскольку они могут содержать выходные данные нескольких команд, структурируют стандартный вывод в виде списка строк.

Таким образом, если вы работаете единственной командой, то вы должны сделать:

когда: usr в username_contents ['stdout'] [0]

https://github.com/ansible/ansible/issues/69316#issuecomment -623659676

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...