Выполнение playbook под конфигурацию mikrotik

Возникла следующая проблема. При воде значений которые записываются в переменные которые прописаны в playbook выдает данную ошибку не могу понять как ее устранить и что написано не так

введите сюда описание изображения

файл hosts в котором прописано подключение

[mikrotik_ovpn_pki]
test1 ansible_ssh_port=22 ansible_ssh_user=admin ansible_ssh_host=11.11.11.11

файл playbook

---
- hosts: all
  become: true
  vars:
   ssh_user: admin

  vars_prompt:
  - name: ssh_ip
    prompt: "Введите ip устройства для доступа к нему"
    private: no
  - name: name
    prompt: "Введите имя устройства"
    private: no
  - name: iplan
    prompt: "Внутрений адрес устройства без последнего октета например: 666.666.6"
    private: no
  - name: akt
    prompt: "Введите последний актет ip адреса например: 66"
    private: no
  - name: nic
    prompt: "Введите name точки например: ap666"
    private: no

  tasks:
  - name: "generate client script from template"
    template: scr=templates/mikrotik_def_conf1.j2 dest=template_configs/mikrotik_def_conf1_{{ name }}.rsc backup=no
    tags: generate
  - name: "copy sert on client dev"
    command: "scp -oStrictHostKeyChecking=no template_configs/mikrotik_def_confl_{{ name }}.rsc {{ ssh_user }}@{{ ssh_ip }}:"
    tags: import
  - name: "import script on client device"
    command: ssh -oStrictHostKeyChecking=no {{ ssh_user }}@{{ ssh_ip }} "/import mikrotik_def_conf1_{{ name }}.rsc"
    tags: import

Ответы (2 шт):

Автор решения: eri

Таск такой должен через модуль script а не через command.

модуль command выполняет команду на целевом хосте - там стоит написать "/import mikrotik_def_conf1_{{ name }}.rsc" без ssh, потому что ансибл уже подключился, но она запускается напрямую без шела - не уверен что микротик примет её.

модуль shell может сработать там где не пойдет command

модуль script выполняет команду на хосте ансибла - тут команда пишется с ssh, scp, rsync и прочим

модуль template сам может копировать шаблон, scp наверное лишний

→ Ссылка
Автор решения: Aleksey GF8

Во-первых, Ansible ругается, что вы используете зарезервированное имя name в качестве имени переменной.

Во-вторых, Ansible вызывает специальный модуль setup перед выполнением первой таски. Модуль setup пытается приконнектиться к mikrotik-хост чтобы собрать факты (информацию) о хосте: IP адрес, дисковое пространство, архитектура процессора и т.д. Но это заканчивается неудачей, так как необходимо наличие интерпретатора python на mikrotik-хосте, которого там нет. Аналогично ругается на команды sftp, scp.

Вам поможет вот это:

gather_facts: false

И далее использовать для загрузки файла на mikrotik :

ansible_connection: network_cli

ansible_network_os: routeros

tasks:

- name: file upload

  net_put:

    src: ./file_script.rsc

    protocol: sftp

Версия Ansible должна быть >=2.6

→ Ссылка