Tenho uma estrutura de funções que envolve vários manuais e preciso atribuir variáveis comuns a alguns deles para evitar reescrever o código para cada tarefa do manual. Isso é possível?
Entendo que podemos atribuir as variáveis ao chamar a função, porém, neste caso, preciso que seja aplicável a alguns playbooks da função.
Responder1
Sim. é possível. Usaransible_play_namepara selecionar as variáveis. Por exemplo, crie variáveis padrão da função
shell> cat roles/test1/defaults/main.yml
my_vars:
pb1: 'var1'
pb2: 'var2'
default: 'default'
Atribuir uma variável selecionada pelo nome da peça
shell> cat roles/test1/tasks/main.yml
- set_fact:
myvar: "{{ my_vars[ansible_play_name]|default(my_vars.default) }}"
- debug:
var: myvar
O manual
- name: pb1
hosts: localhost
roles:
- test1
- name: pb2
hosts: localhost
roles:
- test1
- name: pb9
hosts: localhost
roles:
- test1
dar
PLAY [pb1] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var1"
}
PLAY [pb2] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var2"
}
PLAY [pb9] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "default"
}