Eu tenho que executar um estado apenas uma vez. Não consegui encontrar uma maneira simples de fazer isso.
Agora, o contexto
Eu instalo dois servidores MySQL através do sal. Eu quero fazer um escravo do outro.
Para configurar o escravo, eu preciso obter as informações de status do mestre no final da instalação principal:
SHOW MASTER STATUS;
Agora, posso usar um estado personalizado executando a função mysql.query
para obtê-lo.
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
Mas ele será executado toda vez que o highstate for executado para o meu servidor. Assim, dando informações mestre diferentes de cada vez.
Eu tentei usar a existência de um arquivo como sinalizador:
/tmp/only_once:
file.missing: []
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- require:
- file: /tmp/only_once
Está funcionando, mas eu não estava feliz, pois agora tenho dois estados com falha toda vez.
Minha solução personalizada
Acabei com um novo parâmetro para mystate
, flag
que cria um arquivo de sinalizador na primeira vez em que é executado e retorna com êxito se o arquivo existir:
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- flag: /tmp/only_once
E a pergunta novamente
Ainda assim, eu gostaria de saber se, e como, alguém executaria um estado apenas uma vez.