Skip to content

Commit d1d4451

Browse files
committed
Manual updates to NGINX config files should update the NGINX Agent manifest file
1 parent 8bfaf2c commit d1d4451

File tree

5 files changed

+48
-23
lines changed

5 files changed

+48
-23
lines changed

internal/file/file_manager_service.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ type (
6161
Rollback(ctx context.Context, instanceID string) error
6262
UpdateFile(ctx context.Context, instanceID string, fileToUpdate *mpi.File) error
6363
ClearCache()
64-
UpdateCurrentFilesOnDisk(updateFiles map[string]*mpi.File)
64+
UpdateCurrentFilesOnDisk(ctx context.Context, updateFiles map[string]*mpi.File)
6565
DetermineFileActions(currentFiles map[string]*mpi.File, modifiedFiles map[string]*model.FileCache) (
6666
map[string]*model.FileCache, map[string][]byte, error)
6767
IsConnected() bool
@@ -325,7 +325,7 @@ func (fms *FileManagerService) ConfigApply(ctx context.Context,
325325
}
326326
fileOverviewFiles := files.ConvertToMapOfFiles(fileOverview.GetFiles())
327327
// Update map of current files on disk
328-
fms.UpdateCurrentFilesOnDisk(fileOverviewFiles)
328+
fms.UpdateCurrentFilesOnDisk(ctx, fileOverviewFiles)
329329
manifestFileErr := fms.UpdateManifestFile(fileOverviewFiles)
330330
if manifestFileErr != nil {
331331
return model.RollbackRequired, manifestFileErr
@@ -479,10 +479,14 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles map[string]*mpi
479479
fileDiff := make(map[string]*model.FileCache) // Files that have changed, key is file name
480480
fileContents := make(map[string][]byte) // contents of the file, key is file name
481481

482-
manifestFiles, manifestFileErr := fms.manifestFile(currentFiles)
482+
manifestFiles, manifestFileErr := fms.manifestFile()
483483

484-
if manifestFileErr != nil && manifestFiles == nil {
485-
return nil, nil, manifestFileErr
484+
if manifestFileErr != nil {
485+
if errors.Is(manifestFileErr, os.ErrNotExist) {
486+
manifestFiles = currentFiles
487+
} else {
488+
return nil, nil, manifestFileErr
489+
}
486490
}
487491
// if file is in manifestFiles but not in modified files, file has been deleted
488492
// copy contents, set file action
@@ -537,7 +541,7 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles map[string]*mpi
537541

538542
// UpdateCurrentFilesOnDisk updates the FileManagerService currentFilesOnDisk slice which contains the files
539543
// currently on disk
540-
func (fms *FileManagerService) UpdateCurrentFilesOnDisk(currentFiles map[string]*mpi.File) {
544+
func (fms *FileManagerService) UpdateCurrentFilesOnDisk(ctx context.Context, currentFiles map[string]*mpi.File) {
541545
fms.filesMutex.Lock()
542546
defer fms.filesMutex.Unlock()
543547

@@ -546,6 +550,11 @@ func (fms *FileManagerService) UpdateCurrentFilesOnDisk(currentFiles map[string]
546550
for _, currentFile := range currentFiles {
547551
fms.currentFilesOnDisk[currentFile.GetFileMeta().GetName()] = currentFile
548552
}
553+
554+
err := fms.UpdateManifestFile(currentFiles)
555+
if err != nil {
556+
slog.ErrorContext(ctx, "Failed to update manifest file", "error", err)
557+
}
549558
}
550559

551560
func (fms *FileManagerService) UpdateManifestFile(currentFiles map[string]*mpi.File) (err error) {
@@ -575,9 +584,9 @@ func (fms *FileManagerService) UpdateManifestFile(currentFiles map[string]*mpi.F
575584
return nil
576585
}
577586

578-
func (fms *FileManagerService) manifestFile(currentFiles map[string]*mpi.File) (map[string]*mpi.File, error) {
587+
func (fms *FileManagerService) manifestFile() (map[string]*mpi.File, error) {
579588
if _, err := os.Stat(manifestFilePath); err != nil {
580-
return currentFiles, err // Return current files if manifest directory still doesn't exist
589+
return nil, err
581590
}
582591

583592
file, err := os.ReadFile(manifestFilePath)

internal/file/file_manager_service_test.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ func TestFileManagerService_ConfigApply_Update(t *testing.T) {
223223
agentConfig := types.AgentConfig()
224224
agentConfig.AllowedDirectories = []string{tempDir}
225225
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
226-
fileManagerService.UpdateCurrentFilesOnDisk(filesOnDisk)
226+
fileManagerService.UpdateCurrentFilesOnDisk(ctx, filesOnDisk)
227227

228228
request := protos.CreateConfigApplyRequest(overview)
229229

@@ -269,7 +269,7 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) {
269269
agentConfig := types.AgentConfig()
270270
agentConfig.AllowedDirectories = []string{tempDir}
271271
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
272-
fileManagerService.UpdateCurrentFilesOnDisk(filesOnDisk)
272+
fileManagerService.UpdateCurrentFilesOnDisk(ctx, filesOnDisk)
273273

274274
request := protos.CreateConfigApplyRequest(overview)
275275

@@ -286,7 +286,18 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) {
286286
require.NoError(t, err)
287287
assert.NoFileExists(t, tempFile.Name())
288288
assert.Equal(t, fileManagerService.rollbackFileContents[tempFile.Name()], fileContent)
289-
assert.Equal(t, fileManagerService.fileActions[tempFile.Name()].File, filesOnDisk[tempFile.Name()])
289+
assert.Equal(t,
290+
fileManagerService.fileActions[tempFile.Name()].File.GetFileMeta().GetName(),
291+
filesOnDisk[tempFile.Name()].GetFileMeta().GetName(),
292+
)
293+
assert.Equal(t,
294+
fileManagerService.fileActions[tempFile.Name()].File.GetFileMeta().GetHash(),
295+
filesOnDisk[tempFile.Name()].GetFileMeta().GetHash(),
296+
)
297+
assert.Equal(t,
298+
fileManagerService.fileActions[tempFile.Name()].File.GetFileMeta().GetSize(),
299+
filesOnDisk[tempFile.Name()].GetFileMeta().GetSize(),
300+
)
290301
assert.Equal(t, model.OK, writeStatus)
291302
}
292303

internal/file/file_plugin.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ func (fp *FilePlugin) handleConfigApplyFailedRequest(ctx context.Context, msg *b
171171
}
172172

173173
func (fp *FilePlugin) handleConfigApplyRequest(ctx context.Context, msg *bus.Message) {
174+
slog.DebugContext(ctx, "File plugin received config apply request message")
174175
var response *mpi.DataPlaneResponse
175176
correlationID := logger.GetCorrelationID(ctx)
176177

@@ -197,6 +198,7 @@ func (fp *FilePlugin) handleConfigApplyRequest(ctx context.Context, msg *bus.Mes
197198

198199
switch writeStatus {
199200
case model.NoChange:
201+
slog.DebugContext(ctx, "No changes required for config apply request")
200202
dpResponse := fp.createDataPlaneResponse(
201203
correlationID,
202204
mpi.CommandResponse_COMMAND_STATUS_OK,
@@ -280,6 +282,7 @@ func (fp *FilePlugin) handleConfigApplyRequest(ctx context.Context, msg *bus.Mes
280282

281283
return
282284
case model.OK:
285+
slog.DebugContext(ctx, "Changes required for config apply request")
283286
// Send WriteConfigSuccessfulTopic with Correlation and Instance ID for use by resource plugin
284287
data := &model.ConfigApplyMessage{
285288
CorrelationID: correlationID,
@@ -298,7 +301,7 @@ func (fp *FilePlugin) handleNginxConfigUpdate(ctx context.Context, msg *bus.Mess
298301
return
299302
}
300303

301-
fp.fileManagerService.UpdateCurrentFilesOnDisk(files.ConvertToMapOfFiles(nginxConfigContext.Files))
304+
fp.fileManagerService.UpdateCurrentFilesOnDisk(ctx, files.ConvertToMapOfFiles(nginxConfigContext.Files))
302305

303306
err := fp.fileManagerService.UpdateOverview(ctx, nginxConfigContext.InstanceID, nginxConfigContext.Files, 0)
304307
if err != nil {

internal/file/filefakes/fake_file_manager_service_interface.go

Lines changed: 12 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/watcher/watcher_plugin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (*Watcher) Subscriptions() []string {
158158
}
159159

160160
func (w *Watcher) handleConfigApplyRequest(ctx context.Context, msg *bus.Message) {
161-
slog.Info("Watcher plugin received ConfigApplyRequest event")
161+
slog.DebugContext(ctx, "Watcher plugin received ConfigApplyRequest event")
162162
managementPlaneRequest, ok := msg.Data.(*mpi.ManagementPlaneRequest)
163163
if !ok {
164164
slog.ErrorContext(ctx, "Unable to cast message payload to *mpi.ManagementPlaneRequest",

0 commit comments

Comments
 (0)