
{%- load_yaml as master_common %}
default:
  service: salt-master
  {%- if pillar.salt.get('master', {}).get('source', {}).get('engine', 'pkg') == 'pkg' %}
  install_state: "pkg: salt_master_packages"
  source:
    engine: pkg
  {%- elif pillar.salt.master.source.engine == 'pip' %}
  install_state: "pip: salt_master_packages"
  {%- endif %}

  {%- if pillar.salt.get('master', {}).get('source', {}).version is defined %}
  version: {{ pillar.salt.master.source.version }}
  {%- endif %}
  accept_policy: preseed
  bind: {}
  formula: {}
  base_environment: dev
  dir:
    files: /srv/salt/env
  pillar:
    engine: salt
  max_event_size: 100000000
  minion_data_cache: 'localfs'
{%- endload %}

{%- load_yaml as master_specific %}
Arch:
  pkgs:
  - salt-zmq
Debian:
  pkgs:
  - salt-master
Gentoo:
  pkgs:
  - app-admin/salt
MacOS:
  pkgs:
  - saltstack
RedHat:
  pkgs:
  - salt-master
{%- endload %}

{%- if pillar.salt.master is defined %}
{%- set raw_master = salt['grains.filter_by'](master_specific, merge=salt['pillar.get']('salt:master')) %}
{%- set master = salt['grains.filter_by'](master_common, merge=raw_master) %}
{%- endif %}


{%- load_yaml as syndic_defaults %}
Debian:
  service: salt-syndic
  pkgs:
  - salt-syndic
RedHat:
  service: salt-syndic
  pkgs:
  - salt-syndic
{%- endload %}

{%- set syndic = salt['grains.filter_by'](syndic_defaults, merge=salt['pillar.get']('salt:syndic')) %}


{%- load_yaml as minion_common %}
default:
  graph_pkgs:
  - graphviz
  graph_states_pkgs:
  - python-pydot
  - python-yaml
  graph_states: False
  log:
    level: info
  service: salt-minion
  {%- if pillar.salt.get('minion', {}).get('source', {}).get('engine', 'pkg') == 'pkg' %}
  install_state: "pkg: salt_minion_packages"
  source:
    engine: pkg
  {%- elif pillar.salt.minion.source.engine == 'pip' %}
  install_state: "pip: salt_minion_packages"
  {%- endif %}

  {%- if pillar.salt.get('minion', {}).get('source', {}).version is defined %}
  version: {{ pillar.salt.minion.source.version }}
  {%- endif %}
  max_event_size: 100000000
{%- endload %}

{%- load_yaml as minion_specific %}
Arch:
  pkgs:
  - salt-zmq
Debian:
  pkgs:
  - salt-minion
  - python-m2crypto
  - python-psutil
  - python-yaml
  cert_pkgs:
  - ca-certificates
Gentoo:
  pkgs:
  - app-admin/salt
MacOS:
  pkgs:
  - saltstack
RedHat:
  pkgs:
  - salt-minion
  - m2crypto
  - psutils
  - PyYAML
  cert_pkgs:
  - ca-certificates
{%- endload %}

{%- if pillar.salt.minion is defined %}
{%- set raw_minion = salt['grains.filter_by'](minion_specific, merge=salt['pillar.get']('salt:minion')) %}
{%- set minion = salt['grains.filter_by'](minion_common, merge=raw_minion) %}

{%- if pillar.salt.minion.proxy_minion is defined %}
{% set proxy_minion = salt['grains.filter_by']({
    'Debian': {
        'napalm_pkgs': ['python-pip', 'libxml2-dev', 'libxslt1-dev', 'zlib1g-dev'],
        'napalm_pip_pkgs': ['napalm', 'oauth']
    },
    'RedHat': {
        'napalm_pkgs': ['libxml2-dev', 'libxslt1-dev', 'zlib1g-dev']
    },
}, merge=pillar.salt.minion.get('proxy_minion', {})) %}
{%- endif %}

{%- endif %}


{%- load_yaml as api_common %}
default:
  pkgs:
  - salt-api
  service: salt-api
{%- endload %}

{%- set api = salt['grains.filter_by'](api_common, merge=salt['pillar.get']('salt:api')) %}

{%- load_yaml as control_common %}
default:
  cloud_pips:
  - apache-libcloud
  - netaddr
  cloud_pkgs:
  - python-netaddr
  - python-libcloud
  virt_pips:
  - libvirt-python
  maas_pkgs:
  - python-maas-client
  cluster: {}
{%- endload %}

{%- load_yaml as control_specific %}
Debian:
  virt_pkgs:
  - libvirt-dev
  - pkg-config
{% if grains.oscodename == 'trusty' %}
  - libguestfs-tools
{% endif %}

RedHat:
  virt_pkgs:
  - libvirt-dev
  - pkg-config
{%- endload %}

{%- if pillar.salt.control is defined %}
{%- set raw_control = salt['grains.filter_by'](control_specific, merge=salt['pillar.get']('salt:control')) %}
{%- set control = salt['grains.filter_by'](control_common, merge=raw_control) %}
{%- endif %}
