diff --git a/cmd/uncloud/dns/reserve.go b/cmd/uncloud/dns/reserve.go index 78ba7398..bdbc66ba 100644 --- a/cmd/uncloud/dns/reserve.go +++ b/cmd/uncloud/dns/reserve.go @@ -47,7 +47,7 @@ func reserve(ctx context.Context, uncli *cli.CLI, opts reserveOptions) error { } defer client.Close() - domain, err := client.ReserveDomain(ctx, &pb.ReserveDomainRequest{ApiEndpoint: opts.endpoint}) + domain, err := client.ReserveDomain(ctx, &pb.ReserveDomainRequest{Endpoint: opts.endpoint}) if err != nil { if status.Convert(err).Code() == codes.AlreadyExists { return errors.New("domain already reserved") diff --git a/internal/machine/api/pb/cluster.pb.go b/internal/machine/api/pb/cluster.pb.go index dba977a1..753a2b9f 100644 --- a/internal/machine/api/pb/cluster.pb.go +++ b/internal/machine/api/pb/cluster.pb.go @@ -124,7 +124,7 @@ func (x DNSRecord_RecordType) Number() protoreflect.EnumNumber { // Deprecated: Use DNSRecord_RecordType.Descriptor instead. func (DNSRecord_RecordType) EnumDescriptor() ([]byte, []int) { - return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{7, 0} + return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{8, 0} } type AddMachineRequest struct { @@ -383,7 +383,7 @@ type ReserveDomainRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ApiEndpoint string `protobuf:"bytes,1,opt,name=api_endpoint,json=apiEndpoint,proto3" json:"api_endpoint,omitempty"` + Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` } func (x *ReserveDomainRequest) Reset() { @@ -418,14 +418,14 @@ func (*ReserveDomainRequest) Descriptor() ([]byte, []int) { return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{5} } -func (x *ReserveDomainRequest) GetApiEndpoint() string { +func (x *ReserveDomainRequest) GetEndpoint() string { if x != nil { - return x.ApiEndpoint + return x.Endpoint } return "" } -type UpdateDomainRecordsRequest struct { +type CreateDomainRecordsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -433,8 +433,8 @@ type UpdateDomainRecordsRequest struct { Records []*DNSRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` } -func (x *UpdateDomainRecordsRequest) Reset() { - *x = UpdateDomainRecordsRequest{} +func (x *CreateDomainRecordsRequest) Reset() { + *x = CreateDomainRecordsRequest{} if protoimpl.UnsafeEnabled { mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -442,13 +442,13 @@ func (x *UpdateDomainRecordsRequest) Reset() { } } -func (x *UpdateDomainRecordsRequest) String() string { +func (x *CreateDomainRecordsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateDomainRecordsRequest) ProtoMessage() {} +func (*CreateDomainRecordsRequest) ProtoMessage() {} -func (x *UpdateDomainRecordsRequest) ProtoReflect() protoreflect.Message { +func (x *CreateDomainRecordsRequest) ProtoReflect() protoreflect.Message { mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -460,12 +460,59 @@ func (x *UpdateDomainRecordsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateDomainRecordsRequest.ProtoReflect.Descriptor instead. -func (*UpdateDomainRecordsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateDomainRecordsRequest.ProtoReflect.Descriptor instead. +func (*CreateDomainRecordsRequest) Descriptor() ([]byte, []int) { return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{6} } -func (x *UpdateDomainRecordsRequest) GetRecords() []*DNSRecord { +func (x *CreateDomainRecordsRequest) GetRecords() []*DNSRecord { + if x != nil { + return x.Records + } + return nil +} + +type CreateDomainRecordsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Records []*DNSRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` +} + +func (x *CreateDomainRecordsResponse) Reset() { + *x = CreateDomainRecordsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateDomainRecordsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateDomainRecordsResponse) ProtoMessage() {} + +func (x *CreateDomainRecordsResponse) ProtoReflect() protoreflect.Message { + mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateDomainRecordsResponse.ProtoReflect.Descriptor instead. +func (*CreateDomainRecordsResponse) Descriptor() ([]byte, []int) { + return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{7} +} + +func (x *CreateDomainRecordsResponse) GetRecords() []*DNSRecord { if x != nil { return x.Records } @@ -485,7 +532,7 @@ type DNSRecord struct { func (x *DNSRecord) Reset() { *x = DNSRecord{} if protoimpl.UnsafeEnabled { - mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[7] + mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -498,7 +545,7 @@ func (x *DNSRecord) String() string { func (*DNSRecord) ProtoMessage() {} func (x *DNSRecord) ProtoReflect() protoreflect.Message { - mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[7] + mi := &file_internal_machine_api_pb_cluster_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -511,7 +558,7 @@ func (x *DNSRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use DNSRecord.ProtoReflect.Descriptor instead. func (*DNSRecord) Descriptor() ([]byte, []int) { - return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{7} + return file_internal_machine_api_pb_cluster_proto_rawDescGZIP(), []int{8} } func (x *DNSRecord) GetName() string { @@ -572,53 +619,57 @@ var file_internal_machine_api_pb_cluster_proto_rawDesc = []byte{ 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x39, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x61, 0x70, 0x69, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x69, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x22, 0x46, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x09, 0x44, 0x4e, - 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x41, 0x41, 0x41, - 0x10, 0x02, 0x32, 0xfc, 0x02, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x3d, - 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x34, 0x0a, 0x0d, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x12, 0x4e, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x73, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x6b, 0x69, 0x2f, 0x75, 0x6e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x32, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x1a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x22, 0x47, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x28, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x09, + 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x44, 0x4e, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x41, + 0x41, 0x41, 0x10, 0x02, 0x32, 0x86, 0x03, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x12, 0x3d, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x16, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x34, 0x0a, + 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x12, 0x58, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x37, 0x5a, + 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x73, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x6b, 0x69, 0x2f, 0x75, 0x6e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -634,47 +685,49 @@ func file_internal_machine_api_pb_cluster_proto_rawDescGZIP() []byte { } var file_internal_machine_api_pb_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_internal_machine_api_pb_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_internal_machine_api_pb_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_internal_machine_api_pb_cluster_proto_goTypes = []any{ - (MachineMember_MembershipState)(0), // 0: api.MachineMember.MembershipState - (DNSRecord_RecordType)(0), // 1: api.DNSRecord.RecordType - (*AddMachineRequest)(nil), // 2: api.AddMachineRequest - (*AddMachineResponse)(nil), // 3: api.AddMachineResponse - (*MachineMember)(nil), // 4: api.MachineMember - (*ListMachinesResponse)(nil), // 5: api.ListMachinesResponse - (*Domain)(nil), // 6: api.Domain - (*ReserveDomainRequest)(nil), // 7: api.ReserveDomainRequest - (*UpdateDomainRecordsRequest)(nil), // 8: api.UpdateDomainRecordsRequest - (*DNSRecord)(nil), // 9: api.DNSRecord - (*NetworkConfig)(nil), // 10: api.NetworkConfig - (*MachineInfo)(nil), // 11: api.MachineInfo - (*emptypb.Empty)(nil), // 12: google.protobuf.Empty + (MachineMember_MembershipState)(0), // 0: api.MachineMember.MembershipState + (DNSRecord_RecordType)(0), // 1: api.DNSRecord.RecordType + (*AddMachineRequest)(nil), // 2: api.AddMachineRequest + (*AddMachineResponse)(nil), // 3: api.AddMachineResponse + (*MachineMember)(nil), // 4: api.MachineMember + (*ListMachinesResponse)(nil), // 5: api.ListMachinesResponse + (*Domain)(nil), // 6: api.Domain + (*ReserveDomainRequest)(nil), // 7: api.ReserveDomainRequest + (*CreateDomainRecordsRequest)(nil), // 8: api.CreateDomainRecordsRequest + (*CreateDomainRecordsResponse)(nil), // 9: api.CreateDomainRecordsResponse + (*DNSRecord)(nil), // 10: api.DNSRecord + (*NetworkConfig)(nil), // 11: api.NetworkConfig + (*MachineInfo)(nil), // 12: api.MachineInfo + (*emptypb.Empty)(nil), // 13: google.protobuf.Empty } var file_internal_machine_api_pb_cluster_proto_depIdxs = []int32{ - 10, // 0: api.AddMachineRequest.network:type_name -> api.NetworkConfig - 11, // 1: api.AddMachineResponse.machine:type_name -> api.MachineInfo - 11, // 2: api.MachineMember.machine:type_name -> api.MachineInfo + 11, // 0: api.AddMachineRequest.network:type_name -> api.NetworkConfig + 12, // 1: api.AddMachineResponse.machine:type_name -> api.MachineInfo + 12, // 2: api.MachineMember.machine:type_name -> api.MachineInfo 0, // 3: api.MachineMember.state:type_name -> api.MachineMember.MembershipState 4, // 4: api.ListMachinesResponse.machines:type_name -> api.MachineMember - 9, // 5: api.UpdateDomainRecordsRequest.records:type_name -> api.DNSRecord - 1, // 6: api.DNSRecord.type:type_name -> api.DNSRecord.RecordType - 2, // 7: api.Cluster.AddMachine:input_type -> api.AddMachineRequest - 12, // 8: api.Cluster.ListMachines:input_type -> google.protobuf.Empty - 7, // 9: api.Cluster.ReserveDomain:input_type -> api.ReserveDomainRequest - 12, // 10: api.Cluster.GetDomain:input_type -> google.protobuf.Empty - 12, // 11: api.Cluster.ReleaseDomain:input_type -> google.protobuf.Empty - 8, // 12: api.Cluster.UpdateDomainRecords:input_type -> api.UpdateDomainRecordsRequest - 3, // 13: api.Cluster.AddMachine:output_type -> api.AddMachineResponse - 5, // 14: api.Cluster.ListMachines:output_type -> api.ListMachinesResponse - 6, // 15: api.Cluster.ReserveDomain:output_type -> api.Domain - 6, // 16: api.Cluster.GetDomain:output_type -> api.Domain - 6, // 17: api.Cluster.ReleaseDomain:output_type -> api.Domain - 12, // 18: api.Cluster.UpdateDomainRecords:output_type -> google.protobuf.Empty - 13, // [13:19] is the sub-list for method output_type - 7, // [7:13] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 10, // 5: api.CreateDomainRecordsRequest.records:type_name -> api.DNSRecord + 10, // 6: api.CreateDomainRecordsResponse.records:type_name -> api.DNSRecord + 1, // 7: api.DNSRecord.type:type_name -> api.DNSRecord.RecordType + 2, // 8: api.Cluster.AddMachine:input_type -> api.AddMachineRequest + 13, // 9: api.Cluster.ListMachines:input_type -> google.protobuf.Empty + 7, // 10: api.Cluster.ReserveDomain:input_type -> api.ReserveDomainRequest + 13, // 11: api.Cluster.GetDomain:input_type -> google.protobuf.Empty + 13, // 12: api.Cluster.ReleaseDomain:input_type -> google.protobuf.Empty + 8, // 13: api.Cluster.CreateDomainRecords:input_type -> api.CreateDomainRecordsRequest + 3, // 14: api.Cluster.AddMachine:output_type -> api.AddMachineResponse + 5, // 15: api.Cluster.ListMachines:output_type -> api.ListMachinesResponse + 6, // 16: api.Cluster.ReserveDomain:output_type -> api.Domain + 6, // 17: api.Cluster.GetDomain:output_type -> api.Domain + 6, // 18: api.Cluster.ReleaseDomain:output_type -> api.Domain + 9, // 19: api.Cluster.CreateDomainRecords:output_type -> api.CreateDomainRecordsResponse + 14, // [14:20] is the sub-list for method output_type + 8, // [8:14] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_internal_machine_api_pb_cluster_proto_init() } @@ -757,7 +810,7 @@ func file_internal_machine_api_pb_cluster_proto_init() { } } file_internal_machine_api_pb_cluster_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*UpdateDomainRecordsRequest); i { + switch v := v.(*CreateDomainRecordsRequest); i { case 0: return &v.state case 1: @@ -769,6 +822,18 @@ func file_internal_machine_api_pb_cluster_proto_init() { } } file_internal_machine_api_pb_cluster_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*CreateDomainRecordsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_machine_api_pb_cluster_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DNSRecord); i { case 0: return &v.state @@ -787,7 +852,7 @@ func file_internal_machine_api_pb_cluster_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_internal_machine_api_pb_cluster_proto_rawDesc, NumEnums: 2, - NumMessages: 8, + NumMessages: 9, NumExtensions: 0, NumServices: 1, }, diff --git a/internal/machine/api/pb/cluster.proto b/internal/machine/api/pb/cluster.proto index 03e9aa1e..519a5798 100644 --- a/internal/machine/api/pb/cluster.proto +++ b/internal/machine/api/pb/cluster.proto @@ -14,7 +14,7 @@ service Cluster { rpc ReserveDomain(ReserveDomainRequest) returns (Domain); rpc GetDomain(google.protobuf.Empty) returns (Domain); rpc ReleaseDomain(google.protobuf.Empty) returns (Domain); - rpc UpdateDomainRecords(UpdateDomainRecordsRequest) returns (google.protobuf.Empty); + rpc CreateDomainRecords(CreateDomainRecordsRequest) returns (CreateDomainRecordsResponse); } message AddMachineRequest { @@ -52,10 +52,14 @@ message Domain { } message ReserveDomainRequest { - string api_endpoint = 1; + string endpoint = 1; } -message UpdateDomainRecordsRequest { +message CreateDomainRecordsRequest { + repeated DNSRecord records = 1; +} + +message CreateDomainRecordsResponse { repeated DNSRecord records = 1; } diff --git a/internal/machine/api/pb/cluster_grpc.pb.go b/internal/machine/api/pb/cluster_grpc.pb.go index 7c75612d..2362075a 100644 --- a/internal/machine/api/pb/cluster_grpc.pb.go +++ b/internal/machine/api/pb/cluster_grpc.pb.go @@ -25,7 +25,7 @@ const ( Cluster_ReserveDomain_FullMethodName = "/api.Cluster/ReserveDomain" Cluster_GetDomain_FullMethodName = "/api.Cluster/GetDomain" Cluster_ReleaseDomain_FullMethodName = "/api.Cluster/ReleaseDomain" - Cluster_UpdateDomainRecords_FullMethodName = "/api.Cluster/UpdateDomainRecords" + Cluster_CreateDomainRecords_FullMethodName = "/api.Cluster/CreateDomainRecords" ) // ClusterClient is the client API for Cluster service. @@ -37,7 +37,7 @@ type ClusterClient interface { ReserveDomain(ctx context.Context, in *ReserveDomainRequest, opts ...grpc.CallOption) (*Domain, error) GetDomain(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Domain, error) ReleaseDomain(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Domain, error) - UpdateDomainRecords(ctx context.Context, in *UpdateDomainRecordsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + CreateDomainRecords(ctx context.Context, in *CreateDomainRecordsRequest, opts ...grpc.CallOption) (*CreateDomainRecordsResponse, error) } type clusterClient struct { @@ -98,10 +98,10 @@ func (c *clusterClient) ReleaseDomain(ctx context.Context, in *emptypb.Empty, op return out, nil } -func (c *clusterClient) UpdateDomainRecords(ctx context.Context, in *UpdateDomainRecordsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { +func (c *clusterClient) CreateDomainRecords(ctx context.Context, in *CreateDomainRecordsRequest, opts ...grpc.CallOption) (*CreateDomainRecordsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Cluster_UpdateDomainRecords_FullMethodName, in, out, cOpts...) + out := new(CreateDomainRecordsResponse) + err := c.cc.Invoke(ctx, Cluster_CreateDomainRecords_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -117,7 +117,7 @@ type ClusterServer interface { ReserveDomain(context.Context, *ReserveDomainRequest) (*Domain, error) GetDomain(context.Context, *emptypb.Empty) (*Domain, error) ReleaseDomain(context.Context, *emptypb.Empty) (*Domain, error) - UpdateDomainRecords(context.Context, *UpdateDomainRecordsRequest) (*emptypb.Empty, error) + CreateDomainRecords(context.Context, *CreateDomainRecordsRequest) (*CreateDomainRecordsResponse, error) mustEmbedUnimplementedClusterServer() } @@ -143,8 +143,8 @@ func (UnimplementedClusterServer) GetDomain(context.Context, *emptypb.Empty) (*D func (UnimplementedClusterServer) ReleaseDomain(context.Context, *emptypb.Empty) (*Domain, error) { return nil, status.Errorf(codes.Unimplemented, "method ReleaseDomain not implemented") } -func (UnimplementedClusterServer) UpdateDomainRecords(context.Context, *UpdateDomainRecordsRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateDomainRecords not implemented") +func (UnimplementedClusterServer) CreateDomainRecords(context.Context, *CreateDomainRecordsRequest) (*CreateDomainRecordsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDomainRecords not implemented") } func (UnimplementedClusterServer) mustEmbedUnimplementedClusterServer() {} func (UnimplementedClusterServer) testEmbeddedByValue() {} @@ -257,20 +257,20 @@ func _Cluster_ReleaseDomain_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -func _Cluster_UpdateDomainRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateDomainRecordsRequest) +func _Cluster_CreateDomainRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDomainRecordsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ClusterServer).UpdateDomainRecords(ctx, in) + return srv.(ClusterServer).CreateDomainRecords(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: Cluster_UpdateDomainRecords_FullMethodName, + FullMethod: Cluster_CreateDomainRecords_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterServer).UpdateDomainRecords(ctx, req.(*UpdateDomainRecordsRequest)) + return srv.(ClusterServer).CreateDomainRecords(ctx, req.(*CreateDomainRecordsRequest)) } return interceptor(ctx, in, info, handler) } @@ -303,8 +303,8 @@ var Cluster_ServiceDesc = grpc.ServiceDesc{ Handler: _Cluster_ReleaseDomain_Handler, }, { - MethodName: "UpdateDomainRecords", - Handler: _Cluster_UpdateDomainRecords_Handler, + MethodName: "CreateDomainRecords", + Handler: _Cluster_CreateDomainRecords_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/internal/machine/cluster/dns.go b/internal/machine/cluster/dns.go index b43070bb..659ced7a 100644 --- a/internal/machine/cluster/dns.go +++ b/internal/machine/cluster/dns.go @@ -16,7 +16,9 @@ import ( const uncloudDNSKey = "uncloud_dns" type uncloudDNSDomain struct { - Name string + // Endpoint is the API endpoint of the Uncloud DNS service where the domain is reserved. + Endpoint string + Name string // TODO: encrypt the token in the store. Token string } @@ -26,7 +28,7 @@ func (c *Cluster) ReserveDomain(ctx context.Context, req *pb.ReserveDomainReques return nil, err } - if req.ApiEndpoint == "" { + if req.Endpoint == "" { return nil, status.Error(codes.InvalidArgument, "API endpoint not set") } @@ -39,14 +41,15 @@ func (c *Cluster) ReserveDomain(ctx context.Context, req *pb.ReserveDomainReques } dnsClient := dns.NewClient() - name, token, err := dnsClient.ReserveDomain(req.ApiEndpoint) + name, token, err := dnsClient.ReserveDomain(req.Endpoint) if err != nil { return nil, status.Errorf(codes.Internal, err.Error()) } domain := uncloudDNSDomain{ - Name: name, - Token: token, + Endpoint: req.Endpoint, + Name: name, + Token: token, } domainJSON, err := json.Marshal(domain) if err != nil { @@ -107,3 +110,50 @@ func (c *Cluster) ReleaseDomain(ctx context.Context, _ *emptypb.Empty) (*pb.Doma return &pb.Domain{Name: domain.Name}, nil } + +func (c *Cluster) CreateDomainRecords( + ctx context.Context, req *pb.CreateDomainRecordsRequest, +) (*pb.CreateDomainRecordsResponse, error) { + if err := c.checkInitialised(ctx); err != nil { + return nil, err + } + + domain, err := c.storedDomain(ctx) + if err != nil { + return nil, err + } + + dnsClient := dns.NewClient() + recordsReq := make([]dns.RecordRequest, len(req.Records)) + for i, r := range req.Records { + recordsReq[i] = dns.RecordRequest{ + Name: r.Name, + Type: dns.RecordType(r.Type.String()), + Values: r.Values, + } + } + + recordsResp, err := dnsClient.CreateRecords(domain.Endpoint, domain.Name, domain.Token, recordsReq) + if err != nil { + return nil, err + } + + resp := &pb.CreateDomainRecordsResponse{ + Records: make([]*pb.DNSRecord, len(recordsResp)), + } + for i, r := range recordsResp { + resp.Records[i] = &pb.DNSRecord{ + Name: r.FQDN, + Values: r.Values, + } + + switch r.Type { + case dns.RecordTypeA: + resp.Records[i].Type = pb.DNSRecord_A + case dns.RecordTypeAAAA: + resp.Records[i].Type = pb.DNSRecord_AAAA + } + } + + return resp, nil +}