
{%- 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_safe_render_error: true
  pillar:
    engine: salt
  max_event_size: 100000000
  minion_data_cache: 'localfs'
{%- endload %}

{%- load_yaml as master_specific %}
Arch:
  pkgs:
  - salt
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
Debian:
  pkgs:
  - salt-minion
  dependency_pkgs:
  - python-m2crypto
  - python-psutil
  - python-yaml
  - python-msgpack
  - python-oauth
  dependency_pkgs_pip:
  - PyYAML
  - M2Crypto
  - psutil
  - oauth
  cert_pkgs:
  - ca-certificates
Gentoo:
  pkgs:
  - app-admin/salt
MacOS:
  pkgs:
  - saltstack
RedHat:
  pkgs:
  - salt-minion
  dependency_pkgs:
  - m2crypto
  - psutils
  - PyYAML
  - python-oauth
  dependency_pkgs_pip:
  - PyYAML
  - M2Crypto
  - psutil
  - oauth
  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 %}

{%- if pillar.salt.minion.env_vars is defined %}
{% set env_vars = salt['grains.filter_by']({
    'Debian': {
        'engine': 'file'
    },
    'RedHat': {
        'engine': 'file'
    },
}, merge=pillar.salt.minion.get('env_vars', {})) %}
{%- endif %}

{%- endif %}


{%- load_yaml as api_common %}
default:
  pkgs:
  - salt-api
  - python-cherrypy3
  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
  - genisoimage
{% if grains.get('oscodename') == 'trusty' %}
  - libguestfs-tools
{% endif %}
  virt_service: 'libvirt-bin'

RedHat:
  virt_pkgs:
  - libvirt-dev
  - pkg-config
  - genisoimage
  virt_service: 'libvirtd'
{%- endload %}

{%- load_yaml as renderer_defaults %}
default: {}
{%- endload %}
{%- set renderer = salt['grains.filter_by'](renderer_defaults, merge=salt['pillar.get']('salt:renderer')) %}

{%- 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 %}
