Commit c036a76a authored by Mohamad Rahhal's avatar Mohamad Rahhal
Browse files

dhcp + tftp infrastructure implemented for testing

parent df8decf1
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ class _Resource(Resource):

class ZtpProvisioning(_Resource):
    def get(self, filename: str):
        # direct pass-through to ztp-server REST
        url = f"{ZTP_HTTP_BASE}/provisioning/{filename}"
        r = requests.get(url, auth=(ZTP_HTTP_USER, ZTP_HTTP_PASS), timeout=10)
        return Response(
@@ -47,10 +46,8 @@ class ZtpProvisioning(_Resource):
        )

class ZtpScript(_Resource):
    # GET /ztp-api/script/<string:scriptname>
    def __init__(self) -> None:
        super().__init__()
        # create the gRPC client only for the script endpoint
        self.ztp_client = ZtpClient(host=ZTP_GRPC_HOST, port=ZTP_GRPC_PORT)

    def get(self, scriptname: str):
+18 −0
Original line number Diff line number Diff line
# DHCP server configuration for NOS installation and ZTP
option default-url code 114 = text;
option ztp_json_url code 225 = text; # locally defined option since the 209 didnt work 

subnet 172.31.0.0 netmask 255.255.255.0 {
    option routers 172.31.0.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address 172.31.0.255;
    option domain-name-servers 8.8.8.8;
    range 172.31.0.50 172.31.0.200;

    next-server 172.31.0.3;                  # BOOTP siaddr / TFTP host
    option tftp-server-name "172.31.0.3";    # DHCP Option 66
    filename "onie.img";                     # DHCP Option 67
    option default-url = "http://172.31.0.4/proxy/image";  # Default URL for the NOS installer
    option ztp_json_url = "http://172.31.0.4/ztp/ztp.json";  # ZTP config URL which is the settings
}
+272 −0
Original line number Diff line number Diff line
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.1

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

