Я пытаюсь собрать информацию о кластере mysql, чтобы затем использовать в некоторой локальной логике.
Моя проблема в том, что если я запускаю свою команду на удаленных хостах, у меня не будет доступа к этим результатам.
- name: get uuids for existing cluster nodes
shell: mysql -N -B -u {{ db_user }} -p {{ db_user_password }} -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';" | sed 's/\t/,/g' | cut -f2 -d','
register: maria_cluster_uuids
Это дает мне данные, которые мне нужны, но что мне действительно нужно, так это объединенный список / определение результатов.
Я мог бы попробовать:
- name: get uuids for existing cluster nodes
run_once: true
shell: mysql -N -B -u {{ db_user }} -h {{ item }} -p {{ db_user_password }} -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';" | sed 's/\t/,/g' | cut -f2 -d','
register: maria_cluster_uuids
with_items: play_hosts
delegate_to: 127.0.0.1
однако mysql выдает предупреждение, и, честно говоря, я не хочу навязывать требование, чтобы на локальной машине был установлен клиент mysql.
Дурное предчувствие, что мне придется написать здесь какой-нибудь питон ...
Использовать set_fact
модуль и hostvars
:
---
- hosts: all
vars:
uuids: |
{%- set o=[] %}
{%- for i in play_hosts %}
{%- if o.append(hostvars[i].uuid) %}
{%- endif %}
{%- endfor %}
{{ o }}
tasks:
- name: get uuids for existing cluster nodes
shell: mysql -N -B -u {{ db_user }} -p {{ db_user_password }} -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';" | sed 's/\t/,/g' | cut -f2 -d','
register: maria_cluster_uuids
- set_fact:
uuid: "{{ maria_cluster_uuids.stdout }}"
- debug:
var: uuids
run_once: true
delegate_to: 127.0.0.1
Помогло бы записать вывод команды mysql на локальном или доступном хосте и продолжать добавлять результаты со всех серверов. После этого вы можете проанализировать этот файл в своей книге воспроизведения или даже написать сценарий парсера и выполнить его из книги воспроизведения.
Сбор вывода будет выглядеть примерно так -
--- - hosts: production tasks: - name: get uuids for existing cluster nodes shell: mysql -N -B -u {{ db_user }} -p {{ db_user_password }} -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid';" | sed 's/\t/,/g' | cut -f2 -d',' register: maria_cluster_uuids - name: Write to local disk lineinfile: dest=/tmp/mysqlcluster create=yes line="{{ maria_cluster_uuids.stdout_lines }}" delegate_to: 127.0.0.1
Затем вы можете проанализировать файл / tmp / mysqlcluster.