SaltStack: / etc / sudo: / bin / systemctl vs / usr / bin / systemctl

1

Nós usamos SaltStack para gerenciamento de configuração desde algumas semanas.

Como lidar com a localização específica da distribuição de systemctl ?

  • No Ubuntu: /bin/systemctl
  • No SuSE: /usr/bin/systemctl

No momento, adiciono duas linhas ao arquivo sudoers:

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: |
        some_user ALL = NOPASSWD: /bin/systemctl restart apache2
        some_user ALL = NOPASSWD: /usr/bin/systemctl restart apache2
{% endfor %}

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

.... Não há solução mais simples?

    
por guettli 19.12.2016 / 09:28

1 resposta

5

Infelizmente não há maneira mais simples ou automática. Mas existe uma maneira melhor de seguir as Salt Best Practices , usando um arquivo map.jinja.

It is a strong convention in Salt Formulas to place platform-specific data, such as package names and file system paths, into a file named map.jinja that is placed alongside the state files.

O uso garantirá a modularidade dos seus estados, permitindo que eles sejam executados independentemente do sistema operacional do lacaio.

Abaixo, há um exemplo de como seu arquivo map.jinja estaria no cenário que você apresentou. Ele irá filtrar o minion pela família OS e definir as variáveis de acordo com ele:

{% set systemctl = salt['grains.filter_by']({
    'Debian': {
        'location': '/bin/systemctl'
    },
    'Suse': {
        'location': '/usr/bin/systemctl'
    }
} %}

Agora você precisa importá-lo em seu arquivo de estado e usar as variáveis definidas anteriormente:

{% from "systemctl/map.jinja" import systemctl with context %}

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: some_user ALL = NOPASSWD: {{ systemctl.location }} restart apache2

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

Para mais informações, confira a modularidade e a tabela de consulta sessões do doc.

    
por 19.12.2016 / 12:47