2

我正在使用 SaltStack(带有 vagrant)/Ubuntu 12.04。

我的目标是安装 Mysql,创建数据库和用户并授予所有权限。

这个 SLS 文件有什么问题?

mysql_setup:
  debconf.set:
    - name: mysql-server
    - data:
        'mysql-server/root_password': {'type': 'string', 'value': '{{ pillar['database']['password'] }}'}
        'mysql-server/root_password_again': {'type': 'string', 'value': '{{ pillar['database']['password'] }}'}

mysql-server:
  pkg:
    - installed
    - require:
      - debconf: mysql_setup

mysql-base:
  mysql_database.present:
    - name: owncloud
  mysql_user.present:
    - name: owncloud
    - password: pass
  mysql_grants.present:
    - database: owncloud.*
    - grant: ALL PRIVILEGES
    - user: owncloud

我有这个错误:

[INFO    ] All specified answers are already set
[INFO    ] Completed state [mysql-server] at time 14:48:13.611204
[INFO    ] Running state [mysql-server] at time 14:48:13.644547
[INFO    ] Executing state pkg.installed for mysql-server
[INFO    ] Package mysql-server is already installed.
[INFO    ] Completed state [mysql-server] at time 14:48:13.695092
[DEBUG   ] LazyLoaded mysql_database.mod_init
[INFO    ] Running state [owncloud] at time 14:48:13.702359
[DEBUG   ] LazyLoaded mysql_database.present
[ERROR   ] State 'mysql_database.present' was not found in SLS 'mysql'

[DEBUG   ] LazyLoaded mysql_user.mod_init
[INFO    ] Running state [owncloud] at time 14:48:13.710744
[DEBUG   ] LazyLoaded mysql_user.present
[ERROR   ] State 'mysql_user.present' was not found in SLS 'mysql'

[DEBUG   ] LazyLoaded mysql_grants.mod_init
[INFO    ] Running state [mysql-base] at time 14:48:13.733003
[DEBUG   ] LazyLoaded mysql_grants.present
[ERROR   ] State 'mysql_grants.present' was not found in SLS 'mysql'
4

3 回答 3

5

除了@Utah_Dave 的建议之外,您可能还需要python-mysqldbAPT 包和mysqlpip 包,并且您需要连接信息,无论是在您的 minion 配置中还是提供给状态,可能像这样:

foo_db:
  mysql_database.present:
    - name: {{ pillar['SQL_DATABASE'] }}
    - connection_host: {{ pillar['SQL_HOST'] }}
    - connection_user: {{ pillar['SQL_ROOT_USER'] }}
    - connection_pass: {{ pillar['SQL_ROOT_PASSWORD'] }}
    - require:
      - pip: mysql

未来的状态可以像这样重用连接信息use:

sql_app_user:
  mysql_user.present:
    - name: {{ pillar['SQL_APP_USER'] }}
    - password: {{ pillar['SQL_APP_PASSWORD'] }}
    - host: '%'
    - use:
      - mysql_database: foo_db

这是为salt.modules.mysql记录的。要安装其他依赖项:

server_pkgs:
  pkg:
    - installed
    - pkgs:
      - python-dev
    - refresh: True

mysql_python_pkgs:
  pkg.installed:
    - pkgs:
      - libmysqlclient-dev
      - mysql-client
      - python-mysqldb
    - require:
      - pkg: server_pkgs

python-pip:
  pkg:
    - installed
    - refresh: False

mysql:
  pip.installed:
    - require:
      - pkg: python-pip
      - pkg: mysql_python_pkgs

这是我自己针对特定项目的状态的精简版本,因此它可能不是您需要的最少的东西,但它确实有效。

于 2015-05-18T18:38:56.510 回答
2

我知道这是一个老问题,但是当我搜索错误时它不断弹出:

无法 LazyLoad mysql.version:“mysql”虚拟返回 False:无法加载 mysql 执行模块:MySQLdb 和 PyMySQL 都不可用。

我在 Ubuntu 18.04 上,为我解决的问题是安装软件包

python3-mysqldb

显然,python 2.7 和 3 都已安装,salt 使用的是 3,而包 python-mysqldb 仅适用于 2.7。

我希望这将帮助其他任何人以同样的错误登陆这个问题。

于 2019-06-15T12:13:33.733 回答
0

这在您第二次运行状态时是否有效?或者在重新启动 salt-minion 守护进程之后?如果是这样,那是因为 mysql_* 状态不知道 mysql 服务器已安装。

您可以在此处看到mysql_grants状态要求该mysql.grant_exists函数已在 Salt 中加载。 https://github.com/saltstack/salt/blob/1fb606ef6beffecc3e34f18b9ce189db4fe4292f/salt/states/mysql_grants.py#L52

尝试- reload_modules: true像这样添加到您的 mysql-server 状态:

mysql-server:
  pkg:
    - installed
    - require:
      - debconf: mysql_setup
    - reload_modules: True
于 2015-05-18T16:19:29.977 回答