lease 172.31.0.52 {
  starts 5 2025/10/17 12:38:55;
  ends 5 2025/10/17 12:48:55;
  tstp 5 2025/10/17 12:48:55;
  cltt 5 2025/10/17 12:38:55;
  binding state free;
  hardware ethernet 9a:71:da:03:dc:74;
  uid "\001\232q\332\003\334t";
}
lease 172.31.0.53 {
  starts 5 2025/10/17 13:12:05;
  ends 5 2025/10/17 13:22:05;
  tstp 5 2025/10/17 13:22:05;
  cltt 5 2025/10/17 13:12:05;
  binding state free;
  hardware ethernet 7e:17:f1:84:1e:ac;
  uid "\001~\027\361\204\036\254";
}
lease 172.31.0.54 {
  starts 5 2025/10/17 13:16:38;
  ends 5 2025/10/17 13:26:38;
  tstp 5 2025/10/17 13:26:38;
  cltt 5 2025/10/17 13:16:38;
  binding state free;
  hardware ethernet ea:6a:a4:04:38:78;
  uid "\001\352j\244\0048x";
}
lease 172.31.0.55 {
  starts 5 2025/10/17 13:21:26;
  ends 5 2025/10/17 13:31:26;
  tstp 5 2025/10/17 13:31:26;
  cltt 5 2025/10/17 13:21:26;
  binding state free;
  hardware ethernet 0e:0a:52:f6:e1:1d;
  uid "\001\016\012R\366\341\035";
}
lease 172.31.0.56 {
  starts 5 2025/10/17 13:23:07;
  ends 5 2025/10/17 13:33:07;
  tstp 5 2025/10/17 13:33:07;
  cltt 5 2025/10/17 13:23:07;
  binding state free;
  hardware ethernet 2a:82:a6:01:8b:4d;
  uid "\001*\202\246\001\213M";
}
lease 172.31.0.57 {
  starts 2 2025/10/21 10:39:38;
  ends 2 2025/10/21 22:39:38;
  tstp 2 2025/10/21 22:39:38;
  cltt 2 2025/10/21 10:39:38;
  binding state free;
  hardware ethernet de:ce:04:62:66:66;
  uid "\001\336\316\004bff";
}
lease 172.31.0.58 {
  starts 2 2025/10/21 10:41:57;
  ends 2 2025/10/21 22:41:57;
  tstp 2 2025/10/21 22:41:57;
  cltt 2 2025/10/21 10:41:57;
  binding state free;
  hardware ethernet aa:e6:9a:ae:9b:49;
  uid "\001\252\346\232\256\233I";
}
lease 172.31.0.59 {
  starts 2 2025/10/21 10:45:12;
  ends 2 2025/10/21 22:45:12;
  tstp 2 2025/10/21 22:45:12;
  cltt 2 2025/10/21 10:45:12;
  binding state free;
  hardware ethernet 32:db:a2:14:83:29;
  uid "\0012\333\242\024\203)";
}
lease 172.31.0.60 {
  starts 2 2025/10/21 10:45:30;
  ends 2 2025/10/21 22:45:30;
  tstp 2 2025/10/21 22:45:30;
  cltt 2 2025/10/21 10:45:30;
  binding state free;
  hardware ethernet 56:11:3e:1d:42:ae;
  uid "\001V\021>\035B\256";
}
lease 172.31.0.61 {
  starts 2 2025/10/21 10:48:24;
  ends 2 2025/10/21 22:48:24;
  tstp 2 2025/10/21 22:48:24;
  cltt 2 2025/10/21 10:48:24;
  binding state free;
  hardware ethernet 82:cd:82:8e:6a:fc;
  uid "\001\202\315\202\216j\374";
}
lease 172.31.0.62 {
  starts 2 2025/10/21 11:01:17;
  ends 2 2025/10/21 23:01:17;
  tstp 2 2025/10/21 23:01:17;
  cltt 2 2025/10/21 11:01:17;
  binding state free;
  hardware ethernet 6e:b1:c6:64:ee:55;
  uid "\001n\261\306d\356U";
}
lease 172.31.0.63 {
  starts 2 2025/10/21 11:14:24;
  ends 2 2025/10/21 23:14:24;
  tstp 2 2025/10/21 23:14:24;
  cltt 2 2025/10/21 11:14:24;
  binding state free;
  hardware ethernet 92:dc:4f:a8:fc:dc;
  uid "\001\222\334O\250\374\334";
}
lease 172.31.0.64 {
  starts 2 2025/10/21 11:15:35;
  ends 2 2025/10/21 23:15:35;
  tstp 2 2025/10/21 23:15:35;
  cltt 2 2025/10/21 11:15:35;
  binding state free;
  hardware ethernet 12:ba:50:b2:e6:21;
  uid "\001\022\272P\262\346!";
}
lease 172.31.0.65 {
  starts 2 2025/10/21 11:26:03;
  ends 2 2025/10/21 23:26:03;
  tstp 2 2025/10/21 23:26:03;
  cltt 2 2025/10/21 11:26:03;
  binding state free;
  hardware ethernet f6:ae:08:ea:34:8d;
  uid "\001\366\256\010\3524\215";
}
lease 172.31.0.66 {
  starts 2 2025/10/21 11:31:41;
  ends 2 2025/10/21 23:31:41;
  tstp 2 2025/10/21 23:31:41;
  cltt 2 2025/10/21 11:31:41;
  binding state free;
  hardware ethernet a2:2c:38:c3:2b:60;
  uid "\001\242,8\303+`";
}
lease 172.31.0.67 {
  starts 2 2025/10/21 11:48:12;
  ends 2 2025/10/21 23:48:12;
  tstp 2 2025/10/21 23:48:12;
  cltt 2 2025/10/21 11:48:12;
  binding state free;
  hardware ethernet 12:81:59:29:27:9d;
  uid "\001\022\201Y)'\235";
}
lease 172.31.0.68 {
  starts 2 2025/10/21 11:52:33;
  ends 2 2025/10/21 23:52:33;
  tstp 2 2025/10/21 23:52:33;
  cltt 2 2025/10/21 11:52:33;
  binding state free;
  hardware ethernet 7a:28:7e:4e:af:66;
  uid "\001z(~N\257f";
}
lease 172.31.0.69 {
  starts 2 2025/10/21 11:57:43;
  ends 2 2025/10/21 23:57:43;
  tstp 2 2025/10/21 23:57:43;
  cltt 2 2025/10/21 11:57:43;
  binding state free;
  hardware ethernet f2:2a:e8:7e:1e:fa;
  uid "\001\362*\350~\036\372";
}
lease 172.31.0.70 {
  starts 2 2025/10/21 12:02:18;
  ends 3 2025/10/22 00:02:18;
  tstp 3 2025/10/22 00:02:18;
  cltt 2 2025/10/21 12:02:18;
  binding state free;
  hardware ethernet f6:12:c4:52:3a:94;
  uid "\001\366\022\304R:\224";
}
lease 172.31.0.71 {
  starts 2 2025/10/21 12:05:11;
  ends 3 2025/10/22 00:05:11;
  tstp 3 2025/10/22 00:05:11;
  cltt 2 2025/10/21 12:05:11;
  binding state free;
  hardware ethernet 36:ac:f8:81:d8:c8;
  uid "\0016\254\370\201\330\310";
}
lease 172.31.0.72 {
  starts 2 2025/10/21 12:39:19;
  ends 3 2025/10/22 00:39:19;
  tstp 3 2025/10/22 00:39:19;
  cltt 2 2025/10/21 12:39:19;
  binding state free;
  hardware ethernet 8e:ea:52:5d:29:cd;
  uid "\001\216\352R])\315";
}
lease 172.31.0.73 {
  starts 2 2025/10/21 12:52:46;
  ends 3 2025/10/22 00:52:46;
  tstp 3 2025/10/22 00:52:46;
  cltt 2 2025/10/21 12:52:46;
  binding state free;
  hardware ethernet d6:0c:5c:09:b8:c7;
  uid "\001\326\014\\\011\270\307";
}
lease 172.31.0.74 {
  starts 2 2025/10/21 12:55:54;
  ends 3 2025/10/22 00:55:54;
  tstp 3 2025/10/22 00:55:54;
  cltt 2 2025/10/21 12:55:54;
  binding state free;
  hardware ethernet 4e:35:b5:f4:2e:24;
  uid "\001N5\265\364.$";
}
lease 172.31.0.75 {
  starts 2 2025/10/21 13:44:33;
  ends 3 2025/10/22 01:44:33;
  tstp 3 2025/10/22 01:44:33;
  cltt 2 2025/10/21 13:45:06;
  binding state free;
  hardware ethernet 3e:69:a7:21:08:ab;
  uid "\001>i\247!\010\253";
}
lease 172.31.0.76 {
  starts 3 2025/10/22 10:24:18;
  ends 3 2025/10/22 22:24:18;
  tstp 3 2025/10/22 22:24:18;
  cltt 3 2025/10/22 10:24:18;
  binding state free;
  hardware ethernet 7e:f0:d4:91:54:6b;
  uid "\001~\360\324\221Tk";
}
lease 172.31.0.77 {
  starts 3 2025/10/22 10:36:30;
  ends 3 2025/10/22 22:36:30;
  tstp 3 2025/10/22 22:36:30;
  cltt 3 2025/10/22 10:36:30;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 02:46:dd:94:cb:a4;
  uid "\001\002F\335\224\313\244";
  client-hostname "onie-whitebox";
}
lease 172.31.0.78 {
  starts 3 2025/10/22 10:37:37;
  ends 3 2025/10/22 22:37:37;
  cltt 3 2025/10/22 10:38:10;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet de:95:7c:6a:97:40;
  uid "\001\336\225|j\227@";
  client-hostname "onie-whitebox";
}
lease 172.31.0.77 {
  starts 3 2025/10/22 10:36:30;
  ends 3 2025/10/22 22:36:30;
  tstp 3 2025/10/22 22:36:30;
  cltt 3 2025/10/22 10:36:30;
  binding state free;
  hardware ethernet 02:46:dd:94:cb:a4;
  uid "\001\002F\335\224\313\244";
}
lease 172.31.0.78 {
  starts 3 2025/10/22 10:37:37;
  ends 3 2025/10/22 22:37:37;
  tstp 3 2025/10/22 22:37:37;
  cltt 3 2025/10/22 10:38:10;
  binding state free;
  hardware ethernet de:95:7c:6a:97:40;
  uid "\001\336\225|j\227@";
}
+268 −0
Original line number Diff line number Diff line
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.1

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

