initial commit
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..46f89c1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,18 @@
+
+# ISC DHCP server
+
+
+## Sample pillars
+
+ISC DHCP server
+
+    isc_dhcp:
+      server:
+        enabled: true
+        interfaces:
+        - name: eth0
+        - name: eth1
+
+## Read more
+
+* http://chschneider.eu/linux/server/tftpd-hpa.shtml
\ No newline at end of file
diff --git a/files/defaults.Debian b/files/defaults.Debian
new file mode 100644
index 0000000..186270b
--- /dev/null
+++ b/files/defaults.Debian
@@ -0,0 +1,13 @@
+# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
+#DHCPD_CONF=/etc/dhcp/dhcpd.conf
+
+# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
+#DHCPD_PID=/var/run/dhcpd.pid
+
+# Additional options to start dhcpd with.
+# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
+#OPTIONS=""
+
+# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
+# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
+INTERFACES="{% for interface in salt['pillar.get']('isc_dhcp:server:interfaces', []) %}{{ interface.name }}{% if not loop.last %} {% endif %}{% endfor %}"
\ No newline at end of file
diff --git a/files/dhcpd.conf b/files/dhcpd.conf
new file mode 100644
index 0000000..2dc1836
--- /dev/null
+++ b/files/dhcpd.conf
@@ -0,0 +1,103 @@
+{%- from "isc_dhcp/map.jinja" import server with context %}
+
+{%- if server.omapi_port is defined -%}
+omapi-port {{ server.omapi_port }};
+{% endif -%}
+
+ddns-update-style {{ server.ddns_update_style|default('none') }};
+
+{%- if server.ddns_updates is defined %}
+ddns-updates {{ server.ddns_updates }};
+{%- endif -%}
+
+{%- if server.update_static_leases is defined %}
+update-static-leases {{ server.update_static_leases }};
+{%- endif -%}
+
+{%- if server.use_host_decl_names is defined %}
+use-host-decl-names {{ server.use_host_decl_names }};
+{{- "\n" }}
+{%- endif -%}
+
+{%- if server.zones is defined -%}
+{%- for zone in server.dhcpd.zones|default({}) %}
+zone {{ zone.name }} {
+  primary {{ zone.primary }};
+  {%- if 'key' in zone %}
+  key {{ zone.key|default('rndc-key') }};
+  {%- endif %}
+}
+{{- "\n" }}
+{%- endfor -%}
+{%- endif %}
+
+default-lease-time {{ server.default_lease_time|default('600') }};
+max-lease-time {{ server.max_lease_time|default('7200') }};
+
+{%- if server.authoritative|default(False) %}
+authoritative;
+{%- endif %}
+
+log-facility {{ server.logging.facility|default('local7') }};
+
+{%- if server.next_server is defined -%}
+{{ "\n" }}
+next-server {{ server.next_server }};
+{%- endif -%}
+
+{%- if server.filename is defined %}
+filename "{{ server.filename }}";
+{{- "\n" }}
+{%- endif -%}
+
+{%- if server.allow is defined -%}
+  {%- for a in server.dhcpd.allow|default([]) %}
+allow {{ a }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- if server.deny is defined -%}
+  {%- for d in server.dhcpd.deny|default([]) %}
+deny {{ d }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- if server.ignore is defined -%}
+  {%- for i in server.ignore|default([]) %}
+ignore {{ i }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- set options = server.dhcpd.default_options|default([]) -%}
+{%- if server.dhcpd.options is defined -%}
+  {%- do options.extend(server.dhcpd.options) -%}
+{%- endif -%}
+
+{%- for o in options %}
+option {{ o }};
+{%- endfor -%}
+{%- set options = [] -%}
+
+{%- if server.default_includes is defined -%}
+  {%- set includes = server.dhcpd.default_includes -%}
+{%- endif -%}
+{%- if server.dhcpd.includes is defined -%}
+  {%- do includes.extend(server.dhcpd.includes) -%}
+{%- endif -%}
+{{ "\n" }}
+
+{%- for i in includes %}
+include "{{ i }}";
+{%- endfor -%}
+{%- set includes = [] -%}
+
+{%- if server.dhcpd.file_append is defined %}
+
+{{ server.dhcpd.file_append }}
+
+{%- endif -%}
+
+{%- endif -%}
diff --git a/init.sls b/init.sls
new file mode 100644
index 0000000..d8a93c5
--- /dev/null
+++ b/init.sls
@@ -0,0 +1,8 @@
+
+include:
+{%- if pillar.foreman.server.enabled %}
+- foreman.server
+{%- endif %}
+{%- if pillar.foreman.smart_proxy.enabled %}
+- foreman.smart_proxy
+{%- endif %}
diff --git a/map.jinja b/map.jinja
new file mode 100644
index 0000000..16af0eb
--- /dev/null
+++ b/map.jinja
@@ -0,0 +1,31 @@
+{%- load_yaml as raw_server %}
+Debian:
+  pkgs:
+  - isc-dhcp-server
+  service: isc-dhcp-server
+  logging:
+    facility: local7
+  defaults_config: /etc/default/isc-dhcp-server
+  dhcpd_config: /etc/dhcp/dhcpd.conf
+  hosts_config: /etc/dhcp/dhcpd.hosts
+  subnets_config: /etc/dhcp/dhcpd.subnets
+FreeBSD:
+  pkgs:
+  - isc-dhcp42-server 
+  service: isc-dhcpd
+  logging:
+    facility: local7 
+  defaults_config: /etc/rc.conf.d/dhcpd
+  dhcpd_config: /usr/local/etc/dhcpd.conf
+  hosts_config: /usr/local/etc/dhcpd.hosts
+  subnets_config:/usr/local/etc/dhcpd.subnets
+RedHat:
+  pkgs:
+  - dhcp
+  service: dhcpd
+  logging:
+    facility: local7
+  defaults_config: /etc/sysconfig/dhcpd
+{%- endload %}
+
+{%- set server = salt['grains.filter_by'](raw_server, merge=salt['pillar.get']('isc_dhcp:server')) %}
diff --git a/server.sls b/server.sls
new file mode 100644
index 0000000..4feed67
--- /dev/null
+++ b/server.sls
@@ -0,0 +1,66 @@
+{%- from "isc_dhcp/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+isc_dhcp_packages:
+  pkg.installed:
+  - pkgs: {{ server.pkgs }}
+
+{{ server.config.defaults_config }}:
+  file.managed:
+  - makedirs: True
+  - source: 'salt://isc_dhcp/files/defaults.{{ salt['grains.get']('os_family')) }}'
+  - template: jinja
+  - mode: 644
+  - require:
+   - pkg: isc_dhcp_packages
+  - watch_in:
+    - service: isc_dhcp_service
+
+{%- if server.dhcpd_config is defined %}
+
+{{ server.config.dhcpd.path }}:
+  file.managed:
+  - source: salt://isc_dhcp/files/dhcpd.conf
+  - template: jinja
+  - mode: 644
+  - require:
+    - pkg: isc_dhcp_packages
+  - watch_in:
+    - service: isc_dhcp_service
+
+{%- endif %}
+
+{%- if server.hosts_config is defined %}
+
+{{ server.hosts_config }}:
+  file.managed:
+  - source: salt://isc_dhcp/files/dhcpd.hosts
+  - template: jinja
+  - mode: 644
+  - require:
+    - pkg: isc_dhcp_packages
+  - watch_in:
+    - service: isc_dhcp_service
+
+{%- endif %}
+
+{%- if server.subnets_config is defined %}
+
+{{ server.subnets_config }}:
+  file.managed:
+  - source: salt://isc_dhcp/files/dhcpd.subnets
+  - template: jinja
+  - mode: 644
+  - require:
+    - pkg: isc_dhcp_packages
+  - watch_in:
+    - service: isc_dhcp_service
+
+{%- endif %}
+
+isc_dhcp_service:
+  service.running:
+  - name: {{ server.service }}
+  - enable: true
+
+{%- endif %}
\ No newline at end of file