Existe uma maneira mais idiomática de mudar o estado de Salt baseado no sistema operacional host?

1

No topo do meu arquivo de estado, eu tenho:

{% if grains['os'] == 'Ubuntu' %}
  {% set ubuntu = True %}
  {% set arch = False %}
{% elif grains['os'] == 'Arch' %}
  {% set ubuntu = False %}
  {% set arch = True %}
{% endif %}

Mais tarde,

{% if ubuntu %}
cron:
{% elif arch %}
cronie:
{% endif %}
  pkg.installed
  service.running:
    - enable: True

Mas isso não está funcionando; meus condicionais não estão processando nada (strings vazias). Mesmo que uma pequena refatoração fizesse o trabalho, isso cheira a mim.

Existe uma maneira mais idiomática de alternar pequenos detalhes como este com o Salt sem muito clichê de templates?

    
por Chris Tonkinson 09.07.2015 / 18:47

1 resposta

1

Não está funcionando provavelmente porque pkg.installed deve ser uma lista, mesmo sem parâmetros:

pkg.installed: []

Isso deve funcionar:

{% if ubuntu %}
cron:
{% elif arch %}
cronie:
{% endif %}
  pkg.installed: []
  service.running:
    - enable: True

Ou, de uma maneira mais inteligente:

{% set cron = salt['grains.filter_by']({
    'Ubuntu': 'cron',
    'Arch':   'cronie',
    }, grain='os') %}

{{cron}}:
  pkg.installed: []
  service.running:
    - enable: True

Ou talvez o nome do serviço seja diferente do nome do pacote:

{% set cron = salt['grains.filter_by']({
    'Ubuntu': {
        'package': 'cron',
        'service': 'crond',
        },
    'Arch': {
        'package': 'cronie',
        'service': 'cronie',
        },
    }, grain='os') %}

{{cron['package']}}:
  pkg.installed: []
  service.running:
    - name:   {{cron['service']}}
    - enable: True

grains.filter_by está documentado em link

Para algo mais elaborado, dê uma olhada no link

    
por 10.07.2015 / 13:49