Para uma solução Ansible pura, você pode definir o innodb-log-file-size
com o módulo lineinfile
Assim:
- name: Set innodb-log-file-size for MySQL.
lineinfile:
dest: /etc/mysql/my.cnf
line: 'innodb-log-file-size = {{ innodb_log_file_size }}'
notify: restart mysql
Você precisaria criar um manipulador para cada ação listada. A tarefa acima só retornaria CHANGED
e acionaria o handlers
configurado quando o valor de innodb_log_file_size
fosse alterado.
Eu presumo aqui que você está usando template
module para criar a configuração do mysql. template
module retorna CHANGED
quando qualquer parâmetro configurado via Ansible no arquivo de configuração for alterado. O módulo lineinfile
permite que você acione manipuladores para uma alteração específica.
Esta estratégia tem, no entanto, o efeito colateral ruim que você não pode misturar template
e lineinfile
module porque nas execuções Ansible subseqüentes, ambas as tarefas sempre retornam CHANGED
e portanto quebram a idempotência da peça.
editar
Depois de pensar um pouco sobre o problema, eu recomendaria a seguinte estratégia: verificar via command
module, criar via template
, verificar novamente via módulo de comando e notificar se o valor foi alterado.
- name: Register innodb-log-file-size in my.cnf
command: grep -Fxq "innodb-log-file-size" /etc/mysql/my.cnf
register: innodb_log_file_size_pre
always_run: True
ignore_errors: True
changed_when: False
- name: Create my.cnf via template.
template:
src: my.cnf.j2
dest: /etc/mysql/my.cnf
- name: Restart mysql service when innodb_log_file_size changed
debug: msg="Restart mysql to activate innodb_log_file_size change"
when: innodb_log_file_size_pre !== innodb_log_file_size
notify: restart mysql