diff --git a/ansible/roles/udhcpd/README.md b/ansible/roles/udhcpd/README.md new file mode 100644 index 00000000..0d37661a --- /dev/null +++ b/ansible/roles/udhcpd/README.md @@ -0,0 +1,15 @@ +--- +Install and configure udhcpd. + +``` + - name: udhcpd + udhcpd_router: 10.42.42.1 + udhcpd_range_start: 10.42.42.230 + udhcpd_range_end: 10.42.42.230 + udhcpd_netmask: 255.255.255.0 + udhcpd_dns: 10.42.42.2 + udhcpd_interface: enp2s0 + udhcpd_static_leases: + - mac: 00:12:34:56:78:9a + ip: 10.42.42.53 +``` diff --git a/ansible/roles/udhcpd/defaults/main.yml b/ansible/roles/udhcpd/defaults/main.yml new file mode 100644 index 00000000..1f4ef471 --- /dev/null +++ b/ansible/roles/udhcpd/defaults/main.yml @@ -0,0 +1,16 @@ +--- + +udhcpd_range_start: 192.168.1.100 +udhcpd_range_end: 192.168.1.200 + +udhcpd_subnet: 255.255.255.0 +udhcpd_router: 192.168.1.1 +udhcpd_dns: "{{ udhcpd_router }}" + +# in seconds +# default: 10 days +udhcpd_lease_time: 864000 + +udhcpd_interface: eth0 + +udhcpd_static_leases: [] diff --git a/ansible/roles/udhcpd/tasks/main.yml b/ansible/roles/udhcpd/tasks/main.yml new file mode 100644 index 00000000..280a5ef4 --- /dev/null +++ b/ansible/roles/udhcpd/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- name: udhcpd | update apt-cache + apt: + cache_valid_time: 3600 + update_cache: yes + +- name: udhcpd | install + apt: + name: udhcpd + +- name: configure udhcpd + template: + src: etc/udhcpd.conf + dest: /etc/udhcpd.conf diff --git a/ansible/roles/udhcpd/templates/etc/udhcpd.conf b/ansible/roles/udhcpd/templates/etc/udhcpd.conf new file mode 100644 index 00000000..d2df746c --- /dev/null +++ b/ansible/roles/udhcpd/templates/etc/udhcpd.conf @@ -0,0 +1,123 @@ +# {{ ansible_managed }} + +# The start and end of the IP lease block + +start {{ udhcpd_range_start }} #default: 192.168.0.20 +end {{ udhcpd_range_end }} #default: 192.168.0.254 + +opt dns {{ udhcpd_dns }} +option subnet {{ udhcpd_subnet }} +opt router {{ udhcpd_router }} +option domain local +option lease {{ udhcpd_lease_time }} # 10 days of seconds + + + +# The interface that udhcpd will use + +interface {{ udhcpd_interface }} #default: eth0 + + +# The maximim number of leases (includes addressesd reserved +# by OFFER's, DECLINE's, and ARP conficts + +#max_leases 254 #default: 254 + + +# If remaining is true (default), udhcpd will store the time +# remaining for each lease in the udhcpd leases file. This is +# for embedded systems that cannot keep time between reboots. +# If you set remaining to no, the absolute time that the lease +# expires at will be stored in the dhcpd.leases file. + +#remaining yes #default: yes + + +# The time period at which udhcpd will write out a dhcpd.leases +# file. If this is 0, udhcpd will never automatically write a +# lease file. (specified in seconds) + +#auto_time 7200 #default: 7200 (2 hours) + + +# The amount of time that an IP will be reserved (leased) for if a +# DHCP decline message is received (seconds). + +#decline_time 3600 #default: 3600 (1 hour) + + +# The amount of time that an IP will be reserved (leased) for if an +# ARP conflct occurs. (seconds + +#conflict_time 3600 #default: 3600 (1 hour) + + +# How long an offered address is reserved (leased) in seconds + +#offer_time 60 #default: 60 (1 minute) + +# If a lease to be given is below this value, the full lease time is +# instead used (seconds). + +#min_lease 60 #defult: 60 + + +# The location of the leases file + +#lease_file /var/lib/misc/udhcpd.leases #defualt: /var/lib/misc/udhcpd.leases + +# The location of the pid file +#pidfile /var/run/udhcpd.pid #default: /var/run/udhcpd.pid + +# Everytime udhcpd writes a leases file, the below script will be called. +# Useful for writing the lease file to flash every few hours. + +#notify_file #default: (no script) + +#notify_file dumpleases # <--- useful for debugging + +# The following are bootp specific options, setable by udhcpd. + +#siaddr 192.168.0.22 #default: 0.0.0.0 + +#sname zorak #default: (none) + +#boot_file /var/nfs_root #default: (none) + +# The remainer of options are DHCP options and can be specifed with the +# keyword 'opt' or 'option'. If an option can take multiple items, such +# as the dns option, they can be listed on the same line, or multiple +# lines. The only option with a default is 'lease'. + +# Currently supported options, for more info, see options.c +#opt subnet +#opt timezone +#opt router +#opt timesrv +#opt namesrv +#opt dns +#opt logsrv +#opt cookiesrv +#opt lprsrv +#opt bootsize +#opt domain +#opt swapsrv +#opt rootpath +#opt ipttl +#opt mtu +#opt broadcast +#opt wins +#opt lease +#opt ntpsrv +#opt tftp +#opt bootfile +#opt wpad +# opt wins 192.168.10.10 + +# Static leases map +#static_lease 00:60:08:11:CE:4E 192.168.0.54 +#static_lease 00:60:08:11:CE:3E 192.168.0.44 + +{% for lease in udhcpd_static_leases %} +static_lease {{ lease['mac'] }} {{ lease['ip'] }} +{% endfor %}