我正在使用mysql_user
模块尝试添加用户和权限。我在以下任务中收到“无效权限字符串”错误。
- name: Add api user
mysql_user:
name="user_name"
host="{{ item }}"
password={{ mysql_password }}
priv={{ mysql_project_database }}.console_users:"SELECT (col_one, col_two)"
with_items:
- "%"
tags:
- mysql-user
我正在从命令行运行任务,如下所示:
ansible-playbook playbook.yml -i inventory/develop -vv --tags=mysql-user
导致以下错误:
failed: [192.168.37.100] => (item=%) => {"failed": true, "item": "%"}
msg: invalid privileges string: Invalid privileges specified: frozenset(['SELECT (COL_ONE', ' COL_TWO)'])
我不是百分百肯定,但我认为这个问题与特权中的空间有关。我似乎无法摆脱它或用引号解决它(我已经看到了一些地方的建议)。
我试过了:
SELECT
- 作品\
转义空间 - 失败我目前正在Mac OSX 10.10.2上通过Homebrew安装ansible 1.8.4。
该剧本正在配置一个Ubuntu 14.04盒子和MySQL 5.5.41-0ubuntu0.14.04.1(Ubuntu)
当然,我错过了一些明显的东西。有什么建议吗?
更新
调试输出:
TASK: [console | Add api user] ************************************************
<192.168.37.100>
<192.168.37.100> host=% password=VALUE_HIDDEN name=user_name priv=db_name.console_users:"SELECT (col_one, col_two)"
<192.168.37.100> IdentityFile=/Users/jeremykendall/.ssh/id_rsa ConnectTimeout=10 PasswordAuthentication=no KbdInteractiveAuthentication=no User=deploy ForwardAgent=yes PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey StrictHostKeyChecking=no
<192.168.37.100>
<192.168.37.100> IdentityFile=/Users/jeremykendall/.ssh/id_rsa ConnectTimeout=10 'sudo -k && sudo -H -S -p "[sudo via ansible, key=sxqmfmrnzwqhgohgejmdydblzjczuvyr] password: " -u root /bin/sh -c '"'"'echo SUDO-SUCCESS-sxqmfmrnzwqhgohgejmdydblzjczuvyr; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/deploy/.ansible/tmp/ansible-tmp-1425679033.3-193113161035706/mysql_user; rm -rf /home/deploy/.ansible/tmp/ansible-tmp-1425679033.3-193113161035706/ >/dev/null 2>&1'"'"'' PasswordAuthentication=no KbdInteractiveAuthentication=no User=deploy ForwardAgent=yes PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey StrictHostKeyChecking=no
failed: [192.168.37.100] => (item=%) => {"failed": true, "item": "%"}
msg: invalid privileges string: Invalid privileges specified: frozenset(['SELECT (COL_ONE', ' COL_TWO)'])
FATAL: all hosts have already failed -- aborting
答案 0 :(得分:2)
目前这是Ansible MySQL模块中的一个未解决的问题。
在模块开始验证模块中硬编码列表的权限后启动。通过检查新权限列表是否是有效权限列表的子集来完成验证。 当然,SELECT,UPDATE等都在列表中。但是SELECT(columnname)显然不是。验证逻辑不够智能。
这解释了为什么它之前有效,现在不再有用。
您可以在此处找到包含修复的问题报告:https://github.com/ansible/ansible-modules-core/issues/1120
更新30.06。:修复程序已提交到Ansible存储库,应该会出现在下一个稳定版本中:https://github.com/ansible/ansible-modules-core/commit/4ee18957dc95db427fec5a0cd66b6257b549213b
答案 1 :(得分:0)
我的剧本中有这样的东西正常工作:
priv=db1.table_name1:SELECT,UPDATE(visible,refid,user_signature)/db2.table_name2:SELECT,INSERT
有什么好处?所以对你的:
priv={{ mysql_project_database }}.console_users:SELECT(col_one,col_two)
答案 2 :(得分:0)
这对我有用。
# cat stackoverflow_28908155.yml
---
- hosts: localhost
user: ansible
tasks:
- name: Add api user
mysql_user: >
name="combo"
host="{{ item }}"
password="bogFanJoadFojBacUlvimudFilpUrcac"
priv=dashboard.metrics:"SELECT (report_id, category)"
with_items:
- "%"
tags:
- mysql-user
# mysql -e 'desc dashboard.metrics'
+-----------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| report_id | int(11) | NO | MUL | NULL | |
| category | varchar(255) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| value | decimal(12,6) | YES | | NULL | |
+-----------+---------------+------+-----+---------+----------------+
# ansible-playbook stackoverflow_28908155.yml
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [Add api user] **********************************************************
changed: [localhost] => (item=%)
PLAY RECAP ********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
# mysql -Bse 'select Host,User,Password from mysql.user where User="combo";'
% combo *5E916E80BFCBBEEDFEB614DEF49616F7F124D6EE
答案 3 :(得分:0)
最近看起来空间的处理可能已经改变了。由于&#34;,SUPER&#34 ;;我的mysql_user运行在最近的ansible版本中开始失败。修改为&#34;,SUPER&#34;。