Posso definir valores padrão globais para as tarefas de um módulo Ansible?

1

Eu me encontro repetidamente digitando argumentos para módulos relacionados a arquivos da Ansible assim:

- copy:
    […]
    owner: root
    group: root
    mode: ugo=r

Embora pareça seguro assumir que omitir esses argumentos para propriedade resultaria o mesmo que as tarefas são ' sudo edly' executadas, eu gostaria de definir esses argumentos uma vez explicitamente no escopo dos padrões de uma função ou variáveis de um host por módulo ou até mesmo um grupo de módulos.

Existe uma maneira de facilitar essa definição?

    
por funky-future 01.11.2017 / 13:52

3 respostas

4

Sim, você pode fazer isso. No entanto, existem duas advertências. 1. O recurso foi implementado há poucos dias. Portanto, ainda não está em um lançamento estável.
2. A documentação está faltando: link

Mas o PR que implementou o recurso mostra o uso de exemplos:

- hosts: localhost
  gather_facts: no
  module_defaults:
    file:
      owner: foobar
  tasks:
    - file:
        path: /tmp/defaults_test
        state: touch
    
por 11.04.2018 / 20:29
0

Os parâmetros são necessários em cada chamada para um módulo. É a única maneira de entrada do módulo.

Ao copiar vários arquivos em uma tarefa, você pode iterar em uma lista.

- copy:
    src: "{{item}}"
    dest: "/etc/logrotate.d/{{item}}"
    owner: root
    group: root
    mode: ugo=r
  with_items:
  - foo
  - bar

Você pode definir variáveis para esses parâmetros, mas ainda precisa usá-los em todas as chamadas para o módulo. Isso permite que você substitua o valor em muitos lugares ao mesmo tempo.

    
por 01.11.2017 / 20:11
0

I'd like to define these arguments once explicitly in the scope of either a role's defaults or a host's variables per module or even a group of modules.

Felizmente você não pode e sua solicitação é incoerente devido à maneira como você usa a palavra "explicitamente".

Na verdade, você quer "definir esses argumentos uma vez para que eles sejam aplicados implicitamente ".

E por outro lado, é Ansible que requer que os valores dos parâmetros sejam especificados explicitamente .

Though it may seem safe to assume that omitting these arguments for ownership would result the same as the tasks are 'sudoedly' executed, 

Não, não é seguro assumir que omitir os argumentos definiria a propriedade para valores definidos na sua cabeça.

O caso mais simples é onde o arquivo já existe e o Ansible apenas altera seu conteúdo. Não irá implicitamente fixar as permissões / propriedade nesse caso.

A melhor coisa que você pode fazer é especificar os parâmetros necessários explicitamente em tarefas.

Se você quiser ter alguma flexibilidade, use variáveis definidas em um único lugar:

vars:
  my_owner: root
  my_group: root
  my_mode: ugo=r
tasks: 
  - copy:
      […]
      owner: "{{ my_owner }}"
      group: "{{ my_group }}"
      mode: "{{ my_mode }}"

Outra coisa importante a ter em mente é que, historicamente, nem todos os módulos estavam se comportando da mesma maneira em relação às permissões de arquivo. Ou seja, alguns módulos ( url , se bem me lembro) definem as permissões explicitamente especificadas somente quando realmente criaram / alteraram o arquivo, enquanto deixam as permissões inalteradas de outra forma.

Não há desculpa para não testar os sistemas (usando um fluxo separado, seja usando Ansible, ou uma ferramenta diferente).

    
por 02.11.2017 / 02:11