summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chaos-at-home/ch-gw-lan.yml10
-rw-r--r--inventory/host_vars/ch-gw-lan.yml10
-rw-r--r--roles/network/dhcp-server/defaults/main.yml12
-rw-r--r--roles/network/dhcp-server/handlers/main.yml5
-rw-r--r--roles/network/dhcp-server/tasks/main.yml29
5 files changed, 66 insertions, 0 deletions
diff --git a/chaos-at-home/ch-gw-lan.yml b/chaos-at-home/ch-gw-lan.yml
new file mode 100644
index 00000000..1d4ad5f2
--- /dev/null
+++ b/chaos-at-home/ch-gw-lan.yml
@@ -0,0 +1,10 @@
+---
+- name: Basic Setup
+ hosts: ch-gw-lan
+ roles:
+ - role: apt-repo/base
+ - role: core/base
+ - role: core/sshd/base
+ - role: core/zsh
+ - role: core/ntp
+ - role: network/dhcp-server
diff --git a/inventory/host_vars/ch-gw-lan.yml b/inventory/host_vars/ch-gw-lan.yml
index be092c15..20aeff32 100644
--- a/inventory/host_vars/ch-gw-lan.yml
+++ b/inventory/host_vars/ch-gw-lan.yml
@@ -31,3 +31,13 @@ network:
- *_network_primary_
- name: lan0
address: "{{ network_zones.lan.prefix | ipaddr(network_zones.lan.offsets[inventory_hostname]) | ipaddr('address/prefix') }}"
+
+
+dhcp_server_interfaces:
+ lan0:
+ prefix: "{{ network_zones.lan.prefix }}"
+ gateway: "{{ network_zones.lan.gateway }}"
+ start: "{{ network_zones.lan.dhcp.start }}"
+ limit: "{{ network_zones.lan.dhcp.limit }}"
+ domain: "{{ host_domain }}"
+ dns: "{{ network_zones.lan.dns }}"
diff --git a/roles/network/dhcp-server/defaults/main.yml b/roles/network/dhcp-server/defaults/main.yml
new file mode 100644
index 00000000..26681652
--- /dev/null
+++ b/roles/network/dhcp-server/defaults/main.yml
@@ -0,0 +1,12 @@
+---
+# dhcp_server_interfaces:
+# eth0:
+# prefix: 192.168.23.0/24
+# offsets:
+# start: 100
+# limit: 199
+# gw: 1
+# domain: example.com
+# dns:
+# - 1.1.1.1
+# - 9.9.9.9
diff --git a/roles/network/dhcp-server/handlers/main.yml b/roles/network/dhcp-server/handlers/main.yml
new file mode 100644
index 00000000..bb6773e9
--- /dev/null
+++ b/roles/network/dhcp-server/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: restart isc-dhcp-server
+ service:
+ name: isc-dhcp-server
+ state: restarted
diff --git a/roles/network/dhcp-server/tasks/main.yml b/roles/network/dhcp-server/tasks/main.yml
new file mode 100644
index 00000000..43851d37
--- /dev/null
+++ b/roles/network/dhcp-server/tasks/main.yml
@@ -0,0 +1,29 @@
+---
+- name: install isc-dhcp-server
+ apt:
+ name: isc-dhcp-server
+ state: present
+
+- name: configure interfaces
+ lineinfile:
+ path: /etc/default/isc-dhcp-server
+ regexp: '^INTERFACESv4='
+ line: "INTERFACESv4=\"{{ dhcp_server_interfaces | list | sort | join(' ') }}\""
+ notify: restart isc-dhcp-server
+
+- name: configure subnets
+ blockinfile:
+ path: /etc/dhcp/dhcpd.conf
+ marker: '### {mark} ansible network/dhcp-server subnets ###'
+ block: |
+ {% for interface,subnet in dhcp_server_interfaces.items() %}
+ subnet {{ subnet.prefix | ipaddr('network') }} netmask {{ subnet.prefix | ipaddr('netmask') }} {
+ range {{ subnet.prefix | ipaddr(subnet.start) | ipaddr('address') }} {{ subnet.prefix | ipaddr(subnet.limit) | ipaddr('address') }};
+ option routers {{ subnet.gateway }};
+ option domain-name-servers {{ subnet.dns | join(', ') }};
+ option domain-name "{{ subnet.domain }}";
+ }
+ {% if not loop.last %}
+
+ {% endif %}
+ {% endfor %}