Запуск скрипта Yaml, который выполняет свою работу, но он продолжает давать мне синтаксическую ошибку - PullRequest
0 голосов
/ 20 июня 2019

Хорошо, так что я запускаю этот скрипт, который работает, он делает то, что я хочу: подключение ко всем маршрутизаторам, опрос оборудования и хранение данных в базе данных, но меня беспокоит, что я получаю эту синтаксическую ошибку. Ошибка: ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EOF' at line 1

Я использую MariaDB, пробовал разные ответы из интернета и до сих пор не решил.

- name: Connect to equipment and verify the status of routing table Conectare la echipamnete si verificare status tabela de rutare
  hosts: "router"
  gather_facts: true

  tasks:
  - name: Use show ip route command
    ios_command:
      commands: show ip route | begin Gateway of last

    register: output

  - name: Importa output catre baza de date controlnodedb
    shell: |
     mariadb -u ansible controlnodedb << EOF
     INSERT INTO ROUTE_TABLE (Device_Hostname,RouteTable) VALUES ("{{ inventory_hostname }}","{{ output.stdout }}");
     EOF

...

1 Ответ

0 голосов
/ 21 июня 2019

Вам нужен параметр stdin: модуля :

  - name: Importa output catre baza de date controlnodedb
    shell: mariadb -u ansible controlnodedb
    stdin: >-
       INSERT INTO ROUTE_TABLE (Device_Hostname,RouteTable)
       VALUES ("{{ inventory_hostname }}","{{ output.stdout }}");

, чтобы избежать ошибки отступа, вызванной тем, что EOF не появляется там, где ожидает оболочка.

На самом деле, реальным решением было бы создать выделенный модуль ANSI , который использовал бы Python DB API , чтобы избежать проблем с внедрением SQL, когда выпросто вставляют output.stdout и inventory_hostname непосредственно в литералы SQL (что, возможно, MySQL допускает, но в документации Maria DB сказано использовать одинарные кавычки, а не двойные кавычки, для строковых литералов)

...