mysql_grants.present无法在salt-stack中执行

时间:2014-07-30 22:34:12

标签: salt-stack

我有以下状态公式:

crm01.dbperms2:
  mysql_grant.present:
    - grant: all privileges
    - database: '*.*'
    - user: tester2
    - host: 10.1.0.2

当我执行state.sls时,我收到以下错误:

   ID: crm01.dbperms2
    Function: mysql_grants.present
      Result: False
     Comment: Failed to execute: "GRANT all privileges ON *.* TO tester2@10.1.0.2" (MySQL Error 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES))
     Changes:  

然而,如果我手动添加授权,那么在执行state.sls之后我不会收到任何错误:

   ID: crm01.dbperms1
    Function: mysql_grants.present
      Result: True
     Comment: Grant all privileges on *.* to bup@10.1.0.2 is already present
     Changes:  

我不知道我做错了什么。 是否有人知道如何通过salt-stack向mysql中的用户正确授予权限?

TIA

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,发现我需要添加连接凭据 - 在这种情况下,我使用了root登录。我也看到过一些人们指定connection_host的情况,但我似乎并不需要它。

crm01.dbperms2:
    mysql_grant.present:
        - grant: all privileges
        - database: '*.*'
        - user: tester2
        - host: 10.1.0.2
        - connection_user: root
        - connection_pass: {{pillar.root_db_password}}

答案 1 :(得分:1)

我知道这是一个古老的问题,但这就是我如何做到的。

我添加了.my.cnf文件,其中包含mysql用户和密码。这可以通过将文件放在主目录中来为任何用户完成。

/root/.my.cnf:
  file:
    - managed
    - source: salt://files/mysql/root-my.cnf
    - user: root
    - group: root
    - mode: 0600
    - template: jinja

文件的内容看起来像这样。

[client]
  user=root # any user having grant permission
  password = {{ pillar['mysql']['server']['root_password'] }} # Password stored in pillar file.

在mysql柱文件(任何支柱文件)中添加以下行。这告诉minion从哪里读取mysql连接所需的参数,例如un,pw,host,port等。

mysql.default_file: /root/.my.cnf

现在您可以使用任何需要用户权限的mysql_database, mysql_user, mysql.grant mysql模块。