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.