este playbook obtém RAM total e, com base nisso, define duas variáveis, digamos A e B A é 40% da RAM total B é 60% da RAM total
tarefa é, se A maior ou igual a 32, então A deve ser 32, mas se for menor que 32, então mantenha A como resultado de 40% da RAM total o mesmo vale para B, se B for maior ou igual a 32, então B deve ser 32, mas se for menor que 32, mantenha B como resultado de 60% da RAM total
- name: get total RAM
set_fact:
total_ram_mb: "{{ ansible_memtotal_mb }}"
- name: calculate min & max values
set_fact:
A: "{{ (total_ram_mb * 0.4 / 1024) | int }}"
B: "{{ (total_ram_mb * 0.6 / 1024) | int }}"
- debug:
var: A
- debug:
var: B
- name: limit min value
set_fact:
A: "{{ 32 if A >= 32 else A }}"
- name: limit max value
set_fact:
B: "{{ 32 if B >= 32 else B }}"
- debug:
var: A
- debug:
var: B
mas as tarefas posteriores AB são sempre definidas como 32, não importa se A é maior, igual ou menor, a memória no meu vms é 8G, não tenho certeza de onde está o problema
aqui está a saída do jogo
[root@autom ansible]# ansible-playbook -i inv.txt memory.yml
PLAY [es] ********************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************
ok: [es1]
ok: [es2]
TASK [memory : get total RAM] *****************************************************************************************************************
ok: [es1]
ok: [es2]
TASK [memory : calculate min & max values] ****************************************************************************************************
ok: [es1]
ok: [es2]
TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
"A": "3"
}
ok: [es2] => {
"A": "3"
}
TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
"B": "4"
}
ok: [es2] => {
"B": "4"
}
TASK [memory : limit min value] ***************************************************************************************************************
ok: [es1]
ok: [es2]
TASK [memory : limit max value] ***************************************************************************************************************
ok: [es1]
ok: [es2]
TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
"A": "32"
}
ok: [es2] => {
"A": "32"
}
TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
"B": "32"
}
ok: [es2] => {
"B": "32"
}
Qual versão do Ansible você está executando? Se eu tentar o seu playbook como está escrito, ele falhará com este erro:
Se eu corrigir a tarefa para executar a conversão explícita para
int
, assim:Em seguida, o manual parece funcionar como pretendido. Quando
total_rm_mb
é4192
:E quando é
63993
:Isso é com Ansible versão 2.15.1.