diff --git a/api/grpc/mpi/v1/files.pb.go b/api/grpc/mpi/v1/files.pb.go
index bb5b50e0d..9ebb60f91 100644
--- a/api/grpc/mpi/v1/files.pb.go
+++ b/api/grpc/mpi/v1/files.pb.go
@@ -137,67 +137,6 @@ func (SignatureAlgorithm) EnumDescriptor() ([]byte, []int) {
return file_mpi_v1_files_proto_rawDescGZIP(), []int{0}
}
-// Action enumeration
-type File_FileAction int32
-
-const (
- // Default value, no action
- File_FILE_ACTION_UNSPECIFIED File_FileAction = 0
- // No changes to the file
- File_FILE_ACTION_UNCHANGED File_FileAction = 1
- // New file
- File_FILE_ACTION_ADD File_FileAction = 2
- // Updated file
- File_FILE_ACTION_UPDATE File_FileAction = 3
- // File deleted
- File_FILE_ACTION_DELETE File_FileAction = 4
-)
-
-// Enum value maps for File_FileAction.
-var (
- File_FileAction_name = map[int32]string{
- 0: "FILE_ACTION_UNSPECIFIED",
- 1: "FILE_ACTION_UNCHANGED",
- 2: "FILE_ACTION_ADD",
- 3: "FILE_ACTION_UPDATE",
- 4: "FILE_ACTION_DELETE",
- }
- File_FileAction_value = map[string]int32{
- "FILE_ACTION_UNSPECIFIED": 0,
- "FILE_ACTION_UNCHANGED": 1,
- "FILE_ACTION_ADD": 2,
- "FILE_ACTION_UPDATE": 3,
- "FILE_ACTION_DELETE": 4,
- }
-)
-
-func (x File_FileAction) Enum() *File_FileAction {
- p := new(File_FileAction)
- *p = x
- return p
-}
-
-func (x File_FileAction) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (File_FileAction) Descriptor() protoreflect.EnumDescriptor {
- return file_mpi_v1_files_proto_enumTypes[1].Descriptor()
-}
-
-func (File_FileAction) Type() protoreflect.EnumType {
- return &file_mpi_v1_files_proto_enumTypes[1]
-}
-
-func (x File_FileAction) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use File_FileAction.Descriptor instead.
-func (File_FileAction) EnumDescriptor() ([]byte, []int) {
- return file_mpi_v1_files_proto_rawDescGZIP(), []int{9, 0}
-}
-
// Represents a data chunk for streaming file transfer.
// For any Stream file transfer, following assumptions should be asserted (by implementation):
// - invalid to contain more or less than one FileDataChunkHeaders
@@ -739,10 +678,8 @@ type File struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Meta information about the file, the name (including path) and hash
FileMeta *FileMeta `protobuf:"bytes,1,opt,name=file_meta,json=fileMeta,proto3" json:"file_meta,omitempty"`
- // Optional action
- Action *File_FileAction `protobuf:"varint,2,opt,name=action,proto3,enum=mpi.v1.File_FileAction,oneof" json:"action,omitempty"`
// Unmanaged files will not be modified
- Unmanaged bool `protobuf:"varint,3,opt,name=unmanaged,proto3" json:"unmanaged,omitempty"`
+ Unmanaged bool `protobuf:"varint,2,opt,name=unmanaged,proto3" json:"unmanaged,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -784,13 +721,6 @@ func (x *File) GetFileMeta() *FileMeta {
return nil
}
-func (x *File) GetAction() File_FileAction {
- if x != nil && x.Action != nil {
- return *x.Action
- }
- return File_FILE_ACTION_UNSPECIFIED
-}
-
func (x *File) GetUnmanaged() bool {
if x != nil {
return x.Unmanaged
@@ -1608,19 +1538,10 @@ const file_mpi_v1_files_proto_rawDesc = "" +
"\aversion\x18\x02 \x01(\tR\aversion\"p\n" +
"\fFileOverview\x12\"\n" +
"\x05files\x18\x01 \x03(\v2\f.mpi.v1.FileR\x05files\x12<\n" +
- "\x0econfig_version\x18\x02 \x01(\v2\x15.mpi.v1.ConfigVersionR\rconfigVersion\"\xa0\x02\n" +
+ "\x0econfig_version\x18\x02 \x01(\v2\x15.mpi.v1.ConfigVersionR\rconfigVersion\"S\n" +
"\x04File\x12-\n" +
- "\tfile_meta\x18\x01 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\x124\n" +
- "\x06action\x18\x02 \x01(\x0e2\x17.mpi.v1.File.FileActionH\x00R\x06action\x88\x01\x01\x12\x1c\n" +
- "\tunmanaged\x18\x03 \x01(\bR\tunmanaged\"\x89\x01\n" +
- "\n" +
- "FileAction\x12\x1b\n" +
- "\x17FILE_ACTION_UNSPECIFIED\x10\x00\x12\x19\n" +
- "\x15FILE_ACTION_UNCHANGED\x10\x01\x12\x13\n" +
- "\x0fFILE_ACTION_ADD\x10\x02\x12\x16\n" +
- "\x12FILE_ACTION_UPDATE\x10\x03\x12\x16\n" +
- "\x12FILE_ACTION_DELETE\x10\x04B\t\n" +
- "\a_action\"w\n" +
+ "\tfile_meta\x18\x01 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\x12\x1c\n" +
+ "\tunmanaged\x18\x02 \x01(\bR\tunmanaged\"w\n" +
"\x0eGetFileRequest\x126\n" +
"\fmessage_meta\x18\x01 \x01(\v2\x13.mpi.v1.MessageMetaR\vmessageMeta\x12-\n" +
"\tfile_meta\x18\x02 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\"C\n" +
@@ -1716,83 +1637,81 @@ func file_mpi_v1_files_proto_rawDescGZIP() []byte {
return file_mpi_v1_files_proto_rawDescData
}
-var file_mpi_v1_files_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_mpi_v1_files_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_mpi_v1_files_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
var file_mpi_v1_files_proto_goTypes = []any{
(SignatureAlgorithm)(0), // 0: mpi.v1.SignatureAlgorithm
- (File_FileAction)(0), // 1: mpi.v1.File.FileAction
- (*FileDataChunk)(nil), // 2: mpi.v1.FileDataChunk
- (*FileDataChunkHeader)(nil), // 3: mpi.v1.FileDataChunkHeader
- (*FileDataChunkContent)(nil), // 4: mpi.v1.FileDataChunkContent
- (*GetOverviewRequest)(nil), // 5: mpi.v1.GetOverviewRequest
- (*GetOverviewResponse)(nil), // 6: mpi.v1.GetOverviewResponse
- (*UpdateOverviewRequest)(nil), // 7: mpi.v1.UpdateOverviewRequest
- (*UpdateOverviewResponse)(nil), // 8: mpi.v1.UpdateOverviewResponse
- (*ConfigVersion)(nil), // 9: mpi.v1.ConfigVersion
- (*FileOverview)(nil), // 10: mpi.v1.FileOverview
- (*File)(nil), // 11: mpi.v1.File
- (*GetFileRequest)(nil), // 12: mpi.v1.GetFileRequest
- (*GetFileResponse)(nil), // 13: mpi.v1.GetFileResponse
- (*FileContents)(nil), // 14: mpi.v1.FileContents
- (*FileMeta)(nil), // 15: mpi.v1.FileMeta
- (*UpdateFileRequest)(nil), // 16: mpi.v1.UpdateFileRequest
- (*UpdateFileResponse)(nil), // 17: mpi.v1.UpdateFileResponse
- (*CertificateMeta)(nil), // 18: mpi.v1.CertificateMeta
- (*CertificateDates)(nil), // 19: mpi.v1.CertificateDates
- (*SubjectAlternativeNames)(nil), // 20: mpi.v1.SubjectAlternativeNames
- (*X509Name)(nil), // 21: mpi.v1.X509Name
- (*AttributeTypeAndValue)(nil), // 22: mpi.v1.AttributeTypeAndValue
- (*MessageMeta)(nil), // 23: mpi.v1.MessageMeta
- (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp
+ (*FileDataChunk)(nil), // 1: mpi.v1.FileDataChunk
+ (*FileDataChunkHeader)(nil), // 2: mpi.v1.FileDataChunkHeader
+ (*FileDataChunkContent)(nil), // 3: mpi.v1.FileDataChunkContent
+ (*GetOverviewRequest)(nil), // 4: mpi.v1.GetOverviewRequest
+ (*GetOverviewResponse)(nil), // 5: mpi.v1.GetOverviewResponse
+ (*UpdateOverviewRequest)(nil), // 6: mpi.v1.UpdateOverviewRequest
+ (*UpdateOverviewResponse)(nil), // 7: mpi.v1.UpdateOverviewResponse
+ (*ConfigVersion)(nil), // 8: mpi.v1.ConfigVersion
+ (*FileOverview)(nil), // 9: mpi.v1.FileOverview
+ (*File)(nil), // 10: mpi.v1.File
+ (*GetFileRequest)(nil), // 11: mpi.v1.GetFileRequest
+ (*GetFileResponse)(nil), // 12: mpi.v1.GetFileResponse
+ (*FileContents)(nil), // 13: mpi.v1.FileContents
+ (*FileMeta)(nil), // 14: mpi.v1.FileMeta
+ (*UpdateFileRequest)(nil), // 15: mpi.v1.UpdateFileRequest
+ (*UpdateFileResponse)(nil), // 16: mpi.v1.UpdateFileResponse
+ (*CertificateMeta)(nil), // 17: mpi.v1.CertificateMeta
+ (*CertificateDates)(nil), // 18: mpi.v1.CertificateDates
+ (*SubjectAlternativeNames)(nil), // 19: mpi.v1.SubjectAlternativeNames
+ (*X509Name)(nil), // 20: mpi.v1.X509Name
+ (*AttributeTypeAndValue)(nil), // 21: mpi.v1.AttributeTypeAndValue
+ (*MessageMeta)(nil), // 22: mpi.v1.MessageMeta
+ (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp
}
var file_mpi_v1_files_proto_depIdxs = []int32{
- 23, // 0: mpi.v1.FileDataChunk.meta:type_name -> mpi.v1.MessageMeta
- 3, // 1: mpi.v1.FileDataChunk.header:type_name -> mpi.v1.FileDataChunkHeader
- 4, // 2: mpi.v1.FileDataChunk.content:type_name -> mpi.v1.FileDataChunkContent
- 15, // 3: mpi.v1.FileDataChunkHeader.file_meta:type_name -> mpi.v1.FileMeta
- 23, // 4: mpi.v1.GetOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta
- 9, // 5: mpi.v1.GetOverviewRequest.config_version:type_name -> mpi.v1.ConfigVersion
- 10, // 6: mpi.v1.GetOverviewResponse.overview:type_name -> mpi.v1.FileOverview
- 23, // 7: mpi.v1.UpdateOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta
- 10, // 8: mpi.v1.UpdateOverviewRequest.overview:type_name -> mpi.v1.FileOverview
- 10, // 9: mpi.v1.UpdateOverviewResponse.overview:type_name -> mpi.v1.FileOverview
- 11, // 10: mpi.v1.FileOverview.files:type_name -> mpi.v1.File
- 9, // 11: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion
- 15, // 12: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta
- 1, // 13: mpi.v1.File.action:type_name -> mpi.v1.File.FileAction
- 23, // 14: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta
- 15, // 15: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta
- 14, // 16: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents
- 24, // 17: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp
- 18, // 18: mpi.v1.FileMeta.certificate_meta:type_name -> mpi.v1.CertificateMeta
- 11, // 19: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File
- 14, // 20: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents
- 23, // 21: mpi.v1.UpdateFileRequest.message_meta:type_name -> mpi.v1.MessageMeta
- 15, // 22: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta
- 21, // 23: mpi.v1.CertificateMeta.issuer:type_name -> mpi.v1.X509Name
- 21, // 24: mpi.v1.CertificateMeta.subject:type_name -> mpi.v1.X509Name
- 20, // 25: mpi.v1.CertificateMeta.sans:type_name -> mpi.v1.SubjectAlternativeNames
- 19, // 26: mpi.v1.CertificateMeta.dates:type_name -> mpi.v1.CertificateDates
- 0, // 27: mpi.v1.CertificateMeta.signature_algorithm:type_name -> mpi.v1.SignatureAlgorithm
- 22, // 28: mpi.v1.X509Name.names:type_name -> mpi.v1.AttributeTypeAndValue
- 22, // 29: mpi.v1.X509Name.extra_names:type_name -> mpi.v1.AttributeTypeAndValue
- 5, // 30: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest
- 7, // 31: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest
- 12, // 32: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest
- 16, // 33: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest
- 12, // 34: mpi.v1.FileService.GetFileStream:input_type -> mpi.v1.GetFileRequest
- 2, // 35: mpi.v1.FileService.UpdateFileStream:input_type -> mpi.v1.FileDataChunk
- 6, // 36: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse
- 8, // 37: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse
- 13, // 38: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse
- 17, // 39: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse
- 2, // 40: mpi.v1.FileService.GetFileStream:output_type -> mpi.v1.FileDataChunk
- 17, // 41: mpi.v1.FileService.UpdateFileStream:output_type -> mpi.v1.UpdateFileResponse
- 36, // [36:42] is the sub-list for method output_type
- 30, // [30:36] is the sub-list for method input_type
- 30, // [30:30] is the sub-list for extension type_name
- 30, // [30:30] is the sub-list for extension extendee
- 0, // [0:30] is the sub-list for field type_name
+ 22, // 0: mpi.v1.FileDataChunk.meta:type_name -> mpi.v1.MessageMeta
+ 2, // 1: mpi.v1.FileDataChunk.header:type_name -> mpi.v1.FileDataChunkHeader
+ 3, // 2: mpi.v1.FileDataChunk.content:type_name -> mpi.v1.FileDataChunkContent
+ 14, // 3: mpi.v1.FileDataChunkHeader.file_meta:type_name -> mpi.v1.FileMeta
+ 22, // 4: mpi.v1.GetOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta
+ 8, // 5: mpi.v1.GetOverviewRequest.config_version:type_name -> mpi.v1.ConfigVersion
+ 9, // 6: mpi.v1.GetOverviewResponse.overview:type_name -> mpi.v1.FileOverview
+ 22, // 7: mpi.v1.UpdateOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta
+ 9, // 8: mpi.v1.UpdateOverviewRequest.overview:type_name -> mpi.v1.FileOverview
+ 9, // 9: mpi.v1.UpdateOverviewResponse.overview:type_name -> mpi.v1.FileOverview
+ 10, // 10: mpi.v1.FileOverview.files:type_name -> mpi.v1.File
+ 8, // 11: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion
+ 14, // 12: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta
+ 22, // 13: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta
+ 14, // 14: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta
+ 13, // 15: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents
+ 23, // 16: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp
+ 17, // 17: mpi.v1.FileMeta.certificate_meta:type_name -> mpi.v1.CertificateMeta
+ 10, // 18: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File
+ 13, // 19: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents
+ 22, // 20: mpi.v1.UpdateFileRequest.message_meta:type_name -> mpi.v1.MessageMeta
+ 14, // 21: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta
+ 20, // 22: mpi.v1.CertificateMeta.issuer:type_name -> mpi.v1.X509Name
+ 20, // 23: mpi.v1.CertificateMeta.subject:type_name -> mpi.v1.X509Name
+ 19, // 24: mpi.v1.CertificateMeta.sans:type_name -> mpi.v1.SubjectAlternativeNames
+ 18, // 25: mpi.v1.CertificateMeta.dates:type_name -> mpi.v1.CertificateDates
+ 0, // 26: mpi.v1.CertificateMeta.signature_algorithm:type_name -> mpi.v1.SignatureAlgorithm
+ 21, // 27: mpi.v1.X509Name.names:type_name -> mpi.v1.AttributeTypeAndValue
+ 21, // 28: mpi.v1.X509Name.extra_names:type_name -> mpi.v1.AttributeTypeAndValue
+ 4, // 29: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest
+ 6, // 30: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest
+ 11, // 31: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest
+ 15, // 32: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest
+ 11, // 33: mpi.v1.FileService.GetFileStream:input_type -> mpi.v1.GetFileRequest
+ 1, // 34: mpi.v1.FileService.UpdateFileStream:input_type -> mpi.v1.FileDataChunk
+ 5, // 35: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse
+ 7, // 36: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse
+ 12, // 37: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse
+ 16, // 38: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse
+ 1, // 39: mpi.v1.FileService.GetFileStream:output_type -> mpi.v1.FileDataChunk
+ 16, // 40: mpi.v1.FileService.UpdateFileStream:output_type -> mpi.v1.UpdateFileResponse
+ 35, // [35:41] is the sub-list for method output_type
+ 29, // [29:35] is the sub-list for method input_type
+ 29, // [29:29] is the sub-list for extension type_name
+ 29, // [29:29] is the sub-list for extension extendee
+ 0, // [0:29] is the sub-list for field type_name
}
func init() { file_mpi_v1_files_proto_init() }
@@ -1805,7 +1724,6 @@ func file_mpi_v1_files_proto_init() {
(*FileDataChunk_Header)(nil),
(*FileDataChunk_Content)(nil),
}
- file_mpi_v1_files_proto_msgTypes[9].OneofWrappers = []any{}
file_mpi_v1_files_proto_msgTypes[13].OneofWrappers = []any{
(*FileMeta_CertificateMeta)(nil),
}
@@ -1814,7 +1732,7 @@ func file_mpi_v1_files_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_mpi_v1_files_proto_rawDesc), len(file_mpi_v1_files_proto_rawDesc)),
- NumEnums: 2,
+ NumEnums: 1,
NumMessages: 21,
NumExtensions: 0,
NumServices: 1,
diff --git a/api/grpc/mpi/v1/files.pb.validate.go b/api/grpc/mpi/v1/files.pb.validate.go
index 599c24fa2..dfcafca1a 100644
--- a/api/grpc/mpi/v1/files.pb.validate.go
+++ b/api/grpc/mpi/v1/files.pb.validate.go
@@ -1392,10 +1392,6 @@ func (m *File) validate(all bool) error {
// no validation rules for Unmanaged
- if m.Action != nil {
- // no validation rules for Action
- }
-
if len(errors) > 0 {
return FileMultiError(errors)
}
diff --git a/api/grpc/mpi/v1/files.proto b/api/grpc/mpi/v1/files.proto
index a5e446144..0be5bcd69 100644
--- a/api/grpc/mpi/v1/files.proto
+++ b/api/grpc/mpi/v1/files.proto
@@ -126,23 +126,8 @@ message FileOverview {
message File {
// Meta information about the file, the name (including path) and hash
FileMeta file_meta = 1;
- // Action enumeration
- enum FileAction {
- // Default value, no action
- FILE_ACTION_UNSPECIFIED = 0;
- // No changes to the file
- FILE_ACTION_UNCHANGED = 1;
- // New file
- FILE_ACTION_ADD = 2;
- // Updated file
- FILE_ACTION_UPDATE = 3;
- // File deleted
- FILE_ACTION_DELETE = 4;
- }
- // Optional action
- optional FileAction action = 2;
// Unmanaged files will not be modified
- bool unmanaged = 3;
+ bool unmanaged = 2;
}
// Represents the get file request
diff --git a/docs/proto/protos.md b/docs/proto/protos.md
index 2d1bdf623..6f05d530a 100644
--- a/docs/proto/protos.md
+++ b/docs/proto/protos.md
@@ -36,7 +36,6 @@
- [UpdateOverviewResponse](#mpi-v1-UpdateOverviewResponse)
- [X509Name](#mpi-v1-X509Name)
- - [File.FileAction](#mpi-v1-File-FileAction)
- [SignatureAlgorithm](#mpi-v1-SignatureAlgorithm)
- [FileService](#mpi-v1-FileService)
@@ -304,7 +303,6 @@ Represents meta data about a file
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| file_meta | [FileMeta](#mpi-v1-FileMeta) | | Meta information about the file, the name (including path) and hash |
-| action | [File.FileAction](#mpi-v1-File-FileAction) | optional | Optional action |
| unmanaged | [bool](#bool) | | Unmanaged files will not be modified |
@@ -591,21 +589,6 @@ Represents the dates for which a certificate is valid as seen at https://pkg.go.
-
-
-### File.FileAction
-Action enumeration
-
-| Name | Number | Description |
-| ---- | ------ | ----------- |
-| FILE_ACTION_UNSPECIFIED | 0 | Default value, no action |
-| FILE_ACTION_UNCHANGED | 1 | No changes to the file |
-| FILE_ACTION_ADD | 2 | New file |
-| FILE_ACTION_UPDATE | 3 | Updated file |
-| FILE_ACTION_DELETE | 4 | File deleted |
-
-
-
### SignatureAlgorithm
diff --git a/internal/file/file_manager_service.go b/internal/file/file_manager_service.go
index 2aaf02128..7774bad75 100644
--- a/internal/file/file_manager_service.go
+++ b/internal/file/file_manager_service.go
@@ -62,8 +62,8 @@ type (
UpdateFile(ctx context.Context, instanceID string, fileToUpdate *mpi.File) error
ClearCache()
UpdateCurrentFilesOnDisk(updateFiles map[string]*mpi.File)
- DetermineFileActions(currentFiles, modifiedFiles map[string]*mpi.File) (map[string]*mpi.File,
- map[string][]byte, error)
+ DetermineFileActions(currentFiles map[string]*mpi.File, modifiedFiles map[string]*model.FileCache) (
+ map[string]*model.FileCache, map[string][]byte, error)
IsConnected() bool
SetIsConnected(isConnected bool)
}
@@ -75,7 +75,7 @@ type FileManagerService struct {
isConnected *atomic.Bool
fileOperator fileOperator
// map of files and the actions performed on them during config apply
- fileActions map[string]*mpi.File // key is file path
+ fileActions map[string]*model.FileCache // key is file path
// map of the contents of files which have been updated or deleted during config apply, used during rollback
rollbackFileContents map[string][]byte // key is file path
// map of the files currently on disk, used to determine the file action during config apply
@@ -91,7 +91,7 @@ func NewFileManagerService(fileServiceClient mpi.FileServiceClient, agentConfig
fileServiceClient: fileServiceClient,
agentConfig: agentConfig,
fileOperator: NewFileOperator(),
- fileActions: make(map[string]*mpi.File),
+ fileActions: make(map[string]*model.FileCache),
rollbackFileContents: make(map[string][]byte),
currentFilesOnDisk: make(map[string]*mpi.File),
isConnected: isConnected,
@@ -306,7 +306,7 @@ func (fms *FileManagerService) ConfigApply(ctx context.Context,
}
diffFiles, fileContent, compareErr := fms.DetermineFileActions(fms.currentFilesOnDisk,
- files.ConvertToMapOfFiles(fileOverview.GetFiles()))
+ ConvertToMapOfFileCache(fileOverview.GetFiles()))
if compareErr != nil {
return model.Error, compareErr
@@ -345,30 +345,30 @@ func (fms *FileManagerService) Rollback(ctx context.Context, instanceID string)
areFilesUpdated := false
fms.filesMutex.Lock()
defer fms.filesMutex.Unlock()
- for _, file := range fms.fileActions {
- switch file.GetAction() {
- case mpi.File_FILE_ACTION_ADD:
- if err := os.Remove(file.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) {
- return fmt.Errorf("error deleting file: %s error: %w", file.GetFileMeta().GetName(), err)
+ for _, fileAction := range fms.fileActions {
+ switch fileAction.Action {
+ case model.Add:
+ if err := os.Remove(fileAction.File.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) {
+ return fmt.Errorf("error deleting file: %s error: %w", fileAction.File.GetFileMeta().GetName(), err)
}
// currentFilesOnDisk needs to be updated after rollback action is performed
- delete(fms.currentFilesOnDisk, file.GetFileMeta().GetName())
+ delete(fms.currentFilesOnDisk, fileAction.File.GetFileMeta().GetName())
areFilesUpdated = true
continue
- case mpi.File_FILE_ACTION_DELETE, mpi.File_FILE_ACTION_UPDATE:
- content := fms.rollbackFileContents[file.GetFileMeta().GetName()]
- err := fms.fileOperator.Write(ctx, content, file.GetFileMeta())
+ case model.Delete, model.Update:
+ content := fms.rollbackFileContents[fileAction.File.GetFileMeta().GetName()]
+ err := fms.fileOperator.Write(ctx, content, fileAction.File.GetFileMeta())
if err != nil {
return err
}
// currentFilesOnDisk needs to be updated after rollback action is performed
- file.GetFileMeta().Hash = files.GenerateHash(content)
- fms.currentFilesOnDisk[file.GetFileMeta().GetName()] = file
+ fileAction.File.GetFileMeta().Hash = files.GenerateHash(content)
+ fms.currentFilesOnDisk[fileAction.File.GetFileMeta().GetName()] = fileAction.File
areFilesUpdated = true
- case mpi.File_FILE_ACTION_UNSPECIFIED, mpi.File_FILE_ACTION_UNCHANGED:
+ case model.Unchanged:
fallthrough
default:
slog.DebugContext(ctx, "File Action not implemented")
@@ -386,23 +386,22 @@ func (fms *FileManagerService) Rollback(ctx context.Context, instanceID string)
}
func (fms *FileManagerService) executeFileActions(ctx context.Context) error {
- for _, file := range fms.fileActions {
- switch file.GetAction() {
- case mpi.File_FILE_ACTION_DELETE:
- if err := os.Remove(file.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) {
- return fmt.Errorf("error deleting file: %s error: %w", file.GetFileMeta().GetName(), err)
+ for _, fileAction := range fms.fileActions {
+ switch fileAction.Action {
+ case model.Delete:
+ if err := os.Remove(fileAction.File.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) {
+ return fmt.Errorf("error deleting file: %s error: %w",
+ fileAction.File.GetFileMeta().GetName(), err)
}
continue
- case mpi.File_FILE_ACTION_ADD, mpi.File_FILE_ACTION_UPDATE:
- updateErr := fms.fileUpdate(ctx, file)
+ case model.Add, model.Update:
+ updateErr := fms.fileUpdate(ctx, fileAction.File)
if updateErr != nil {
return updateErr
}
- case mpi.File_FILE_ACTION_UNSPECIFIED, mpi.File_FILE_ACTION_UNCHANGED:
- fallthrough
- default:
- slog.DebugContext(ctx, "File Action not implemented", "action", file.GetAction())
+ case model.Unchanged:
+ slog.DebugContext(ctx, "File unchanged")
}
}
@@ -450,7 +449,7 @@ func (fms *FileManagerService) validateFileHash(filePath string) error {
}
fileHash := files.GenerateHash(content)
- if fileHash != fms.fileActions[filePath].GetFileMeta().GetHash() {
+ if fileHash != fms.fileActions[filePath].File.GetFileMeta().GetHash() {
return fmt.Errorf("error writing file, file hash does not match for file %s", filePath)
}
@@ -471,19 +470,14 @@ func (fms *FileManagerService) checkAllowedDirectory(checkFiles []*mpi.File) err
// DetermineFileActions compares two sets of files to determine the file action for each file. Returns a map of files
// that have changed and a map of the contents for each updated and deleted file. Key to both maps is file path
// nolint: revive,cyclop
-func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles map[string]*mpi.File) (
- map[string]*mpi.File, map[string][]byte, error,
+func (fms *FileManagerService) DetermineFileActions(currentFiles map[string]*mpi.File,
+ modifiedFiles map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error,
) {
fms.filesMutex.Lock()
defer fms.filesMutex.Unlock()
- // Go doesn't allow address of numeric constant
- addAction := mpi.File_FILE_ACTION_ADD
- updateAction := mpi.File_FILE_ACTION_UPDATE
- deleteAction := mpi.File_FILE_ACTION_DELETE
- unchangedAction := mpi.File_FILE_ACTION_UNCHANGED
- fileDiff := make(map[string]*mpi.File) // Files that have changed, key is file name
- fileContents := make(map[string][]byte) // contents of the file, key is file name
+ fileDiff := make(map[string]*model.FileCache) // Files that have changed, key is file name
+ fileContents := make(map[string][]byte) // contents of the file, key is file name
manifestFiles, manifestFileErr := fms.manifestFile(currentFiles)
@@ -492,7 +486,7 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles
}
// if file is in manifestFiles but not in modified files, file has been deleted
// copy contents, set file action
- for fileName, currentFile := range manifestFiles {
+ for fileName, manifestFile := range manifestFiles {
_, exists := modifiedFiles[fileName]
if !exists {
@@ -502,36 +496,39 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles
return nil, nil, fmt.Errorf("error reading file %s, error: %w", fileName, readErr)
}
fileContents[fileName] = fileContent
- currentFile.Action = &deleteAction
- fileDiff[fileName] = currentFile
+
+ fileDiff[fileName] = &model.FileCache{
+ File: manifestFile,
+ Action: model.Delete,
+ }
}
}
- for _, file := range modifiedFiles {
- fileName := file.GetFileMeta().GetName()
- currentFile, ok := manifestFiles[file.GetFileMeta().GetName()]
+ for _, modifiedFile := range modifiedFiles {
+ fileName := modifiedFile.File.GetFileMeta().GetName()
+ currentFile, ok := manifestFiles[modifiedFile.File.GetFileMeta().GetName()]
// default to unchanged action
- file.Action = &unchangedAction
+ modifiedFile.Action = model.Unchanged
// if file is unmanaged, action is set to unchanged so file is skipped when performing actions
- if file.GetUnmanaged() {
+ if modifiedFile.File.GetUnmanaged() {
continue
}
// if file doesn't exist in the current files, file has been added
// set file action
if !ok {
- file.Action = &addAction
- fileDiff[file.GetFileMeta().GetName()] = file
+ modifiedFile.Action = model.Add
+ fileDiff[modifiedFile.File.GetFileMeta().GetName()] = modifiedFile
// if file currently exists and file hash is different, file has been updated
// copy contents, set file action
- } else if file.GetFileMeta().GetHash() != currentFile.GetFileMeta().GetHash() {
+ } else if modifiedFile.File.GetFileMeta().GetHash() != currentFile.GetFileMeta().GetHash() {
fileContent, readErr := os.ReadFile(fileName)
if readErr != nil {
return nil, nil, fmt.Errorf("error reading file %s, error: %w", fileName, readErr)
}
- file.Action = &updateAction
+ modifiedFile.Action = model.Update
fileContents[fileName] = fileContent
- fileDiff[file.GetFileMeta().GetName()] = file
+ fileDiff[modifiedFile.File.GetFileMeta().GetName()] = modifiedFile
}
}
@@ -546,8 +543,8 @@ func (fms *FileManagerService) UpdateCurrentFilesOnDisk(currentFiles map[string]
clear(fms.currentFilesOnDisk)
- for _, file := range currentFiles {
- fms.currentFilesOnDisk[file.GetFileMeta().GetName()] = file
+ for _, currentFile := range currentFiles {
+ fms.currentFilesOnDisk[currentFile.GetFileMeta().GetName()] = currentFile
}
}
@@ -605,11 +602,11 @@ func (fms *FileManagerService) convertToManifestFileMap(
) map[string]*model.ManifestFile {
manifestFileMap := make(map[string]*model.ManifestFile)
- for name, file := range currentFiles {
- if file == nil || file.GetFileMeta() == nil {
+ for name, currentFile := range currentFiles {
+ if currentFile == nil || currentFile.GetFileMeta() == nil {
continue
}
- manifestFile := fms.convertToManifestFile(file)
+ manifestFile := fms.convertToManifestFile(currentFile)
manifestFileMap[name] = manifestFile
}
@@ -645,3 +642,15 @@ func (fms *FileManagerService) convertToFile(manifestFile *model.ManifestFile) *
},
}
}
+
+// ConvertToMapOfFiles converts a list of files to a map of file caches (file and action) with the file name as the key
+func ConvertToMapOfFileCache(convertFiles []*mpi.File) map[string]*model.FileCache {
+ filesMap := make(map[string]*model.FileCache)
+ for _, convertFile := range convertFiles {
+ filesMap[convertFile.GetFileMeta().GetName()] = &model.FileCache{
+ File: convertFile,
+ }
+ }
+
+ return filesMap
+}
diff --git a/internal/file/file_manager_service_test.go b/internal/file/file_manager_service_test.go
index 95e138c2a..bbcfedbab 100644
--- a/internal/file/file_manager_service_test.go
+++ b/internal/file/file_manager_service_test.go
@@ -177,7 +177,7 @@ func TestFileManagerService_ConfigApply_Add(t *testing.T) {
data, readErr := os.ReadFile(filePath)
require.NoError(t, readErr)
assert.Equal(t, fileContent, data)
- assert.Equal(t, fileManagerService.fileActions[filePath], overview.GetFiles()[0])
+ assert.Equal(t, fileManagerService.fileActions[filePath].File, overview.GetFiles()[0])
}
func TestFileManagerService_ConfigApply_Update(t *testing.T) {
@@ -234,7 +234,7 @@ func TestFileManagerService_ConfigApply_Update(t *testing.T) {
require.NoError(t, readErr)
assert.Equal(t, fileContent, data)
assert.Equal(t, fileManagerService.rollbackFileContents[tempFile.Name()], previousFileContent)
- assert.Equal(t, fileManagerService.fileActions[tempFile.Name()], overview.GetFiles()[0])
+ assert.Equal(t, fileManagerService.fileActions[tempFile.Name()].File, overview.GetFiles()[0])
}
func TestFileManagerService_ConfigApply_Delete(t *testing.T) {
@@ -286,7 +286,7 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) {
require.NoError(t, err)
assert.NoFileExists(t, tempFile.Name())
assert.Equal(t, fileManagerService.rollbackFileContents[tempFile.Name()], fileContent)
- assert.Equal(t, fileManagerService.fileActions[tempFile.Name()], filesOnDisk[tempFile.Name()])
+ assert.Equal(t, fileManagerService.fileActions[tempFile.Name()].File, filesOnDisk[tempFile.Name()])
assert.Equal(t, model.OK, writeStatus)
}
@@ -303,7 +303,6 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) {
Permissions: "",
Size: 0,
},
- Action: nil,
},
}
@@ -316,7 +315,6 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) {
Permissions: "",
Size: 0,
},
- Action: nil,
},
}
@@ -330,14 +328,16 @@ func TestFileManagerService_ClearCache(t *testing.T) {
fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
- filesCache := map[string]*mpi.File{
+ filesCache := map[string]*model.FileCache{
"file/path/test.conf": {
- FileMeta: &mpi.FileMeta{
- Name: "file/path/test.conf",
- Hash: "",
- ModifiedTime: nil,
- Permissions: "",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: "file/path/test.conf",
+ Hash: "",
+ ModifiedTime: nil,
+ Permissions: "",
+ Size: 0,
+ },
},
},
}
@@ -361,11 +361,6 @@ func TestFileManagerService_Rollback(t *testing.T) {
ctx := context.Background()
tempDir := t.TempDir()
- addAction := mpi.File_FILE_ACTION_ADD
- deleteAction := mpi.File_FILE_ACTION_DELETE
- updateAction := mpi.File_FILE_ACTION_UPDATE
- unspecifiedAction := mpi.File_FILE_ACTION_UNSPECIFIED
-
deleteFilePath := filepath.Join(tempDir, "nginx_delete.conf")
newFileContent := []byte("location /test {\n return 200 \"This config needs to be rolled back\\n\";\n}")
@@ -384,49 +379,59 @@ func TestFileManagerService_Rollback(t *testing.T) {
manifestFilePath = manifestDirPath + "/manifest.json"
helpers.CreateFileWithErrorCheck(t, manifestDirPath, "manifest.json")
- filesCache := map[string]*mpi.File{
+ filesCache := map[string]*model.FileCache{
addFile.Name(): {
- FileMeta: &mpi.FileMeta{
- Name: addFile.Name(),
- Hash: fileHash,
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: addFile.Name(),
+ Hash: fileHash,
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
+ Unmanaged: false,
},
- Action: &addAction,
+ Action: model.Add,
},
updateFile.Name(): {
- FileMeta: &mpi.FileMeta{
- Name: updateFile.Name(),
- Hash: fileHash,
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: updateFile.Name(),
+ Hash: fileHash,
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
+ Unmanaged: false,
},
- Action: &updateAction,
+ Action: model.Update,
},
deleteFilePath: {
- FileMeta: &mpi.FileMeta{
- Name: deleteFilePath,
- Hash: "",
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: deleteFilePath,
+ Hash: "",
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
+ Unmanaged: false,
},
- Action: &deleteAction,
+ Action: model.Delete,
},
"unspecified/file/test.conf": {
- FileMeta: &mpi.FileMeta{
- Name: "unspecified/file/test.conf",
- Hash: "",
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: "unspecified/file/test.conf",
+ Hash: "",
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
+ Unmanaged: false,
},
- Action: &unspecifiedAction,
},
}
-
fileContentCache := map[string][]byte{
deleteFilePath: oldFileContent,
updateFile.Name(): oldFileContent,
@@ -456,11 +461,6 @@ func TestFileManagerService_Rollback(t *testing.T) {
}
func TestFileManagerService_DetermineFileActions(t *testing.T) {
- // Go doesn't allow address of numeric constant
- addAction := mpi.File_FILE_ACTION_ADD
- updateAction := mpi.File_FILE_ACTION_UPDATE
- deleteAction := mpi.File_FILE_ACTION_DELETE
-
tempDir := os.TempDir()
deleteTestFile := helpers.CreateFileWithErrorCheck(t, tempDir, "nginx_delete.conf")
@@ -490,24 +490,32 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
tests := []struct {
expectedError error
- modifiedFiles map[string]*mpi.File
+ modifiedFiles map[string]*model.FileCache
currentFiles map[string]*mpi.File
- expectedCache map[string]*mpi.File
+ expectedCache map[string]*model.FileCache
expectedContent map[string][]byte
name string
}{
{
name: "Test 1: Add, Update & Delete Files",
- modifiedFiles: map[string]*mpi.File{
+ modifiedFiles: map[string]*model.FileCache{
addTestFileName: {
- FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
+ Unmanaged: false,
+ },
},
updateTestFile.Name(): {
- FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)),
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)),
+ Unmanaged: false,
+ },
},
unmanagedFile.Name(): {
- FileMeta: protos.FileMeta(unmanagedFile.Name(), files.GenerateHash(unmanagedFileContent)),
- Unmanaged: true,
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(unmanagedFile.Name(), files.GenerateHash(unmanagedFileContent)),
+ Unmanaged: true,
+ },
},
},
currentFiles: map[string]*mpi.File{
@@ -522,18 +530,27 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
Unmanaged: true,
},
},
- expectedCache: map[string]*mpi.File{
+ expectedCache: map[string]*model.FileCache{
deleteTestFile.Name(): {
- FileMeta: protos.ManifestFileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)),
- Action: &deleteAction,
+ File: &mpi.File{
+ FileMeta: protos.ManifestFileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)),
+ Unmanaged: false,
+ },
+ Action: model.Delete,
},
updateTestFile.Name(): {
- FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)),
- Action: &updateAction,
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)),
+ Unmanaged: false,
+ },
+ Action: model.Update,
},
addTestFileName: {
- FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
- Action: &addAction,
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
+ Unmanaged: false,
+ },
+ Action: model.Add,
},
},
expectedContent: map[string][]byte{
@@ -544,15 +561,21 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
},
{
name: "Test 2: Files same as on disk",
- modifiedFiles: map[string]*mpi.File{
+ modifiedFiles: map[string]*model.FileCache{
addTestFileName: {
- FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
+ },
},
updateTestFile.Name(): {
- FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(fileContent)),
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(fileContent)),
+ },
},
deleteTestFile.Name(): {
- FileMeta: protos.FileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)),
+ File: &mpi.File{
+ FileMeta: protos.FileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)),
+ },
},
},
currentFiles: map[string]*mpi.File{
@@ -566,7 +589,7 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)),
},
},
- expectedCache: make(map[string]*mpi.File),
+ expectedCache: make(map[string]*model.FileCache),
expectedContent: make(map[string][]byte),
expectedError: nil,
},
@@ -591,11 +614,6 @@ func TestFileManagerService_fileActions(t *testing.T) {
ctx := context.Background()
tempDir := t.TempDir()
- addAction := mpi.File_FILE_ACTION_ADD
- deleteAction := mpi.File_FILE_ACTION_DELETE
- updateAction := mpi.File_FILE_ACTION_UPDATE
- unspecifiedAction := mpi.File_FILE_ACTION_UNSPECIFIED
-
addFilePath := filepath.Join(tempDir, "nginx_add.conf")
unspecifiedFilePath := "unspecified/file/test.conf"
@@ -611,46 +629,53 @@ func TestFileManagerService_fileActions(t *testing.T) {
_, writeErr = updateFile.Write(oldFileContent)
require.NoError(t, writeErr)
- filesCache := map[string]*mpi.File{
+ filesCache := map[string]*model.FileCache{
addFilePath: {
- FileMeta: &mpi.FileMeta{
- Name: addFilePath,
- Hash: fileHash,
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: addFilePath,
+ Hash: fileHash,
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
},
- Action: &addAction,
+ Action: model.Add,
},
updateFile.Name(): {
- FileMeta: &mpi.FileMeta{
- Name: updateFile.Name(),
- Hash: fileHash,
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: updateFile.Name(),
+ Hash: fileHash,
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
},
- Action: &updateAction,
+ Action: model.Update,
},
deleteFile.Name(): {
- FileMeta: &mpi.FileMeta{
- Name: deleteFile.Name(),
- Hash: "",
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: deleteFile.Name(),
+ Hash: "",
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
},
- Action: &deleteAction,
+ Action: model.Delete,
},
unspecifiedFilePath: {
- FileMeta: &mpi.FileMeta{
- Name: unspecifiedFilePath,
- Hash: "",
- ModifiedTime: timestamppb.Now(),
- Permissions: "0777",
- Size: 0,
+ File: &mpi.File{
+ FileMeta: &mpi.FileMeta{
+ Name: unspecifiedFilePath,
+ Hash: "",
+ ModifiedTime: timestamppb.Now(),
+ Permissions: "0777",
+ Size: 0,
+ },
},
- Action: &unspecifiedAction,
},
}
diff --git a/internal/file/filefakes/fake_file_manager_service_interface.go b/internal/file/filefakes/fake_file_manager_service_interface.go
index 588318877..ec9ae7a3d 100644
--- a/internal/file/filefakes/fake_file_manager_service_interface.go
+++ b/internal/file/filefakes/fake_file_manager_service_interface.go
@@ -28,19 +28,19 @@ type FakeFileManagerServiceInterface struct {
result1 model.WriteStatus
result2 error
}
- DetermineFileActionsStub func(map[string]*v1.File, map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error)
+ DetermineFileActionsStub func(map[string]*v1.File, map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error)
determineFileActionsMutex sync.RWMutex
determineFileActionsArgsForCall []struct {
arg1 map[string]*v1.File
- arg2 map[string]*v1.File
+ arg2 map[string]*model.FileCache
}
determineFileActionsReturns struct {
- result1 map[string]*v1.File
+ result1 map[string]*model.FileCache
result2 map[string][]byte
result3 error
}
determineFileActionsReturnsOnCall map[int]struct {
- result1 map[string]*v1.File
+ result1 map[string]*model.FileCache
result2 map[string][]byte
result3 error
}
@@ -196,12 +196,12 @@ func (fake *FakeFileManagerServiceInterface) ConfigApplyReturnsOnCall(i int, res
}{result1, result2}
}
-func (fake *FakeFileManagerServiceInterface) DetermineFileActions(arg1 map[string]*v1.File, arg2 map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error) {
+func (fake *FakeFileManagerServiceInterface) DetermineFileActions(arg1 map[string]*v1.File, arg2 map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error) {
fake.determineFileActionsMutex.Lock()
ret, specificReturn := fake.determineFileActionsReturnsOnCall[len(fake.determineFileActionsArgsForCall)]
fake.determineFileActionsArgsForCall = append(fake.determineFileActionsArgsForCall, struct {
arg1 map[string]*v1.File
- arg2 map[string]*v1.File
+ arg2 map[string]*model.FileCache
}{arg1, arg2})
stub := fake.DetermineFileActionsStub
fakeReturns := fake.determineFileActionsReturns
@@ -222,43 +222,43 @@ func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCallCount() int
return len(fake.determineFileActionsArgsForCall)
}
-func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCalls(stub func(map[string]*v1.File, map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error)) {
+func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCalls(stub func(map[string]*v1.File, map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error)) {
fake.determineFileActionsMutex.Lock()
defer fake.determineFileActionsMutex.Unlock()
fake.DetermineFileActionsStub = stub
}
-func (fake *FakeFileManagerServiceInterface) DetermineFileActionsArgsForCall(i int) (map[string]*v1.File, map[string]*v1.File) {
+func (fake *FakeFileManagerServiceInterface) DetermineFileActionsArgsForCall(i int) (map[string]*v1.File, map[string]*model.FileCache) {
fake.determineFileActionsMutex.RLock()
defer fake.determineFileActionsMutex.RUnlock()
argsForCall := fake.determineFileActionsArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2
}
-func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturns(result1 map[string]*v1.File, result2 map[string][]byte, result3 error) {
+func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturns(result1 map[string]*model.FileCache, result2 map[string][]byte, result3 error) {
fake.determineFileActionsMutex.Lock()
defer fake.determineFileActionsMutex.Unlock()
fake.DetermineFileActionsStub = nil
fake.determineFileActionsReturns = struct {
- result1 map[string]*v1.File
+ result1 map[string]*model.FileCache
result2 map[string][]byte
result3 error
}{result1, result2, result3}
}
-func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturnsOnCall(i int, result1 map[string]*v1.File, result2 map[string][]byte, result3 error) {
+func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturnsOnCall(i int, result1 map[string]*model.FileCache, result2 map[string][]byte, result3 error) {
fake.determineFileActionsMutex.Lock()
defer fake.determineFileActionsMutex.Unlock()
fake.DetermineFileActionsStub = nil
if fake.determineFileActionsReturnsOnCall == nil {
fake.determineFileActionsReturnsOnCall = make(map[int]struct {
- result1 map[string]*v1.File
+ result1 map[string]*model.FileCache
result2 map[string][]byte
result3 error
})
}
fake.determineFileActionsReturnsOnCall[i] = struct {
- result1 map[string]*v1.File
+ result1 map[string]*model.FileCache
result2 map[string][]byte
result3 error
}{result1, result2, result3}
diff --git a/internal/model/file.go b/internal/model/file.go
new file mode 100644
index 000000000..fc6c5baca
--- /dev/null
+++ b/internal/model/file.go
@@ -0,0 +1,22 @@
+// Copyright (c) F5, Inc.
+//
+// This source code is licensed under the Apache License, Version 2.0 license found in the
+// LICENSE file in the root directory of this source tree.
+
+package model
+
+import mpi "github.com/nginx/agent/v3/api/grpc/mpi/v1"
+
+type FileCache struct {
+ File *mpi.File
+ Action FileAction
+}
+
+type FileAction int
+
+const (
+ Add FileAction = iota + 1
+ Update
+ Delete
+ Unchanged
+)
diff --git a/pkg/files/file_helpers_test.go b/pkg/files/file_helpers_test.go
index e0e641977..2000d1567 100644
--- a/pkg/files/file_helpers_test.go
+++ b/pkg/files/file_helpers_test.go
@@ -98,7 +98,6 @@ func Test_GenerateConfigVersion(t *testing.T) {
Name: "file1",
Hash: "hash1",
},
- Action: nil,
},
},
expected: GenerateHash([]byte("hash1")),
@@ -111,14 +110,12 @@ func Test_GenerateConfigVersion(t *testing.T) {
Name: "file1",
Hash: "hash1",
},
- Action: nil,
},
{
FileMeta: &mpi.FileMeta{
Name: "file2",
Hash: "hash2",
},
- Action: nil,
},
},
expected: func() string {