
Quiero seleccionar datos de una tabla de base de datos (aquí mysql) con saltstack. En mi escenario de prueba tengo un host Linux llamado salt-master. En este host se ejecutan la base de datos, el maestro y el minion.
Mi objetivo es seleccionar los datos con el minion, pero esto no funciona en mi entorno.
1) Ves los datos en la tabla. Los datos en sí no son relevantes para el escenario.
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) Usar el módulo de ejecución mysql con el runner me da los resultados que quiero tener.
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) Hacer lo mismo con el minion no causa error, pero tampoco da ningún resultado. ¿Por qué?
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) También lo probé con un archivo sls.
a) Con comprobar si existe db
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 #
b) Sin verificar si existe db
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 #
¿Alguien puede darme algunas pistas sobre qué estoy haciendo mal? ¡Eso seria genial!
Respuesta1
¿Puedes intentar usar
salt-call mysql.query salt "SELECT minion_id,qmgr,object_type,value from mqobjects"
¿En el minion en lugar de llamar al minion del maestro? Parece que los datos que obtienes simplemente no se transfieren a través del autobús. Verifique el formato de salida de sus módulos.