Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 1 | # dhcpd templates/dhcpd.conf.j2 - {{ ansible_managed }} |
| 2 | {# |
| 3 | SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org> |
| 4 | SPDX-License-Identifier: Apache-2.0 |
| 5 | #} |
| 6 | |
| 7 | # global lease options |
| 8 | default-lease-time {{ subnet.lease_time | default("240") }}; |
| 9 | max-lease-time {{ subnet.max_lease_time | default("480") }}; |
| 10 | |
Zack Williams | 7ae0170 | 2022-11-29 10:09:14 -0700 | [diff] [blame] | 11 | # ignore client UID data, which can lead to duplicate leases |
| 12 | ignore-client-uids true; |
| 13 | |
Zack Williams | c1d528f | 2020-12-09 13:25:18 -0700 | [diff] [blame] | 14 | # option definitions |
Zack Williams | 5101b5f | 2022-05-17 13:30:01 -0700 | [diff] [blame] | 15 | {% if ansible_system != "OpenBSD" %} |
Zack Williams | c1d528f | 2020-12-09 13:25:18 -0700 | [diff] [blame] | 16 | option rfc3442-classless-static-routes code 121 = array of integer 8; |
Zack Williams | 5101b5f | 2022-05-17 13:30:01 -0700 | [diff] [blame] | 17 | option client-arch code 93 = unsigned integer 16; # RFC4578 |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 18 | {% endif %} |
Zack Williams | c1d528f | 2020-12-09 13:25:18 -0700 | [diff] [blame] | 19 | |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 20 | {% for subnet, subdata in dhcpd_subnets.items() %} |
| 21 | subnet {{ subnet | ipaddr('network') }} netmask {{ subnet | ipaddr('netmask') }} { |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 22 | |
| 23 | # routing |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 24 | {% if subdata.routers is defined %} |
Zack Williams | c1d528f | 2020-12-09 13:25:18 -0700 | [diff] [blame] | 25 | # custom router IP set |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 26 | option routers {{ subdata.routers | map(attribute="ip") | join (",") }}; |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 27 | {% set r3442ns = namespace(r3442list = []) %} |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 28 | {% for rtr in subdata.routers %} |
Zack Williams | 65ee5d0 | 2020-12-14 20:57:00 -0700 | [diff] [blame] | 29 | {% if "rfc3442routes" in rtr %} |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 30 | {% set r3442ns.r3442list = r3442ns.r3442list + (rtr | rfc3442_words() ) %} |
Zack Williams | 65ee5d0 | 2020-12-14 20:57:00 -0700 | [diff] [blame] | 31 | {% endif %} |
| 32 | {% endfor %} |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 33 | {% if r3442ns.r3442list %} |
| 34 | option rfc3442-classless-static-routes {{ r3442ns.r3442list | join(', ') }}; |
| 35 | {% endif %} |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 36 | {% else %} |
Zack Williams | c1d528f | 2020-12-09 13:25:18 -0700 | [diff] [blame] | 37 | # first IP address in range used as router |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 38 | option routers {{ subnet | ipaddr('next_usable') }}; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 39 | {% endif %} |
| 40 | |
| 41 | # DNS/naming options |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 42 | option domain-name-servers {{ subdata.dns_servers | join(", ") }}; |
| 43 | option domain-name "{{ subdata.dns_search [0] }}"; |
| 44 | option domain-search "{{ subdata.dns_search | join('", "') }}"; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 45 | |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 46 | {% if subdata.tftpd_server is defined and subdata.tftpd_server %} |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 47 | # tftpd options |
Zack Williams | 5101b5f | 2022-05-17 13:30:01 -0700 | [diff] [blame] | 48 | {% if ansible_system == "OpenBSD" %} |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 49 | filename "{{ subdata.pxe_filename | default(dhcpd_pxe_filename) }}"; |
Zack Williams | 5101b5f | 2022-05-17 13:30:01 -0700 | [diff] [blame] | 50 | {% else %} |
| 51 | if option client-arch = 00:07 { |
| 52 | # amd64 EFI boot |
| 53 | filename "{{ subdata.efi_filename | default(dhcpd_efi_filename) }}"; |
| 54 | } else { |
| 55 | # BIOS boot |
| 56 | filename "{{ subdata.pxe_filename | default(dhcpd_pxe_filename) }}"; |
| 57 | } |
| 58 | {% endif %} |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 59 | next-server {{ subdata.tftpd_server }}; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 60 | |
| 61 | {% endif %} |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 62 | {% if subdata.ntp_servers is defined and subdata.ntp_servers %} |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 63 | # ntp options |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 64 | option ntp-servers {{ subdata.ntp_servers | join('", "') }}; |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 65 | |
| 66 | {% endif %} |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 67 | {% if subdata.range is defined %} |
Zack Williams | 98725e2 | 2021-03-18 10:21:26 -0700 | [diff] [blame] | 68 | # dynamically assignable range |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 69 | range {{ subdata.range | ipaddr('next_usable') }} {{ subdata.range | ipaddr('last_usable') }}; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 70 | {% endif %} |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 71 | } |
| 72 | |
Zack Williams | 7f58df0 | 2021-09-14 13:49:57 -0700 | [diff] [blame] | 73 | {% if subdata.hosts is defined %} |
| 74 | # hosts for subnet: {{ subdata.dns_search [0] }} |
| 75 | {% for host in subdata.hosts %} |
| 76 | host {{ host.name }}.{{ subdata.dns_search [0] }} { |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 77 | option host-name "{{ host.name }}"; |
| 78 | fixed-address {{ host.ip_addr }}; |
| 79 | hardware ethernet {{ host.mac_addr | hwaddr('linux') }}; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 80 | {% if host.pxe_filename is defined %} |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 81 | filename "{{ host.pxe_filename }}"; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 82 | {% endif %} |
| 83 | {% if host.default_url is defined %} |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 84 | option default-url "{{ host.default_url }}"; |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 85 | {% endif %} |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 86 | } |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 87 | |
| 88 | {% endfor %} |
| 89 | {% endif %} |
Zack Williams | bd97027 | 2020-11-30 22:59:00 -0700 | [diff] [blame] | 90 | |
Zack Williams | 9fc21d7 | 2020-11-22 22:36:54 -0700 | [diff] [blame] | 91 | {% endfor %} |