lease 172.31.0.52 {
  starts 5 2025/10/17 12:38:55;
  ends 5 2025/10/17 12:48:55;
  tstp 5 2025/10/17 12:48:55;
  cltt 5 2025/10/17 12:38:55;
  binding state free;
  hardware ethernet 9a:71:da:03:dc:74;
  uid "\001\232q\332\003\334t";
}
lease 172.31.0.53 {
  starts 5 2025/10/17 13:12:05;
  ends 5 2025/10/17 13:22:05;
  tstp 5 2025/10/17 13:22:05;
  cltt 5 2025/10/17 13:12:05;
  binding state free;
  hardware ethernet 7e:17:f1:84:1e:ac;
  uid "\001~\027\361\204\036\254";
}
lease 172.31.0.54 {
  starts 5 2025/10/17 13:16:38;
  ends 5 2025/10/17 13:26:38;
  tstp 5 2025/10/17 13:26:38;
  cltt 5 2025/10/17 13:16:38;
  binding state free;
  hardware ethernet ea:6a:a4:04:38:78;
  uid "\001\352j\244\0048x";
}
lease 172.31.0.55 {
  starts 5 2025/10/17 13:21:26;
  ends 5 2025/10/17 13:31:26;
  tstp 5 2025/10/17 13:31:26;
  cltt 5 2025/10/17 13:21:26;
  binding state free;
  hardware ethernet 0e:0a:52:f6:e1:1d;
  uid "\001\016\012R\366\341\035";
}
lease 172.31.0.56 {
  starts 5 2025/10/17 13:23:07;
  ends 5 2025/10/17 13:33:07;
  tstp 5 2025/10/17 13:33:07;
  cltt 5 2025/10/17 13:23:07;
  binding state free;
  hardware ethernet 2a:82:a6:01:8b:4d;
  uid "\001*\202\246\001\213M";
}
lease 172.31.0.57 {
  starts 2 2025/10/21 10:39:38;
  ends 2 2025/10/21 22:39:38;
  tstp 2 2025/10/21 22:39:38;
  cltt 2 2025/10/21 10:39:38;
  binding state free;
  hardware ethernet de:ce:04:62:66:66;
  uid "\001\336\316\004bff";
}
lease 172.31.0.58 {
  starts 2 2025/10/21 10:41:57;
  ends 2 2025/10/21 22:41:57;
  tstp 2 2025/10/21 22:41:57;
  cltt 2 2025/10/21 10:41:57;
  binding state free;
  hardware ethernet aa:e6:9a:ae:9b:49;
  uid "\001\252\346\232\256\233I";
}
lease 172.31.0.59 {
  starts 2 2025/10/21 10:45:12;
  ends 2 2025/10/21 22:45:12;
  tstp 2 2025/10/21 22:45:12;
  cltt 2 2025/10/21 10:45:12;
  binding state free;
  hardware ethernet 32:db:a2:14:83:29;
  uid "\0012\333\242\024\203)";
}
lease 172.31.0.60 {
  starts 2 2025/10/21 10:45:30;
  ends 2 2025/10/21 22:45:30;
  tstp 2 2025/10/21 22:45:30;
  cltt 2 2025/10/21 10:45:30;
  binding state free;
  hardware ethernet 56:11:3e:1d:42:ae;
  uid "\001V\021>\035B\256";
}
lease 172.31.0.61 {
  starts 2 2025/10/21 10:48:24;
  ends 2 2025/10/21 22:48:24;
  tstp 2 2025/10/21 22:48:24;
  cltt 2 2025/10/21 10:48:24;
  binding state free;
  hardware ethernet 82:cd:82:8e:6a:fc;
  uid "\001\202\315\202\216j\374";
}
lease 172.31.0.62 {
  starts 2 2025/10/21 11:01:17;
  ends 2 2025/10/21 23:01:17;
  tstp 2 2025/10/21 23:01:17;
  cltt 2 2025/10/21 11:01:17;
  binding state free;
  hardware ethernet 6e:b1:c6:64:ee:55;
  uid "\001n\261\306d\356U";
}
lease 172.31.0.63 {
  starts 2 2025/10/21 11:14:24;
  ends 2 2025/10/21 23:14:24;
  tstp 2 2025/10/21 23:14:24;
  cltt 2 2025/10/21 11:14:24;
  binding state free;
  hardware ethernet 92:dc:4f:a8:fc:dc;
  uid "\001\222\334O\250\374\334";
}
lease 172.31.0.64 {
  starts 2 2025/10/21 11:15:35;
  ends 2 2025/10/21 23:15:35;
  tstp 2 2025/10/21 23:15:35;
  cltt 2 2025/10/21 11:15:35;
  binding state free;
  hardware ethernet 12:ba:50:b2:e6:21;
  uid "\001\022\272P\262\346!";
}
lease 172.31.0.65 {
  starts 2 2025/10/21 11:26:03;
  ends 2 2025/10/21 23:26:03;
  tstp 2 2025/10/21 23:26:03;
  cltt 2 2025/10/21 11:26:03;
  binding state free;
  hardware ethernet f6:ae:08:ea:34:8d;
  uid "\001\366\256\010\3524\215";
}
lease 172.31.0.66 {
  starts 2 2025/10/21 11:31:41;
  ends 2 2025/10/21 23:31:41;
  tstp 2 2025/10/21 23:31:41;
  cltt 2 2025/10/21 11:31:41;
  binding state free;
  hardware ethernet a2:2c:38:c3:2b:60;
  uid "\001\242,8\303+`";
}
lease 172.31.0.67 {
  starts 2 2025/10/21 11:48:12;
  ends 2 2025/10/21 23:48:12;
  tstp 2 2025/10/21 23:48:12;
  cltt 2 2025/10/21 11:48:12;
  binding state free;
  hardware ethernet 12:81:59:29:27:9d;
  uid "\001\022\201Y)'\235";
}
lease 172.31.0.68 {
  starts 2 2025/10/21 11:52:33;
  ends 2 2025/10/21 23:52:33;
  tstp 2 2025/10/21 23:52:33;
  cltt 2 2025/10/21 11:52:33;
  binding state free;
  hardware ethernet 7a:28:7e:4e:af:66;
  uid "\001z(~N\257f";
}
lease 172.31.0.69 {
  starts 2 2025/10/21 11:57:43;
  ends 2 2025/10/21 23:57:43;
  tstp 2 2025/10/21 23:57:43;
  cltt 2 2025/10/21 11:57:43;
  binding state free;
  hardware ethernet f2:2a:e8:7e:1e:fa;
  uid "\001\362*\350~\036\372";
}
lease 172.31.0.70 {
  starts 2 2025/10/21 12:02:18;
  ends 3 2025/10/22 00:02:18;
  tstp 3 2025/10/22 00:02:18;
  cltt 2 2025/10/21 12:02:18;
  binding state free;
  hardware ethernet f6:12:c4:52:3a:94;
  uid "\001\366\022\304R:\224";
}
lease 172.31.0.71 {
  starts 2 2025/10/21 12:05:11;
  ends 3 2025/10/22 00:05:11;
  tstp 3 2025/10/22 00:05:11;
  cltt 2 2025/10/21 12:05:11;
  binding state free;
  hardware ethernet 36:ac:f8:81:d8:c8;
  uid "\0016\254\370\201\330\310";
}
lease 172.31.0.72 {
  starts 2 2025/10/21 12:39:19;
  ends 3 2025/10/22 00:39:19;
  tstp 3 2025/10/22 00:39:19;
  cltt 2 2025/10/21 12:39:19;
  binding state free;
  hardware ethernet 8e:ea:52:5d:29:cd;
  uid "\001\216\352R])\315";
}
lease 172.31.0.73 {
  starts 2 2025/10/21 12:52:46;
  ends 3 2025/10/22 00:52:46;
  tstp 3 2025/10/22 00:52:46;
  cltt 2 2025/10/21 12:52:46;
  binding state free;
  hardware ethernet d6:0c:5c:09:b8:c7;
  uid "\001\326\014\\\011\270\307";
}
lease 172.31.0.74 {
  starts 2 2025/10/21 12:55:54;
  ends 3 2025/10/22 00:55:54;
  tstp 3 2025/10/22 00:55:54;
  cltt 2 2025/10/21 12:55:54;
  binding state free;
  hardware ethernet 4e:35:b5:f4:2e:24;
  uid "\001N5\265\364.$";
}
lease 172.31.0.75 {
  starts 2 2025/10/21 13:44:33;
  ends 3 2025/10/22 01:44:33;
  tstp 3 2025/10/22 01:44:33;
  cltt 2 2025/10/21 13:45:06;
  binding state free;
  hardware ethernet 3e:69:a7:21:08:ab;
  uid "\001>i\247!\010\253";
}
lease 172.31.0.76 {
  starts 3 2025/10/22 10:24:18;
  ends 3 2025/10/22 22:24:18;
  tstp 3 2025/10/22 22:24:18;
  cltt 3 2025/10/22 10:24:18;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 7e:f0:d4:91:54:6b;
  uid "\001~\360\324\221Tk";
  client-hostname "onie-whitebox";
}
lease 172.31.0.77 {
  starts 3 2025/10/22 10:36:30;
  ends 3 2025/10/22 22:36:30;
  tstp 3 2025/10/22 22:36:30;
  cltt 3 2025/10/22 10:36:30;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 02:46:dd:94:cb:a4;
  uid "\001\002F\335\224\313\244";
  client-hostname "onie-whitebox";
}
server-duid "\000\001\000\0010\213mI\206\217\304\372\236\030";

