好,所以我正在运行此脚本,该脚本可以正常工作,它可以实现我想要的功能:连接到所有路由器,查询设备并将数据存储在数据库中,但是令我感到羞愧的是我遇到了语法错误。
错误是: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
...
答案 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表示对字符串文字使用单引号而不是双引号)