运行一个可以完成工作的Yaml脚本,但它不断给我带来语法错误

时间:2019-06-20 13:37:06

标签: database ansible yaml mariadb

好,所以我正在运行此脚本,该脚本可以正常工作,它可以实现我想要的功能:连接到所有路由器,查询设备并将数据存储在数据库中,但是令我感到羞愧的是我遇到了语法错误。 错误是: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,尝试了Internet上的各种答案,但仍未解决。

- 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 :(得分:0)

您想要的是stdin: module parameter

range

摆脱由 - 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 }}"); 引起的缩进错误,该错误未出现在外壳程序期望的位置。

实际上,真正的解决方案将是create a dedicated ansible module,它将使用Python DB API来避免在仅插入EOF和{{ 1}}直接转换为SQL文字(MySQL可能会接受,但Maria DB documentation表示对字符串文字使用单引号而不是双引号)