Skip to content

Commit c3f0b7e

Browse files
authored
feat: add dhcp-server on oob port (#165)
1 parent 78a8475 commit c3f0b7e

File tree

4 files changed

+89
-12
lines changed

4 files changed

+89
-12
lines changed

terraform/modules/ros-dhcp/main.tf

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
terraform {
2+
required_version = ">= 1.8.0"
3+
4+
required_providers {
5+
routeros = {
6+
source = "terraform-routeros/routeros"
7+
version = "1.81.1"
8+
}
9+
}
10+
}
11+
12+
locals {
13+
cidr = "${var.cidr_prefix}/${var.cidr_bits}"
14+
}
15+
16+
variable "interface" {
17+
type = string
18+
}
19+
20+
variable "cidr_prefix" {
21+
type = string
22+
}
23+
24+
variable "cidr_bits" {
25+
type = number
26+
default = 24
27+
}
28+
29+
variable "dhcp_start_ip" {
30+
type = number
31+
default = 200
32+
}
33+
34+
variable "dhcp_end_ip" {
35+
type = number
36+
default = 254
37+
}
38+
39+
variable "dhcp_lease_time" {
40+
type = string
41+
default = "1d"
42+
}
43+
44+
resource "routeros_ip_pool" "self" {
45+
name = var.interface
46+
ranges = ["${cidrhost(local.cidr, var.dhcp_start_ip)}-${cidrhost(local.cidr, var.dhcp_end_ip)}"]
47+
}
48+
49+
resource "routeros_ip_dhcp_server" "self" {
50+
name = var.interface
51+
interface = var.interface
52+
lease_time = var.dhcp_lease_time
53+
address_pool = routeros_ip_pool.self.name
54+
}
55+
56+
resource "routeros_ip_dhcp_server_network" "self" {
57+
address = local.cidr
58+
}

terraform/modules/ros-management-config/inputs.tf

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ variable "bridge_name" {
22
type = string
33
}
44

5-
variable "oob_mgmt_port" {
5+
variable "oob_mgmt_interface" {
66
type = string
77
}
88

9-
variable "oob_mgmt_address" {
10-
type = string
9+
variable "oob_mgmt_cidr_prefix" {
10+
type = string
11+
default = "192.168.88.0"
12+
}
13+
14+
variable "oob_mgmt_cidr_bits" {
15+
type = number
16+
default = 24
1117
}
1218

1319
variable "mgmt_vlan_id" {

terraform/modules/ros-management-config/main.tf

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1+
# TODO: set router identity
2+
# TODO: import SSH keys
13
# TODO: add dhcp-server on management subnet
24
# TODO: add dhcp-client on admin vlan
35
# TODO: implement VRF for services
46

7+
locals {
8+
oob_mgmt_cidr = "${var.oob_mgmt_cidr_prefix}/${var.oob_mgmt_cidr_bits}"
9+
}
10+
511
resource "routeros_interface_list" "admin" {
612
name = "admin-ifces"
713
}
814

9-
resource "routeros_interface_list_member" "admin_port" {
15+
resource "routeros_interface_list_member" "admin_interface" {
1016
list = routeros_interface_list.admin.name
11-
interface = var.oob_mgmt_port
17+
interface = var.oob_mgmt_interface
1218
}
1319

1420
resource "routeros_interface_list_member" "admin_vlan" {
@@ -22,7 +28,15 @@ resource "routeros_interface_vlan" "admin" {
2228
vlan_id = var.mgmt_vlan_id
2329
}
2430

25-
resource "routeros_ip_address" "admin" {
26-
interface = var.oob_mgmt_port
27-
address = var.oob_mgmt_address
31+
resource "routeros_ip_address" "oob" {
32+
interface = var.oob_mgmt_interface
33+
address = "${cidrhost(local.oob_mgmt_cidr, 1)}/${var.oob_mgmt_cidr_bits}"
34+
}
35+
36+
module "oob_dhcp" {
37+
source = "../ros-dhcp"
38+
39+
interface = var.oob_mgmt_interface
40+
cidr_prefix = var.oob_mgmt_cidr_prefix
41+
cidr_bits = var.oob_mgmt_cidr_bits
2842
}

terraform/stacks/network-new/main.tf

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,9 @@ module "crs320_management_config" {
6363

6464
source = "../../modules/ros-management-config"
6565

66-
bridge_name = module.crs320_bridge.bridge_name
67-
mgmt_vlan_id = 99
68-
oob_mgmt_address = "192.168.88.1/24"
69-
oob_mgmt_port = "ether17"
66+
bridge_name = module.crs320_bridge.bridge_name
67+
mgmt_vlan_id = 99
68+
oob_mgmt_interface = "ether17"
7069
}
7170

7271
output "debug" {

0 commit comments

Comments
 (0)