Я хочу выбрать данные из таблицы базы данных (здесь mysql) с помощью saltstack. В моем тестовом сценарии у меня есть хост Linux под названием salt-master. На этом хосте запущена база данных, мастер и миньон.
Моя цель - выбрать данные с помощью миньона, но в моей среде это не работает.
1) Вы видите данные в таблице. Сами по себе данные не имеют отношения к сценарию.
MariaDB [salt]> SELECT minion_id,qmgr,object_type,value from mqobjects;
+--------------+-------+-------------+-------+
| minion_id | qmgr | object_type | value |
+--------------+-------+-------------+-------+
| salt-minion2 | QM200 | port | 14200 |
| salt-minion2 | QM201 | port | 14201 |
| salt-minion2 | QM201 | port | 15201 |
| salt-minion2 | QM201 | qlocal | QL1 |
| salt-minion2 | QM201 | qlocal | QL2 |
| salt-minion3 | QM301 | port | 14300 |
| salt-minion3 | QM301 | port | 14301 |
| salt-minion3 | QM302 | port | 14302 |
+--------------+-------+-------------+-------+
8 rows in set (0.00 sec)
2) Использование исполняющего модуля mysql с бегуном дает мне результаты, которые я хочу получить.
salt-master:/srv/salt # salt-run salt.cmd mysql.query salt "SELECT minion_id,qmgr,object_type,value from mqobjects"
columns:
- minion_id
- qmgr
- object_type
- value
query time:
----------
human:
0.4ms
raw:
0.00037
results:
|_
- salt-minion2
- QM200
- port
- 14200
|_
- salt-minion2
- QM201
- port
- 14201
|_
- salt-minion2
- QM201
- port
- 15201
|_
- salt-minion2
- QM201
- qlocal
- QL1
|_
- salt-minion2
- QM201
- qlocal
- QL2
|_
- salt-minion3
- QM301
- port
- 14300
|_
- salt-minion3
- QM301
- port
- 14301
|_
- salt-minion3
- QM302
- port
- 14302
rows returned:
8
salt-master:/srv/salt #
3) То же самое с миньоном не вызывает ошибки, но и не дает никакого результата. Зачем?
salt-master:/srv/salt # salt salt-master mysql.query salt "SELECT minion_id,qmgr,object_type,value from mqobjects"
salt-master:
----------
salt-master:/srv/salt #
4) Тоже пробовал с файлом sls.
а) С проверкой наличия БД salt-master:/srv/salt # cat cmdb/MqObjects2Grains.sls
queryMqObjects:
mysql_query.run:
- name: salt
- database: mysql
- query: "SELECT minion_id,qmgr,object_type,value from mqobjects"
- check_db_exists: True
salt-master:/srv/salt # salt salt-master state.apply cmdb.MqObjects2Grains
salt-master:
----------
ID: queryMqObjects
Function: mysql_query.run
Name: salt
Result: None
Comment: Database salt is not present
Started: 10:32:33.146025
Duration: 31.427 ms
Changes:
Summary for salt-master
------------
Succeeded: 1 (unchanged=1)
Failed: 0
------------
Total states run: 1
Total run time: 31.427 ms
salt-master:/srv/salt #
б) Без проверки наличия БД
salt-master:/srv/salt # cat cmdb/MqObjects2Grains.sls
queryMqObjects:
mysql_query.run:
- name: salt
- database: mysql
- query: "SELECT minion_id,qmgr,object_type,value from mqobjects"
- check_db_exists: False
salt-master:/srv/salt # salt salt-master state.apply cmdb.MqObjects2Grains
salt-master:
----------
ID: queryMqObjects
Function: mysql_query.run
Name: salt
Result: True
Comment: {}
Started: 10:39:18.539604
Duration: 11.422 ms
Changes:
----------
query:
Executed
Summary for salt-master
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 11.422 ms
salt-master:/srv/salt #
Кто-нибудь может мне подсказать, что я делаю не так? Это было бы прекрасно!
Вы можете попробовать использовать
salt-call mysql.query salt "SELECT minion_id,qmgr,object_type,value from mqobjects"
на миньона вместо вызова миньона от мастера? Похоже, что полученные данные просто не передаются по шине. Проверьте формат вывода ваших модулей.