lease 172.31.0.78 {
  starts 3 2025/10/22 10:37:37;
  ends 3 2025/10/22 22:37:37;
  cltt 3 2025/10/22 10:37:37;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet de:95:7c:6a:97:40;
  uid "\001\336\225|j\227@";
  client-hostname "onie-whitebox";
}
lease 172.31.0.76 {
  starts 3 2025/10/22 10:24:18;
  ends 3 2025/10/22 22:24:18;
  tstp 3 2025/10/22 22:24:18;
  cltt 3 2025/10/22 10:24:18;
  binding state free;
  hardware ethernet 7e:f0:d4:91:54:6b;
  uid "\001~\360\324\221Tk";
}
+59 −0
Original line number Diff line number Diff line
version: '3.8'

services:
  dhcp-server:
    image: networkboot/dhcpd
    container_name: dhcp-server
    cap_add: ["NET_ADMIN"]
    environment:
      INTERFACES: "eth0"
    volumes:
      - ./data:/data
    networks:
      - wblabnet17231
    restart: unless-stopped

  tftp-server:
    build:
      context: ./tftp
      dockerfile: Dockerfile
    container_name: tftp-server
    volumes:
      - ./tftp/boot:/tftpboot
    networks:
      - wblabnet17231
    restart: unless-stopped

  whitebox:
    build:
      context: ./whitebox
      dockerfile: Dockerfile
    container_name: whitebox-emulator
    networks:
      - wblabnet17231
    cap_add: [NET_ADMIN, NET_RAW]
    environment:
      WB_IFACE: "eth0"
    depends_on:
      - dhcp-server
      - tftp-server

  http-server:
    image: nginx:alpine
    container_name: http-server
    volumes:
      - ./http:/usr/share/nginx/html:ro
    networks:
      - wblabnet17231
    restart: unless-stopped
    #ports:
    #  - "443:443"  

networks:
  wblabnet17231:
    name: wblabnet17231
    driver: bridge
    ipam:
      config:
        - subnet: 172.31.0.0/24
          gateway: 172.31.0.1
Loading