From a8f7fedced74b0c7259948fecfd481174ec610f0 Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Fri, 20 Feb 2026 10:58:29 +0000 Subject: [PATCH] proto: add disable_expiry field to ExpireNodeRequest Add bool disable_expiry field (field 3) to ExpireNodeRequest proto and regenerate all protobuf, gRPC gateway, and OpenAPI files. Fixes #2681 Co-authored-by: Marco Santos --- gen/go/headscale/v1/node.pb.go | 20 ++++++++++++++----- .../headscale/v1/headscale.swagger.json | 7 +++++++ proto/headscale/v1/node.proto | 2 ++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gen/go/headscale/v1/node.pb.go b/gen/go/headscale/v1/node.pb.go index b4b7e8f6..32142ed8 100644 --- a/gen/go/headscale/v1/node.pb.go +++ b/gen/go/headscale/v1/node.pb.go @@ -715,9 +715,11 @@ func (*DeleteNodeResponse) Descriptor() ([]byte, []int) { } type ExpireNodeRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - NodeId uint64 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Expiry *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiry,proto3" json:"expiry,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + NodeId uint64 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Expiry *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiry,proto3" json:"expiry,omitempty"` + // When true, sets expiry to null (node will never expire). + DisableExpiry bool `protobuf:"varint,3,opt,name=disable_expiry,json=disableExpiry,proto3" json:"disable_expiry,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -766,6 +768,13 @@ func (x *ExpireNodeRequest) GetExpiry() *timestamppb.Timestamp { return nil } +func (x *ExpireNodeRequest) GetDisableExpiry() bool { + if x != nil { + return x.DisableExpiry + } + return false +} + type ExpireNodeResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` @@ -1245,10 +1254,11 @@ const file_headscale_v1_node_proto_rawDesc = "" + "\x04node\x18\x01 \x01(\v2\x12.headscale.v1.NodeR\x04node\",\n" + "\x11DeleteNodeRequest\x12\x17\n" + "\anode_id\x18\x01 \x01(\x04R\x06nodeId\"\x14\n" + - "\x12DeleteNodeResponse\"`\n" + + "\x12DeleteNodeResponse\"\x87\x01\n" + "\x11ExpireNodeRequest\x12\x17\n" + "\anode_id\x18\x01 \x01(\x04R\x06nodeId\x122\n" + - "\x06expiry\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x06expiry\"<\n" + + "\x06expiry\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x06expiry\x12%\n" + + "\x0edisable_expiry\x18\x03 \x01(\bR\rdisableExpiry\"<\n" + "\x12ExpireNodeResponse\x12&\n" + "\x04node\x18\x01 \x01(\v2\x12.headscale.v1.NodeR\x04node\"G\n" + "\x11RenameNodeRequest\x12\x17\n" + diff --git a/gen/openapiv2/headscale/v1/headscale.swagger.json b/gen/openapiv2/headscale/v1/headscale.swagger.json index 1db1db94..581d7432 100644 --- a/gen/openapiv2/headscale/v1/headscale.swagger.json +++ b/gen/openapiv2/headscale/v1/headscale.swagger.json @@ -420,6 +420,13 @@ "required": false, "type": "string", "format": "date-time" + }, + { + "name": "disableExpiry", + "description": "When true, sets expiry to null (node will never expire).", + "in": "query", + "required": false, + "type": "boolean" } ], "tags": [ diff --git a/proto/headscale/v1/node.proto b/proto/headscale/v1/node.proto index 3ce83c4b..1a3dd0e6 100644 --- a/proto/headscale/v1/node.proto +++ b/proto/headscale/v1/node.proto @@ -99,6 +99,8 @@ message DeleteNodeResponse {} message ExpireNodeRequest { uint64 node_id = 1; google.protobuf.Timestamp expiry = 2; + // When true, sets expiry to null (node will never expire). + bool disable_expiry = 3; } message ExpireNodeResponse {