【问题标题】:Ansible raw & quotingAnsible 原始和引用
【发布时间】:2015-05-10 15:26:11
【问题描述】:

使用 Ansible 原始模块实现 mysql 请求的正确方法是什么?

ansible host -m raw -a 'mysql mydb -e "SELECT lastname FROM table WHERE fistname = 'Joe'"' --su -vvvv

这不起作用并给我以下输出

<host> 
<host> PubkeyAuthentication=no ConnectTimeout=10 'su  root -c "$SHELL -c '"'"'echo SUDO-SUCCESS-sbqanpltaxkqfzxjdnpjytpnytyhrvow; mysql mydb -e "SELECT lastname FROM table WHERE firstname=Joe"'"'"'"' GSSAPIAuthentication=no User=user ControlPath=/home/user/.ansible/cp/ansible-ssh-%h-%p-%r ControlMaster=auto ControlPersist=60s
host | FAILED | rc=1 >>

value: -c: line 0: unexpected EOF while looking for matching `''
value: -c: line 1: syntax error: unexpected end of file
debug3: mux_client_read_packet: read header failed: Broken pipe
debug2: Received exit status from master 1
Shared connection to host closed.


ERROR 1054 (42S22) at line 1: Unknown column 'firstname' in 'where clause'

如果我想逃跑:

ansible host -m raw -a 'mysql mydb -e \"SELECT lastname FROM table WHERE fistname = 'Joe'\"'

Ansible 删除命令中的单引号,给出此输出:

<host> 
<host> PubkeyAuthentication=no ConnectTimeout=10 GSSAPIAuthentication=no   User=user 'su  root -c "$SHELL -c '"'"'echo SUDO-SUCCESS-dmbzdeiqiygmuoebxlswxfzdaxxutgqp; mysql mydb -e \"SELECT value FROM table WHERE firstname=Joe\"'"'"'"' ControlPath=/home/user/.ansible/cp/ansible-ssh-%h-%p-%r ControlMaster=auto ControlPersist=60s
host | FAILED | rc=1 >>
ERROR 1054 (42S22) at line 1: Unknown column 'firstname' in 'where clause'
debug3: mux_client_read_packet: read header failed: Broken pipe
debug2: Received exit status from master 1
Shared connection to host closed.

【问题讨论】:

    标签: mysql escaping quotes ansible


    【解决方案1】:

    根据 Ansible 文档,the raw module 用于执行“低级且肮脏的 SSH 命令”,并且只应在几个非常特殊的情况下使用。鉴于文档所述,您根本不应该使用此模块来尝试调用 mysql。

    您可能想要做的是使用command(或shell)模块:

    $ ansible -i ./hosts localhost -m command -a 'mysql -u user -ppass -h mydbhost -e "show databases"'
    

    我刚刚尝试过,它按预期工作。

    【讨论】:

    • 我的问题本质上是关于引用问题和原始模块或外壳在此目的中的行为方式相同。问题是对于大量主机上的脏命令,原始模块比 shell 和命令模块更快。事实上,我找到了解决报价问题的方法,我会尽快发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多