dhcp_server
===========

This role installs and configures a DHCP server.

Requirements
------------

This role requires Ansible 1.4 or higher and platform requirements are listed
in the metadata file.

Role Variables
--------------

The variables that can be passed to this role and a brief description about
them are as follows. These are all based on the configuration variables of the
DHCP server configuration.

    # Basic configuration information
    dhcp_interfaces: eth0
    dhcp_common_domain: example.org
    dhcp_common_nameservers: ns1.example.org, ns2.example.org
    dhcp_common_default_lease_time: 600
    dhcp_common_max_lease_time: 7200
    dhcp_common_ddns_update_style: none
    dhcp_common_authoritative: true
    dhcp_common_log_facility: local7
    dhcp_common_options:
    - opt66 code 66 = string
    dhcp_common_parameters:
    - filename "pxelinux.0"

    # Subnet configuration
    dhcp_subnets:
    # Required variables example
    - base: 192.168.1.0
      netmask: 255.255.255.0
    # Full list of possibilities
    - base: 192.168.10.0
      netmask: 255.255.255.0
      range_start: 192.168.10.150
      range_end: 192.168.10.200
      routers: 192.168.10.1
      broadcast_address: 192.168.10.255
      domain_nameservers: 192.168.10.1, 192.168.10.2
      domain_name: example.org
      ntp_servers: pool.ntp.org
      default_lease_time: 3600
      max_lease_time: 7200
      pools:
      - range_start: 192.168.100.10
        range_end: 192.168.100.20
        rule: 'allow members of "foo"'
        parameters:
        - filename "pxelinux.0"
      - range_start: 192.168.110.10
        range_end: 192.168.110.20
        rule: 'deny members of "foo"'
      parameters:
      - filename "pxelinux.0"

    # Fixed lease configuration
    dhcp_hosts:
    - name: local-server
      mac_address: "00:11:22:33:44:55"
      fixed_address: 192.168.10.10
      default_lease_time: 43200
      max_lease_time: 86400
      parameters:
      - filename "pxelinux.0"

    # Class configuration
    dhcp_classes:
    - name: foo
      rule: 'match if substring (option vendor-class-identifier, 0, 4) = "SUNW"'
    - name: CiscoSPA
      rule: 'match if (( substring (option vendor-class-identifier,0,13) = "Cisco SPA504G" ) or
             ( substring (option vendor-class-identifier,0,13) = "Cisco SPA303G" ))'
      options:
      - opt: 'opt66 "http://utils.opentech.local/cisco/cisco.php?mac=$MAU"'
      - opt: 'time-offset 21600'

    # Shared network configurations
    dhcp_shared_networks:
    - name: shared-net
      subnets:
      - base: 192.168.100.0
        netmask: 255.255.255.0
        routers: 192.168.10.1
      parameters:
      - filename "pxelinux.0"
      pools:
      - range_start: 192.168.100.10
        range_end: 192.168.100.20
        rule: 'allow members of "foo"'
        parameters:
        - filename "pxelinux.0"
      - range_start: 192.168.110.10
        range_end: 192.168.110.20
        rule: 'deny members of "foo"'

    # Custom if else clause
      dhcp_ifelse:
      - condition: 'exists user-class and option user-class = "iPXE"'
        val: 'filename "http://my.web.server/real_boot_script.php";'
        else:
          - val: 'filename "pxeboot.0";'
          - val: 'filename "pxeboot.1";'

Examples
========

1) Install DHCP server on interface eth0 with one simple subnet:

    - hosts: all
      roles:
      - role: dhcp_server
        dhcp_interfaces: eth0
        dhcp_common_domain: example.org
        dhcp_common_nameservers: ns1.example.org, ns2.example.org
        dhcp_common_default_lease_time: 600
        dhcp_common_max_lease_time: 7200
        dhcp_common_ddns_update_style: none
        dhcp_common_authoritative: true
        dhcp_common_log_facility: local7
        dhcp_subnets:
        - base: 192.168.10.0
          netmask: 255.255.255.0
          range_start: 192.168.10.150
          range_end: 192.168.10.200
          routers: 192.168.10.1


Dependencies
------------

None

License
-------

BSD

Author Information
------------------

Philippe Dellaert