我正在尝试使用ansible剧本执行一个简单的"SHOW DATABASES;"命令,但在执行命令时会卡住。
我尝试了不同的选择
- hosts: servers
become: true
vars_prompt:
- name: "db_passw"
prompt: "DB root password?"
tasks:
- name: Configure Database
shell: |
mysql -u root -p {{ db_passw }} < ~/sql_query.sql
也
- hosts: servers
become: true
vars_prompt:
- name: "db_passw"
prompt: "DB root password?"
tasks:
- name: Configure Database
shell: |
mysql -u root -p {{ db_passw }} -e "SHOW DATABASES;"
我也尝试,作为一个测试,明确输入密码
- hosts: servers
become: true
vars_prompt:
- name: "db_passw"
prompt: "DB root password?"
tasks:
- name: Configure Database
shell: |
mysql -u root -p <root_passw> -e "SHOW DATABASES;"
但它总是卡在同一点上。我尝试在远程机器外壳中执行上面的 mysql 命令,它们工作没有问题。我还尝试在mysql的命令之前执行其他命令,并且它们正在执行。
ansible 和 mysql 之间有什么问题吗?
我知道有一个用于Ansible的MySQL模块,但它的功能太有限了。
谢谢
对
我有用。下面的玩法
- hosts: dbserver
tasks:
- command: |
mysql -e "SHOW DATABASES;"
register: result
- debug:
var: result
给:
TASK [debug]
ok: [dbserver] => {
"result": {
"changed": true,
"cmd": [
"mysql",
"-e",
"SHOW DATABASES;"
],
"delta": "0:00:00.010958",
"end": "2019-04-04 16:19:58.359100",
"failed": false,
"rc": 0,
"start": "2019-04-04 16:19:58.348142",
"stderr": "",
"stderr_lines": [],
"stdout":
...
当"成为:true"时,没有必要指定"-u root"。我还没有为 root 设置 MySQL 密码。